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

<!--
    This template file contains settings needed to run Apache Hadoop jobs
    with Apache Ignite In-Memory Accelerator.

    You can replace '$HADOOP_HOME/etc/hadoop/mapred-site.xml' file with this one
    to run jobs on localhost (local node can be a part of distributed cluster though).
    To run jobs on remote host you have to change jobtracker address to the REST address
    of any running Ignite node.

    Note that Ignite jars must be in Apache Hadoop client classpath to work
    with this configuration.

    Run script '$IGNITE_HOME/bin/setup-hadoop.{sh|bat}' for Apache Hadoop client setup.
-->

<configuration>
    <!--
        Framework name must be set to 'ignite'.
    -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>ignite</value>
    </property>

    <!--
        Job tracker address must be set to the REST address of any running Ignite node.
    -->
    <property>
        <name>mapreduce.jobtracker.address</name>
        <value>localhost:11211</value>
    </property>

    <!-- Parameters for job tuning. -->
    <!--
    <property>
        <name>mapreduce.job.reduces</name>
        <value>1</value>
    </property>

    <property>
        <name>mapreduce.job.maps</name>
        <value>4</value>
    </property>
    -->

</configuration>
