<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
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>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>hnn-001-01:8030</value>
    </property>

    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>hnn-001-01:8025</value>
    </property>

    <property>
        <name>yarn.resourcemanager.address</name>
        <value>hnn-001-01:8050</value>
    </property>

    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>hnn-001-01:8141</value>
    </property>

    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>hnn-001-01:8088</value>
    </property>

    <property>
        <name>yarn.log.server.url</name>
        <value>http://hnn-001-01:19888/jobhistory/logs/</value>
        <description>URL for job history server</description>
    </property>

    <property>
      <name>yarn.application.classpath</name>
      <value>/usr/lib/hadoop/etc/hadoop, /usr/lib/hadoop/*, /usr/lib/hadoop/lib/*, /usr/lib/hadoop/client/*, /usr/lib/hadoop-hdfs/*, /usr/lib/hadoop-hdfs/lib/*, /usr/lib/hadoop-mapreduce/*, /usr/lib/hadoop-mapreduce/lib/*, /usr/lib/hadoop-yarn/*, /usr/lib/hadoop-yarn/lib/*</value>
    </property>

    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>1024</value>
    </property>

    <property>
        <name>yarn.resourcemanager.scheduler.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
    </property>

    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>87040</value>
    </property>
</configuration>
