<?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>

<% if @hadoop_security_authentication == "kerberos" %>
  <!-- HistoryServer security configs -->
  <property>
    <name>mapreduce.jobhistory.principal</name>
    <value>mapred/_HOST@<%= @kerberos_realm %></value>
  </property>
  <property>
    <name>mapreduce.jobhistory.keytab</name>
    <value>/etc/mapred.keytab</value> <!-- path to the MapReduce keytab -->
  </property>

  <!-- JobTracker security configs -->
  <property>
    <name>mapreduce.jobtracker.kerberos.principal</name>
    <value>mapred/_HOST@<%= @kerberos_realm %></value>
  </property>
  <property>
    <name>mapreduce.jobtracker.kerberos.https.principal</name>
    <value>host/_HOST@<%= @kerberos_realm %></value>
  </property>
  <property>
    <name>mapreduce.jobtracker.keytab.file</name>
    <value>/etc/mapred.keytab</value> <!-- path to the MapReduce keytab -->
  </property>

  <!-- TaskTracker security configs -->
  <property>
    <name>mapreduce.tasktracker.kerberos.principal</name>
    <value>mapred/_HOST@<%= @kerberos_realm %></value>
  </property>
  <property>
    <name>mapreduce.tasktracker.kerberos.https.principal</name>
    <value>host/_HOST@<%= @kerberos_realm %></value>
  </property>
  <property>
    <name>mapreduce.tasktracker.keytab.file</name>
    <value>/etc/mapred.keytab</value> <!-- path to the MapReduce keytab -->
  </property>

  <!-- TaskController settings -->
  <property>
    <name>mapreduce.tasktracker.taskcontroller</name>
    <value>org.apache.hadoop.mapred.LinuxTaskController</value>
  </property>
  <property>
    <name>mapreduce.tasktracker.group</name>
    <value>mapred</value>
  </property>

<% end %>
<% if @mapreduce_cluster_acls_enabled %>
  <property>
    <name>mapreduce.cluster.acls.enabled</name>
    <value><%= @mapreduce_cluster_acls_enabled %></value>
  </property>

<% end %>
<% if @mapreduce_jobhistory_host %>
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value><%= @mapreduce_jobhistory_host %>:<%= @mapreduce_jobhistory_port %></value>
  </property>
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value><%= @mapreduce_jobhistory_host %>:<%= @mapreduce_jobhistory_webapp_port %></value>
  </property>

<% end %>
<% if defined? @mapreduce_framework_name -%>
  <property>
    <name>mapreduce.framework.name</name>
    <value><%= @mapreduce_framework_name %></value>
  </property>

<% end -%>
  <property>
    <name>mapreduce.cluster.local.dir</name>
    <value><%= @mapred_data_dirs.join(",") %></value>
    <final>true</final>
  </property>

<% if @mapreduce_cluster_temp_dir -%>
  <property>
    <name>mapreduce.cluster.temp.dir</name>
    <value><%= @mapreduce_cluster_temp_dir %></value>
  </property>

<% end -%>
<% if @yarn_app_mapreduce_am_staging_dir -%>
  <property>
    <name>yarn.app.mapreduce.am.staging-dir</name>
    <value><%= @yarn_app_mapreduce_am_staging_dir %></value>
  </property>

<% end -%>
  <property>
    <name>mapred.child.java.opts</name>
    <value>-Xmx1024m</value>
  </property>

<% if @mapreduce_task_io_sort_mb -%>
  <property>
    <name>mapreduce.task.io.sort.mb</name>
    <value><%= @mapreduce_task_io_sort_mb %></value>
  </property>

<% end -%>
<% if @mapreduce_task_io_sort_factor -%>
  <property>
    <name>mapreduce.task.io.sort.factor</name>
    <value><%= @mapreduce_task_io_sort_factor %></value>
  </property>

<% end -%>
<% if @mapreduce_reduce_shuffle_parallelcopies -%>
  <property>
    <name>mapreduce.reduce.shuffle.parallelcopies</name>
    <!-- set this to somewhere between sqrt(nodes) and nodes/2.
    for <20 nodes, set == |nodes| -->
    <value><%= @mapreduce_reduce_shuffle_parallelcopies %></value>
  </property>

<% end -%>
<% if @mapreduce_tasktracker_map_tasks_maximum -%>
  <property>
    <name>mapreduce.tasktracker.map.tasks.maximum</name>
    <!-- see other kb entry about this one. -->
    <value><%= @mapreduce_tasktracker_map_tasks_maximum %></value>
    <final>true</final>
  </property>

<% end -%>
<% if @mapreduce_tasktracker_reduce_tasks_maximum -%>
  <property>
    <name>mapreduce.tasktracker.reduce.tasks.maximum</name>
    <!-- see other kb entry about this one. -->
    <value><%= @mapreduce_tasktracker_reduce_tasks_maximum %></value>
    <final>true</final>
  </property>

<% end -%>
<% if @mapreduce_tasktracker_http_threads -%>
  <property>
    <name>mapreduce.tasktracker.http.threads</name>
    <value><%= @mapreduce_tasktracker_http_threads %></value>
    <final>true</final>
  </property>

<% end -%>
<% if @mapreduce_output_fileoutputformat_compress_type -%>
  <property>
    <name>mapreduce.output.fileoutputformat.compress.type</name>
    <value><%= @mapreduce_output_fileoutputformat_compress_type %></value>
    <description>If the job outputs are to compressed as
    SequenceFiles, how should they be compressed? Should be one of
    NONE, RECORD or BLOCK.</description>
  </property>

<% end -%>
<% if @mapreduce_map_output_compress -%>
  <property>
    <name>mapreduce.map.output.compress</name>
    <value><%= @mapreduce_map_output_compress %></value>
  </property>

<% end -%>
<% if @mapreduce_job_reduce_slowstart_completedmaps -%>
  <property>
    <name>mapreduce.job.reduce.slowstart.completedmaps</name>
    <value><%= @mapreduce_job_reduce_slowstart_completedmaps %></value>
  </property>

<% end -%>
</configuration>
