<?xml version="1.0" encoding="UTF-8"?>

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<configuration>
    <!-- Configure Myriad Scheduler here -->
    <property>
        <name>yarn.resourcemanager.scheduler.class</name>
        <value>org.apache.myriad.scheduler.yarn.MyriadFairScheduler</value>
    </property>

    <!-- Configure Myriad Scheduler here -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>myriad_executor,mapreduce_shuffle</value>
        <!-- For MapR clusters, use the below value-->
        <value>myriad_executor,mapreduce_shuffle,mapr_direct_shuffle</value>
    </property>
    <property>
      <name>yarn.nodemanager.aux-services.myriad_executor.class</name>
      <value>org.apache.myriad.executor.MyriadExecutorAuxService</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
      <name>yarn.resourcemanager.store.class</name>
      <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.MyriadFileSystemRMStateStore</value>
    </property>
    <property>
      <name>yarn.resourcemanager.recovery.enabled</name>
      <value>true</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>
        <value>${nodemanager.resource.cpu-vcores}</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>${nodemanager.resource.memory-mb}</value>
    </property>

    <!-- Cgroups specific configuration -->
    <property>
        <description>who will execute(launch) the containers.</description>
        <name>yarn.nodemanager.container-executor.class</name>
        <value>${yarn.nodemanager.container-executor.class}</value>
    </property>
    <property>
        <description>The class which should help the LCE handle resources.</description>
        <name>yarn.nodemanager.linux-container-executor.resources-handler.class</name>
        <value>${yarn.nodemanager.linux-container-executor.resources-handler.class}</value>
    </property>
    <property>
        <name>yarn.nodemanager.linux-container-executor.cgroups.hierarchy</name>
        <value>${yarn.nodemanager.linux-container-executor.cgroups.hierarchy}</value>
    </property>
    <property>
        <name>yarn.nodemanager.linux-container-executor.cgroups.mount</name>
        <value>${yarn.nodemanager.linux-container-executor.cgroups.mount}</value>
    </property>
    <property>
        <name>yarn.nodemanager.linux-container-executor.cgroups.mount-path</name>
        <value>${yarn.nodemanager.linux-container-executor.cgroups.mount-path}</value>
    </property>
    <property>
        <name>yarn.nodemanager.linux-container-executor.group</name>
        <value>${yarn.nodemanager.linux-container-executor.group}</value>
    </property>
    <property>
        <name>yarn.nodemanager.linux-container-executor.path</name>
        <value>${yarn.home}/bin/container-executor</value>
    </property>
</configuration>
