<?xml version="1.0"?>
<!--
  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.
-->

<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">

<document>
  
  <header>
    <title>Cluster Setup</title>
  </header>
  
  <body>
  
    <section>
      <title>Purpose</title>
      
      <p>This document describes how to install, configure and manage non-trivial
      Hadoop clusters ranging from a few nodes to extremely large clusters with 
      thousands of nodes.</p>
      <p>
      To play with Hadoop, you may first want to install Hadoop on a single machine (see <a href="single_node_setup.html"> Hadoop Quick Start</a>).
      </p>
    </section>
    
    <section>
      <title>Pre-requisites</title>
      
      <ol>
        <li>
          Make sure all <a href="single_node_setup.html#PreReqs">requisite</a> software 
          is installed on all nodes in your cluster.
        </li>
        <li>
          <a href="single_node_setup.html#Download">Get</a> the Hadoop software.
        </li>
      </ol>
    </section>
    
    <section>
      <title>Installation</title>
      
      <p>Installing a Hadoop cluster typically involves unpacking the software 
      on all the machines in the cluster.</p>
      
      <p>Typically one machine in the cluster is designated as the 
      <code>NameNode</code> and another machine the as <code>JobTracker</code>,
      exclusively. These are the <em>masters</em>. The rest of the machines in 
      the cluster act as both <code>DataNode</code> <em>and</em> 
      <code>TaskTracker</code>. These are the <em>slaves</em>.</p>
      
      <p>The root of the distribution is referred to as 
      <code>HADOOP_HOME</code>. All machines in the cluster usually have the same 
      <code>HADOOP_HOME</code> path.</p>
    </section>
    
    <section>
      <title>Configuration</title>
      
      <p>The following sections describe how to configure a Hadoop cluster.</p>
      
      <section>
        <title>Configuration Files</title>
        
        <p>Hadoop configuration is driven by two types of important 
        configuration files:</p>
        <ol>
          <li>
            Read-only default configuration - 
            <a href="ext:core-default">src/core/core-default.xml</a>, 
            <a href="ext:hdfs-default">src/hdfs/hdfs-default.xml</a>, 
            <a href="ext:mapred-default">src/mapred/mapred-default.xml</a> and
            <a href="ext:mapred-queues">conf/mapred-queues.xml.template</a>.
          </li>
          <li>
            Site-specific configuration - 
            <a href="#core-site.xml">conf/core-site.xml</a>, 
            <a href="#hdfs-site.xml">conf/hdfs-site.xml</a>, 
            <a href="#mapred-site.xml">conf/mapred-site.xml</a> and
            <a href="#mapred-queues.xml">conf/mapred-queues.xml</a>.
          </li>
        </ol>
      
        <p>To learn more about how the Hadoop framework is controlled by these 
        configuration files, look 
        <a href="ext:api/org/apache/hadoop/conf/configuration">here</a>.</p>
      
        <p>Additionally, you can control the Hadoop scripts found in the 
        <code>bin/</code> directory of the distribution, by setting site-specific 
        values via the <code>conf/hadoop-env.sh</code>.</p>
      </section>
      
      <section>
        <title>Site Configuration</title>
        
        <p>To configure the Hadoop cluster you will need to configure the
        <em>environment</em> in which the Hadoop daemons execute as well as
        the <em>configuration parameters</em> for the Hadoop daemons.</p>
        
        <p>The Hadoop daemons are <code>NameNode</code>/<code>DataNode</code> 
        and <code>JobTracker</code>/<code>TaskTracker</code>.</p>
        
        <section>
          <title>Configuring the Environment of the Hadoop Daemons</title>

          <p>Administrators should use the <code>conf/hadoop-env.sh</code> script
          to do site-specific customization of the Hadoop daemons' process 
          environment.</p> 
          
          <p>At the very least you should specify the
          <code>JAVA_HOME</code> so that it is correctly defined on each
          remote node.</p>
          
          <p>Administrators can configure individual daemons using the
          configuration options <code>HADOOP_*_OPTS</code>. Various options 
          available are shown below in the table. </p>
          <table>
          <tr><th>Daemon</th><th>Configure Options</th></tr>
          <tr><td>NameNode</td><td>HADOOP_NAMENODE_OPTS</td></tr>
          <tr><td>DataNode</td><td>HADOOP_DATANODE_OPTS</td></tr>
          <tr><td>SecondaryNamenode</td>
              <td>HADOOP_SECONDARYNAMENODE_OPTS</td></tr>
          <tr><td>JobTracker</td><td>HADOOP_JOBTRACKER_OPTS</td></tr>
          <tr><td>TaskTracker</td><td>HADOOP_TASKTRACKER_OPTS</td></tr>
          </table>
          
          <p> For example, To configure Namenode to use parallelGC, the
          following statement should be added in <code>hadoop-env.sh</code> :
          <br/><code>
          export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"
          </code><br/></p>
          
          <p>Other useful configuration parameters that you can customize 
          include:</p>
          <ul>
            <li>
              <code>HADOOP_LOG_DIR</code> - The directory where the daemons'
              log files are stored. They are automatically created if they don't
              exist.
            </li>
            <li>
              <code>HADOOP_HEAPSIZE</code> - The maximum amount of heapsize 
              to use, in MB e.g. <code>1000MB</code>. This is used to 
              configure the heap size for the hadoop daemon. By default,
              the value is <code>1000MB</code>.
            </li>
          </ul>
        </section>
        
        <section>
          <title>Configuring the Hadoop Daemons</title>
          
          <p>This section deals with important parameters to be specified in the
          following:</p>
          <anchor id="core-site.xml"/><p><code>conf/core-site.xml</code>:</p>

		  <table>
  		    <tr>
		      <th>Parameter</th>
		      <th>Value</th> 
		      <th>Notes</th>
		    </tr>
		    <tr>
              <td>fs.default.name</td>
              <td>URI of <code>NameNode</code>.</td>
              <td><em>hdfs://hostname/</em></td>
            </tr>
          </table>

      <anchor id="hdfs-site.xml"/><p><code>conf/hdfs-site.xml</code>:</p>
          
      <table>   
        <tr>
          <th>Parameter</th>
          <th>Value</th> 
          <th>Notes</th>
        </tr>
		    <tr>
		      <td>dfs.name.dir</td>
		      <td>
		        Path on the local filesystem where the <code>NameNode</code> 
		        stores the namespace and transactions logs persistently.</td>
		      <td>
		        If this is a comma-delimited list of directories then the name 
		        table is replicated in all of the directories, for redundancy.
		      </td>
		    </tr>
		    <tr>
		      <td>dfs.data.dir</td>
		      <td>
		        Comma separated list of paths on the local filesystem of a 
		        <code>DataNode</code> where it should store its blocks.
		      </td>
		      <td>
		        If this is a comma-delimited list of directories, then data will 
		        be stored in all named directories, typically on different 
		        devices.
		      </td>
		    </tr>
      </table>

      <anchor id="mapred-site.xml"/><p><code>conf/mapred-site.xml</code>:</p>

      <table>
          <tr>
          <th>Parameter</th>
          <th>Value</th> 
          <th>Notes</th>
        </tr>
        <tr>
          <td>mapreduce.jobtracker.address</td>
          <td>Host or IP and port of <code>JobTracker</code>.</td>
          <td><em>host:port</em> pair.</td>
        </tr>
		    <tr>
		      <td>mapreduce.jobtracker.system.dir</td>
		      <td>
		        Path on the HDFS where where the Map/Reduce framework stores 
		        system files e.g. <code>/hadoop/mapred/system/</code>.
		      </td>
		      <td>
		        This is in the default filesystem (HDFS) and must be accessible 
		        from both the server and client machines.
		      </td>
		    </tr>
		    <tr>
		      <td>mapreduce.cluster.local.dir</td>
		      <td>
		        Comma-separated list of paths on the local filesystem where 
		        temporary Map/Reduce data is written.
		      </td>
		      <td>Multiple paths help spread disk i/o.</td>
		    </tr>
		    <tr>
		      <td>mapred.tasktracker.{map|reduce}.tasks.maximum</td>
		      <td>
		        The maximum number of Map/Reduce tasks, which are run 
		        simultaneously on a given <code>TaskTracker</code>, individually.
		      </td>
		      <td>
		        Defaults to 2 (2 maps and 2 reduces), but vary it depending on 
		        your hardware.
		      </td>
		    </tr>
		    <tr>
		      <td>dfs.hosts/dfs.hosts.exclude</td>
		      <td>List of permitted/excluded DataNodes.</td>
		      <td>
		        If necessary, use these files to control the list of allowable 
		        datanodes.
		      </td>
		    </tr>
		    <tr>
		      <td>mapreduce.jobtracker.hosts.filename/mapreduce.jobtracker.hosts.exclude.filename</td>
		      <td>List of permitted/excluded TaskTrackers.</td>
		      <td>
		        If necessary, use these files to control the list of allowable 
		        TaskTrackers.
		      </td>
  		    </tr>
        <tr>
          <td>mapreduce.cluster.job-authorization-enabled</td>
          <td>Boolean, specifying whether job ACLs are supported for 
              authorizing view and modification of a job</td>
          <td>
            If <em>true</em>, job ACLs would be checked while viewing or
            modifying a job. More details are available at 
            <a href ="ext:mapred-tutorial/JobAuthorization">Job Authorization</a>. 
          </td>
        </tr>
  		    
		  </table>      

          <p>Typically all the above parameters are marked as 
          <a href="ext:api/org/apache/hadoop/conf/configuration/final_parameters">
          final</a> to ensure that they cannot be overriden by user-applications.
          </p>

          <anchor id="mapred-queues.xml"/><p><code>conf/mapred-queues.xml
          </code>:</p>
          <p>This file is used to configure the queues in the Map/Reduce
          system. Queues are abstract entities in the JobTracker that can be
          used to manage collections of jobs. They provide a way for 
          administrators to organize jobs in specific ways and to enforce 
          certain policies on such collections, thus providing varying
          levels of administrative control and management functions on jobs.
          </p> 
          <p>One can imagine the following sample scenarios:</p>
          <ul>
            <li> Jobs submitted by a particular group of users can all be 
            submitted to one queue. </li> 
            <li> Long running jobs in an organization can be submitted to a
            queue. </li>
            <li> Short running jobs can be submitted to a queue and the number
            of jobs that can run concurrently can be restricted. </li> 
          </ul> 
          <p>The usage of queues is closely tied to the scheduler configured
          at the JobTracker via <em>mapreduce.jobtracker.taskscheduler</em>.
          The degree of support of queues depends on the scheduler used. Some
          schedulers support a single queue, while others support more complex
          configurations. Schedulers also implement the policies that apply 
          to jobs in a queue. Some schedulers, such as the Fairshare scheduler,
          implement their own mechanisms for collections of jobs and do not rely
          on queues provided by the framework. The administrators are 
          encouraged to refer to the documentation of the scheduler they are
          interested in for determining the level of support for queues.</p>
          <p>The Map/Reduce framework supports some basic operations on queues
          such as job submission to a specific queue, access control for queues,
          queue states, viewing configured queues and their properties
          and refresh of queue properties. In order to fully implement some of
          these operations, the framework takes the help of the configured
          scheduler.</p>
          <p>The following types of queue configurations are possible:</p>
          <ul>
            <li> Single queue: The default configuration in Map/Reduce comprises
            of a single queue, as supported by the default scheduler. All jobs
            are submitted to this default queue which maintains jobs in a priority
            based FIFO order.</li>
            <li> Multiple single level queues: Multiple queues are defined, and
            jobs can be submitted to any of these queues. Different policies
            can be applied to these queues by schedulers that support this 
            configuration to provide a better level of support. For example,
            the <a href="ext:capacity-scheduler">capacity scheduler</a>
            provides ways of configuring different 
            capacity and fairness guarantees on these queues.</li>
            <li> Hierarchical queues: Hierarchical queues are a configuration in
            which queues can contain other queues within them recursively. The
            queues that contain other queues are referred to as 
            container queues. Queues that do not contain other queues are 
            referred as leaf or job queues. Jobs can only be submitted to leaf
            queues. Hierarchical queues can potentially offer a higher level 
            of control to administrators, as schedulers can now build a
            hierarchy of policies where policies applicable to a container
            queue can provide context for policies applicable to queues it
            contains. It also opens up possibilities for delegating queue
            administration where administration of queues in a container queue
            can be turned over to a different set of administrators, within
            the context provided by the container queue. For example, the
            <a href="ext:capacity-scheduler">capacity scheduler</a>
            uses hierarchical queues to partition capacity of a cluster
            among container queues, and allowing queues they contain to divide
            that capacity in more ways.</li> 
          </ul>

          <p>Most of the configuration of the queues can be refreshed/reloaded
          without restarting the Map/Reduce sub-system by editing this
          configuration file as described in the section on
          <a href="commands_manual.html#RefreshQueues">reloading queue 
          configuration</a>.
          Not all configuration properties can be reloaded of course,
          as will description of each property below explain.</p>

          <p>The format of conf/mapred-queues.xml is different from the other 
          configuration files, supporting nested configuration
          elements to support hierarchical queues. The format is as follows:
          </p>

          <source>
          &lt;queues aclsEnabled="$aclsEnabled"&gt;
            &lt;queue&gt;
              &lt;name&gt;$queue-name&lt;/name&gt;
              &lt;state&gt;$state&lt;/state&gt;
              &lt;queue&gt;
                &lt;name&gt;$child-queue1&lt;/name&gt;
                &lt;properties&gt;
                   &lt;property key="$key" value="$value"/&gt;
                   ...
                &lt;/properties&gt;
                &lt;queue&gt;
                  &lt;name&gt;$grand-child-queue1&lt;/name&gt;
                  ...
                &lt;/queue&gt;
              &lt;/queue&gt;
              &lt;queue&gt;
                &lt;name&gt;$child-queue2&lt;/name&gt;
                ...
              &lt;/queue&gt;
              ...
              ...
              ...
              &lt;queue&gt;
                &lt;name&gt;$leaf-queue&lt;/name&gt;
                &lt;acl-submit-job&gt;$acls&lt;/acl-submit-job&gt;
                &lt;acl-administer-jobs&gt;$acls&lt;/acl-administer-jobs&gt;
                &lt;properties&gt;
                   &lt;property key="$key" value="$value"/&gt;
                   ...
                &lt;/properties&gt;
              &lt;/queue&gt;
            &lt;/queue&gt;
          &lt;/queues&gt;
          </source>
          <table>
            <tr>
              <th>Tag/Attribute</th>
              <th>Value</th>
              <th>
              	<a href="commands_manual.html#RefreshQueues">Refresh-able?</a>
              </th>
              <th>Notes</th>
            </tr>

            <tr>
              <td><anchor id="queues_tag"/>queues</td>
              <td>Root element of the configuration file.</td>
              <td>Not-applicable</td>
              <td>All the queues are nested inside this root element of the
              file. There can be only one root queues element in the file.</td>
            </tr>

            <tr>
              <td>aclsEnabled</td>
              <td>Boolean attribute to the
              <a href="#queues_tag"><em>&lt;queues&gt;</em></a> tag
              specifying whether ACLs are supported for controlling job
              submission and administration for <em>all</em> the queues
              configured.
              </td>
              <td>Yes</td>
              <td>If <em>false</em>, ACLs are ignored for <em>all</em> the
              configured queues. <br/><br/>
              If <em>true</em>, the user and group details of the user
              are checked against the configured ACLs of the corresponding
              job-queue while submitting and administering jobs. ACLs can be
              specified for each queue using the queue-specific tags
              "acl-$acl_name", defined below. ACLs are checked only against
              the job-queues, i.e. the leaf-level queues; ACLs configured
              for the rest of the queues in the hierarchy are ignored.
              </td>
            </tr>

            <tr>
              <td><anchor id="queue_tag"/>queue</td>
              <td>A child element of the
              <a href="#queues_tag"><em>&lt;queues&gt;</em></a> tag or another
              <a href="#queue_tag"><em>&lt;queue&gt;</em></a>. Denotes a queue
              in the system.
              </td>
              <td>Not applicable</td>
              <td>Queues can be hierarchical and so this element can contain
              children of this same type.</td>
            </tr>

            <tr>
              <td>name</td>
              <td>Child element of a 
              <a href="#queue_tag"><em>&lt;queue&gt;</em></a> specifying the
              name of the queue.</td>
              <td>No</td>
              <td>Name of the queue cannot contain the character <em>":"</em>
              which is reserved as the queue-name delimiter when addressing a
              queue in a hierarchy.</td>
            </tr>

            <tr>
              <td>state</td>
              <td>Child element of a
              <a href="#queue_tag"><em>&lt;queue&gt;</em></a> specifying the
              state of the queue.
              </td>
              <td>Yes</td>
              <td>Each queue has a corresponding state. A queue in
              <em>'running'</em> state can accept new jobs, while a queue in
              <em>'stopped'</em> state will stop accepting any new jobs. State
              is defined and respected by the framework only for the
              leaf-level queues and is ignored for all other queues.
              <br/><br/>
              The state of the queue can be viewed from the command line using
              <code>'bin/mapred queue'</code> command and also on the the Web
              UI.<br/><br/>
              Administrators can stop and start queues at runtime using the
              feature of <a href="commands_manual.html#RefreshQueues">reloading
              queue configuration</a>. If a queue is stopped at runtime, it
              will complete all the existing running jobs and will stop
              accepting any new jobs.
              </td>
            </tr>

            <tr>
              <td>acl-submit-job</td>
              <td>Child element of a
              <a href="#queue_tag"><em>&lt;queue&gt;</em></a> specifying the
              list of users and groups that can submit jobs to the specified
              queue.</td>
              <td>Yes</td>
              <td>
              Applicable only to leaf-queues.<br/><br/>
              The list of users and groups are both comma separated
              list of names. The two lists are separated by a blank.
              Example: <em>user1,user2 group1,group2</em>.
              If you wish to define only a list of groups, provide
              a blank at the beginning of the value.
              <br/><br/>
              </td>
            </tr>

            <tr>
              <td>acl-administer-job</td>
              <td>Child element of a
              <a href="#queue_tag"><em>&lt;queue&gt;</em></a> specifying the
              list of users and groups that can change the priority of a job
              or kill a job that has been submitted to the specified queue.
              </td>
              <td>Yes</td>
              <td>
              Applicable only to leaf-queues.<br/><br/>
              The list of users and groups are both comma separated
              list of names. The two lists are separated by a blank.
              Example: <em>user1,user2 group1,group2</em>.
              If you wish to define only a list of groups, provide
              a blank at the beginning of the value. Note that an
              owner of a job can always change the priority or kill
              his/her own job, irrespective of the ACLs.
              </td>
            </tr>

            <tr>
              <td><anchor id="properties_tag"/>properties</td>
              <td>Child element of a 
              <a href="#queue_tag"><em>&lt;queue&gt;</em></a> specifying the
              scheduler specific properties.</td>
              <td>Not applicable</td>
              <td>The scheduler specific properties are the children of this
              element specified as a group of &lt;property&gt; tags described
              below. The JobTracker completely ignores these properties. These
              can be used as per-queue properties needed by the scheduler
              being configured. Please look at the scheduler specific
              documentation as to how these properties are used by that
              particular scheduler.
              </td>
            </tr>

            <tr>
              <td><anchor id="property_tag"/>property</td>
              <td>Child element of
              <a href="#properties_tag"><em>&lt;properties&gt;</em></a> for a
              specific queue.</td>
              <td>Not applicable</td>
              <td>A single scheduler specific queue-property. Ignored by
              the JobTracker and used by the scheduler that is configured.</td>
            </tr>

            <tr>
              <td>key</td>
              <td>Attribute of a
              <a href="#property_tag"><em>&lt;property&gt;</em></a> for a
              specific queue.</td>
              <td>Scheduler-specific</td>
              <td>The name of a single scheduler specific queue-property.</td>
            </tr>

            <tr>
              <td>value</td>
              <td>Attribute of a
              <a href="#property_tag"><em>&lt;property&gt;</em></a> for a
              specific queue.</td>
              <td>Scheduler-specific</td>
              <td>The value of a single scheduler specific queue-property.
              The value can be anything that is left for the proper
              interpretation by the scheduler that is configured.</td>
            </tr>

         </table>

          <p>Once the queues are configured properly and the Map/Reduce
          system is up and running, from the command line one can
          <a href="commands_manual.html#QueuesList">get the list
          of queues</a> and
          <a href="commands_manual.html#QueuesInfo">obtain
          information specific to each queue</a>. This information is also
          available from the web UI. On the web UI, queue information can be
          seen by going to queueinfo.jsp, linked to from the queues table-cell
          in the cluster-summary table. The queueinfo.jsp prints the hierarchy
          of queues as well as the specific information for each queue.
          </p>

          <p> Users can submit jobs only to a
          leaf-level queue by specifying the fully-qualified queue-name for
          the property name <em>mapreduce.job.queuename</em> in the job
          configuration. The character ':' is the queue-name delimiter and so,
          for e.g., if one wants to submit to a configured job-queue 'Queue-C'
          which is one of the sub-queues of 'Queue-B' which in-turn is a
          sub-queue of 'Queue-A', then the job configuration should contain
          property <em>mapreduce.job.queuename</em> set to the <em>
          &lt;value&gt;Queue-A:Queue-B:Queue-C&lt;/value&gt;</em></p>
         </section>
          <section>
            <title>Real-World Cluster Configurations</title>
            
            <p>This section lists some non-default configuration parameters which 
            have been used to run the <em>sort</em> benchmark on very large 
            clusters.</p>
            
            <ul>
              <li>
                <p>Some non-default configuration values used to run sort900,
                that is 9TB of data sorted on a cluster with 900 nodes:</p>
                <table>
  		          <tr>
                <th>Configuration File</th>
		            <th>Parameter</th>
		            <th>Value</th> 
		            <th>Notes</th>
		          </tr>
                  <tr>
                    <td>conf/hdfs-site.xml</td>
                    <td>dfs.block.size</td>
                    <td>134217728</td>
                    <td>HDFS blocksize of 128MB for large file-systems.</td>
                  </tr>
                  <tr>
                    <td>conf/hdfs-site.xml</td>
                    <td>dfs.namenode.handler.count</td>
                    <td>40</td>
                    <td>
                      More NameNode server threads to handle RPCs from large 
                      number of DataNodes.
                    </td>
                  </tr>
                  <tr>
                    <td>conf/mapred-site.xml</td>
                    <td>mapreduce.reduce.shuffle.parallelcopies</td>
                    <td>20</td>
                    <td>
                      Higher number of parallel copies run by reduces to fetch
                      outputs from very large number of maps.
                    </td>
                  </tr>
                  <tr>
                    <td>conf/mapred-site.xml</td>
                    <td>mapreduce.map.java.opts</td>
                    <td>-Xmx512M</td>
                    <td>
                      Larger heap-size for child jvms of maps. 
                    </td>
                  </tr>
                  <tr>
                    <td>conf/mapred-site.xml</td>
                    <td>mapreduce.reduce.java.opts</td>
                    <td>-Xmx512M</td>
                    <td>
                      Larger heap-size for child jvms of reduces. 
                    </td>
                  </tr>
                  <tr>
                    <td>conf/core-site.xml</td>
                    <td>fs.inmemory.size.mb</td>
                    <td>200</td>
                    <td>
                      Larger amount of memory allocated for the in-memory 
                      file-system used to merge map-outputs at the reduces.
                    </td>
                  </tr>
                  <tr>
                    <td>conf/core-site.xml</td>
                    <td>mapreduce.task.io.sort.factor</td>
                    <td>100</td>
                    <td>More streams merged at once while sorting files.</td>
                  </tr>
                  <tr>
                    <td>conf/core-site.xml</td>
                    <td>mapreduce.task.io.sort.mb</td>
                    <td>200</td>
                    <td>Higher memory-limit while sorting data.</td>
                  </tr>
                  <tr>
                    <td>conf/core-site.xml</td>
                    <td>io.file.buffer.size</td>
                    <td>131072</td>
                    <td>Size of read/write buffer used in SequenceFiles.</td>
                  </tr>
                </table>
              </li>
              <li>
                <p>Updates to some configuration values to run sort1400 and 
                sort2000, that is 14TB of data sorted on 1400 nodes and 20TB of
                data sorted on 2000 nodes:</p>
                <table>
  		          <tr>
                <th>Configuration File</th>
		            <th>Parameter</th>
		            <th>Value</th> 
		            <th>Notes</th>
		          </tr>
                  <tr>
                    <td>conf/mapred-site.xml</td>
                    <td>mapreduce.jobtracker.handler.count</td>
                    <td>60</td>
                    <td>
                      More JobTracker server threads to handle RPCs from large 
                      number of TaskTrackers.
                    </td>
                  </tr>
                  <tr>
                    <td>conf/mapred-site.xml</td>
                    <td>mapreduce.reduce.shuffle.parallelcopies</td>
                    <td>50</td>
                    <td></td>
                  </tr>
                  <tr>
                    <td>conf/mapred-site.xml</td>
                    <td>mapreduce.tasktracker.http.threads</td>
                    <td>50</td>
                    <td>
                      More worker threads for the TaskTracker's http server. The
                      http server is used by reduces to fetch intermediate 
                      map-outputs.
                    </td>
                  </tr>
                  <tr>
                    <td>conf/mapred-site.xml</td>
                    <td>mapreduce.map.java.opts</td>
                    <td>-Xmx512M</td>
                    <td>
                      Larger heap-size for child jvms of maps. 
                    </td>
                  </tr>
                  <tr>
                    <td>conf/mapred-site.xml</td>
                    <td>mapreduce.reduce.java.opts</td>
                    <td>-Xmx1024M</td>
                    <td>Larger heap-size for child jvms of reduces.</td>
                  </tr>
                </table>
              </li>
            </ul>
          </section>
        <section>
        <title>Configuring Memory Parameters for MapReduce Jobs</title>
        <p>
        As MapReduce jobs could use varying amounts of memory, Hadoop
        provides various configuration options to users and administrators
        for managing memory effectively. Some of these options are job 
        specific and can be used by users. While setting up a cluster, 
        administrators can configure appropriate default values for these 
        options so that users jobs run out of the box. Other options are 
        cluster specific and can be used by administrators to enforce 
        limits and prevent misconfigured or memory intensive jobs from 
        causing undesired side effects on the cluster.
        </p>
        <p> 
        The values configured should
        take into account the hardware resources of the cluster, such as the
        amount of physical and virtual memory available for tasks,
        the number of slots configured on the slaves and the requirements
        for other processes running on the slaves. If right values are not
        set, it is likely that jobs start failing with memory related
        errors or in the worst case, even affect other tasks or
        the slaves themselves.
        </p>

        <section>
          <title>Monitoring Task Memory Usage</title>
          <p>
          Before describing the memory options, it is
          useful to look at a feature provided by Hadoop to monitor
          memory usage of MapReduce tasks it runs. The basic objective
          of this feature is to prevent MapReduce tasks from consuming
          memory beyond a limit that would result in their affecting
          other processes running on the slave, including other tasks
          and daemons like the DataNode or TaskTracker.
          </p>
        
          <p>
          <em>Note:</em> For the time being, this feature is available
          only for the Linux platform.
          </p>
          
          <p>
          Hadoop allows monitoring to be done both for virtual
          and physical memory usage of tasks. This monitoring 
          can be done independently of each other, and therefore the
          options can be configured independently of each other. It
          has been found in some environments, particularly related
          to streaming, that virtual memory recorded for tasks is high
          because of libraries loaded by the programs used to run
          the tasks. However, this memory is largely unused and does
          not affect the slaves's memory itself. In such cases,
          monitoring based on physical memory can provide a more
          accurate picture of memory usage.
          </p>
          
          <p>
          This feature considers that there is a limit on
          the amount of virtual or physical memory on the slaves 
          that can be used by
          the running MapReduce tasks. The rest of the memory is
          assumed to be required for the system and other processes.
          Since some jobs may require higher amount of memory for their
          tasks than others, Hadoop allows jobs to specify how much
          memory they expect to use at a maximum. Then by using
          resource aware scheduling and monitoring, Hadoop tries to
          ensure that at any time, only enough tasks are running on
          the slaves as can meet the dual constraints of an individual
          job's memory requirements and the total amount of memory
          available for all MapReduce tasks.
          </p>
          
          <p>
          The TaskTracker monitors tasks in regular intervals. Each time,
          it operates in two steps:
          </p> 
          
          <ul>
          
          <li>
          In the first step, it
          checks that a job's task and any child processes it
          launches are not cumulatively using more virtual or physical 
          memory than specified. If both virtual and physical memory
          monitoring is enabled, then virtual memory usage is checked
          first, followed by physical memory usage. 
          Any task that is found to
          use more memory is killed along with any child processes it
          might have launched, and the task status is marked
          <em>failed</em>. Repeated failures such as this will terminate
          the job. 
          </li>
          
          <li>
          In the next step, it checks that the cumulative virtual and
          physical memory 
          used by all running tasks and their child processes
          does not exceed the total virtual and physical memory limit,
          respectively. Again, virtual memory limit is checked first, 
          followed by physical memory limit. In this case, it kills
          enough number of tasks, along with any child processes they
          might have launched, until the cumulative memory usage
          is brought under limit. In the case of virtual memory limit
          being exceeded, the tasks chosen for killing are
          the ones that have made the least progress. In the case of
          physical memory limit being exceeded, the tasks chosen
          for killing are the ones that have used the maximum amount
          of physical memory. Also, the status
          of these tasks is marked as <em>killed</em>, and hence repeated
          occurrence of this will not result in a job failure. 
          </li>
          
          </ul>
          
          <p>
          In either case, the task's diagnostic message will indicate the
          reason why the task was terminated.
          </p>
          
          <p>
          Resource aware scheduling can ensure that tasks are scheduled
          on a slave only if their memory requirement can be satisfied
          by the slave. The Capacity Scheduler, for example,
          takes virtual memory requirements into account while 
          scheduling tasks, as described in the section on 
          <a href="ext:capacity-scheduler/MemoryBasedTaskScheduling"> 
          memory based scheduling</a>.
          </p>
 
          <p>
          Memory monitoring is enabled when certain configuration 
          variables are defined with non-zero values, as described below.
          </p>
          
        </section>

        <section>
          <title>Job Specific Options</title>
          <p>
          Memory related options that can be configured individually per 
          job are described in detail in the section on
          <a href="ext:mapred-tutorial/ConfiguringMemoryRequirements">
          Configuring Memory Requirements For A Job</a> in the MapReduce
          tutorial. While setting up
          the cluster, the Hadoop defaults for these options can be reviewed
          and changed to better suit the job profiles expected to be run on
          the clusters, as also the hardware configuration.
          </p>
          <p>
          As with any other configuration option in Hadoop, if the 
          administrators desire to prevent users from overriding these 
          options in jobs they submit, these values can be marked as
          <em>final</em> in the cluster configuration.
          </p>
        </section>
        
          
        <section>
          <title>Cluster Specific Options</title>
          
          <p>
          This section describes the memory related options that are
          used by the JobTracker and TaskTrackers, and cannot be changed 
          by jobs. The values set for these options should be the same
          for all the slave nodes in a cluster.
          </p>
          
          <ul>
          
          <li>
          <code>mapreduce.cluster.{map|reduce}memory.mb</code>: These
          options define the default amount of virtual memory that should be
          allocated for MapReduce tasks running in the cluster. They
          typically match the default values set for the options
          <code>mapreduce.{map|reduce}.memory.mb</code>. They help in the
          calculation of the total amount of virtual memory available for 
          MapReduce tasks on a slave, using the following equation:<br/>
          <em>Total virtual memory for all MapReduce tasks = 
          (mapreduce.cluster.mapmemory.mb * 
           mapreduce.tasktracker.map.tasks.maximum) +
          (mapreduce.cluster.reducememory.mb * 
           mapreduce.tasktracker.reduce.tasks.maximum)</em><br/>
          Typically, reduce tasks require more memory than map tasks.
          Hence a higher value is recommended for 
          <em>mapreduce.cluster.reducememory.mb</em>. The value is  
          specified in MB. To set a value of 2GB for reduce tasks, set
          <em>mapreduce.cluster.reducememory.mb</em> to 2048.
          </li>

          <li>
          <code>mapreduce.jobtracker.max{map|reduce}memory.mb</code>:
          These options define the maximum amount of virtual memory that 
          can be requested by jobs using the parameters
          <code>mapreduce.{map|reduce}.memory.mb</code>. The system
          will reject any job that is submitted requesting for more
          memory than these limits. Typically, the values for these
          options should be set to satisfy the following constraint:<br/>
          <em>mapreduce.jobtracker.maxmapmemory.mb =
            mapreduce.cluster.mapmemory.mb * 
             mapreduce.tasktracker.map.tasks.maximum<br/>
              mapreduce.jobtracker.maxreducememory.mb =
            mapreduce.cluster.reducememory.mb * 
             mapreduce.tasktracker.reduce.tasks.maximum</em><br/>
          The value is specified in MB. If 
          <code>mapreduce.cluster.reducememory.mb</code> is set to 2GB and
          there are 2 reduce slots configured in the slaves, the value
          for <code>mapreduce.jobtracker.maxreducememory.mb</code> should 
          be set to 4096.
          </li>
          
          <li>
          <code>mapreduce.tasktracker.reserved.physicalmemory.mb</code>:
          This option defines the amount of physical memory that is
          marked for system and daemon processes. Using this, the amount
          of physical memory available for MapReduce tasks is calculated
          using the following equation:<br/>
          <em>Total physical memory for all MapReduce tasks = 
                Total physical memory available on the system -
                mapreduce.tasktracker.reserved.physicalmemory.mb</em><br/>
          The value is specified in MB. To set this value to 2GB, 
          specify the value as 2048.
          </li>

          <li>
          <code>mapreduce.tasktracker.taskmemorymanager.monitoringinterval</code>:
          This option defines the time the TaskTracker waits between
          two cycles of memory monitoring. The value is specified in 
          milliseconds.
          </li>
          
          </ul>
          
          <p>
          <em>Note:</em> The virtual memory monitoring function is only 
          enabled if
          the variables <code>mapreduce.cluster.{map|reduce}memory.mb</code>
          and <code>mapreduce.jobtracker.max{map|reduce}memory.mb</code>
          are set to values greater than zero. Likewise, the physical
          memory monitoring function is only enabled if the variable
          <code>mapreduce.tasktracker.reserved.physicalmemory.mb</code>
          is set to a value greater than zero.
          </p>
        </section>
      </section>
      
        
          <section>
            <title>Task Controllers</title>
            <p>Task controllers are classes in the Hadoop Map/Reduce 
            framework that define how user's map and reduce tasks 
            are launched and controlled. They can 
            be used in clusters that require some customization in 
            the process of launching or controlling the user tasks.
            For example, in some 
            clusters, there may be a requirement to run tasks as 
            the user who submitted the job, instead of as the task 
            tracker user, which is how tasks are launched by default.
            This section describes how to configure and use 
            task controllers.</p>
            <p>The following task controllers are the available in
            Hadoop.
            </p>
            <table>
            <tr><th>Name</th><th>Class Name</th><th>Description</th></tr>
            <tr>
            <td>DefaultTaskController</td>
            <td>org.apache.hadoop.mapred.DefaultTaskController</td>
            <td> The default task controller which Hadoop uses to manage task
            execution. The tasks run as the task tracker user.</td>
            </tr>
            <tr>
            <td>LinuxTaskController</td>
            <td>org.apache.hadoop.mapred.LinuxTaskController</td>
            <td>This task controller, which is supported only on Linux, 
            runs the tasks as the user who submitted the job. It requires
            these user accounts to be created on the cluster nodes 
            where the tasks are launched. It 
            uses a setuid executable that is included in the Hadoop
            distribution. The task tracker uses this executable to 
            launch and kill tasks. The setuid executable switches to
            the user who has submitted the job and launches or kills
            the tasks. For maximum security, this task controller 
            sets up restricted permissions and user/group ownership of
            local files and directories used by the tasks such as the
            job jar files, intermediate files, task log files and distributed
            cache files. Particularly note that, because of this, except the
            job owner and tasktracker, no other user can access any of the
            local files/directories including those localized as part of the
            distributed cache.
            </td>
            </tr>
            </table>
            <section>
            <title>Configuring Task Controllers</title>
            <p>The task controller to be used can be configured by setting the
            value of the following key in mapred-site.xml</p>
            <table>
            <tr>
            <th>Property</th><th>Value</th><th>Notes</th>
            </tr>
            <tr>
            <td>mapreduce.tasktracker.taskcontroller</td>
            <td>Fully qualified class name of the task controller class</td>
            <td>Currently there are two implementations of task controller
            in the Hadoop system, DefaultTaskController and LinuxTaskController.
            Refer to the class names mentioned above to determine the value
            to set for the class of choice.
            </td>
            </tr>
            </table>
            </section>
            <section>
            <title>Using the LinuxTaskController</title>
            <p>This section of the document describes the steps required to
            use the LinuxTaskController.</p>
            
            <p>In order to use the LinuxTaskController, a setuid executable
            should be built and deployed on the compute nodes. The
            executable is named task-controller. To build the executable, 
            execute 
            <em>ant task-controller -Dhadoop.conf.dir=/path/to/conf/dir.
            </em>
            The path passed in <em>-Dhadoop.conf.dir</em> should be the path
            on the cluster nodes where a configuration file for the setuid
            executable would be located. The executable would be built to
            <em>build.dir/dist.dir/bin</em> and should be installed to 
            <em>$HADOOP_HOME/bin</em>.
            </p>
            
            <p>
            The executable must have specific permissions as follows. The
            executable should have <em>6050 or --Sr-s---</em> permissions
            user-owned by root(super-user) and group-owned by a special group 
            of which the TaskTracker's user is the group member and no job 
            submitter is. If any job submitter belongs to this special group,
            security will be compromised. This special group name should be
            specified for the configuration property 
            <em>"mapreduce.tasktracker.group"</em> in both mapred-site.xml and 
            <a href="#task-controller.cfg">task-controller.cfg</a>.  
            For example, let's say that the TaskTracker is run as user
            <em>mapred</em> who is part of the groups <em>users</em> and
            <em>specialGroup</em> any of them being the primary group.
            Let also be that <em>users</em> has both <em>mapred</em> and
            another user (job submitter) <em>X</em> as its members, and X does
            not belong to <em>specialGroup</em>. Going by the above
            description, the setuid/setgid executable should be set
            <em>6050 or --Sr-s---</em> with user-owner as <em>mapred</em> and
            group-owner as <em>specialGroup</em> which has
            <em>mapred</em> as its member(and not <em>users</em> which has
            <em>X</em> also as its member besides <em>mapred</em>).
            </p>

            <p>
            The LinuxTaskController requires that paths including and leading up
            to the directories specified in
            <em>mapreduce.cluster.local.dir</em> and <em>hadoop.log.dir</em> to
            be set 755 permissions.
            </p>
            
            <section>
            <title>task-controller.cfg</title>
            <p>The executable requires a configuration file called 
            <em>taskcontroller.cfg</em> to be
            present in the configuration directory passed to the ant target 
            mentioned above. If the binary was not built with a specific 
            conf directory, the path defaults to
            <em>/path-to-binary/../conf</em>. The configuration file must be
            owned by the user running TaskTracker (user <em>mapred</em> in the
            above example), group-owned by anyone and should have the
            permissions <em>0400 or r--------</em>.
            </p>
            
            <p>The executable requires following configuration items to be 
            present in the <em>taskcontroller.cfg</em> file. The items should
            be mentioned as simple <em>key=value</em> pairs.
            </p>
            <table><tr><th>Name</th><th>Description</th></tr>
            <tr>
            <td>mapreduce.cluster.local.dir</td>
            <td>Path to mapreduce.cluster.local.directories. Should be same as the value 
            which was provided to key in mapred-site.xml. This is required to
            validate paths passed to the setuid executable in order to prevent
            arbitrary paths being passed to it.</td>
            </tr>
            <tr>
            <td>hadoop.log.dir</td>
            <td>Path to hadoop log directory. Should be same as the value which
            the TaskTracker is started with. This is required to set proper
            permissions on the log files so that they can be written to by the user's
            tasks and read by the TaskTracker for serving on the web UI.</td>
            </tr>
            <tr>
            <td>mapreduce.tasktracker.group</td>
            <td>Group to which the TaskTracker belongs. The group owner of the
            taskcontroller binary should be this group. Should be same as
            the value with which the TaskTracker is configured. This 
            configuration is required for validating the secure access of the
            task-controller binary.</td>
            </tr>
            </table>
            </section>
            </section>
            
          </section>
          <section>
            <title>Monitoring Health of TaskTracker Nodes</title>
            <p>Hadoop Map/Reduce provides a mechanism by which administrators 
            can configure the TaskTracker to run an administrator supplied
            script periodically to determine if a node is healthy or not.
            Administrators can determine if the node is in a healthy state
            by performing any checks of their choice in the script. If the
            script detects the node to be in an unhealthy state, it must print
            a line to standard output beginning with the string <em>ERROR</em>.
            The TaskTracker spawns the script periodically and checks its 
            output. If the script's output contains the string <em>ERROR</em>,
            as described above, the node's status is reported as 'unhealthy'
            and the node is black-listed on the JobTracker. No further tasks 
            will be assigned to this node. However, the
            TaskTracker continues to run the script, so that if the node
            becomes healthy again, it will be removed from the blacklisted
            nodes on the JobTracker automatically. The node's health
            along with the output of the script, if it is unhealthy, is
            available to the administrator in the JobTracker's web interface.
            The time since the node was healthy is also displayed on the 
            web interface.
            </p>
            
            <section>
            <title>Configuring the Node Health Check Script</title>
            <p>The following parameters can be used to control the node health 
            monitoring script in <em>mapred-site.xml</em>.</p>
            <table>
            <tr><th>Name</th><th>Description</th></tr>
            <tr><td><code>mapreduce.tasktracker.healthchecker.script.path</code></td>
            <td>Absolute path to the script which is periodically run by the 
            TaskTracker to determine if the node is 
            healthy or not. The file should be executable by the TaskTracker.
            If the value of this key is empty or the file does 
            not exist or is not executable, node health monitoring
            is not started.</td>
            </tr>
            <tr>
            <td><code>mapreduce.tasktracker.healthchecker.interval</code></td>
            <td>Frequency at which the node health script is run, 
            in milliseconds</td>
            </tr>
            <tr>
            <td><code>mapreduce.tasktracker.healthchecker.script.timeout</code></td>
            <td>Time after which the node health script will be killed by
            the TaskTracker if unresponsive.
            The node is marked unhealthy. if node health script times out.</td>
            </tr>
            <tr>
            <td><code>mapreduce.tasktracker.healthchecker.script.args</code></td>
            <td>Extra arguments that can be passed to the node health script 
            when launched.
            These should be comma separated list of arguments. </td>
            </tr>
            </table>
            </section>
          </section>
          
        </section>
        
        <section>
          <title>Slaves</title>
          
          <p>Typically you choose one machine in the cluster to act as the 
          <code>NameNode</code> and one machine as to act as the 
          <code>JobTracker</code>, exclusively. The rest of the machines act as 
          both a <code>DataNode</code> and <code>TaskTracker</code> and are 
          referred to as <em>slaves</em>.</p>
          
          <p>List all slave hostnames or IP addresses in your 
          <code>conf/slaves</code> file, one per line.</p>
        </section>
        
        <section>
          <title>Logging</title>
          
          <p>Hadoop uses the <a href="http://logging.apache.org/log4j/">Apache 
          log4j</a> via the <a href="http://commons.apache.org/logging/">Apache 
          Commons Logging</a> framework for logging. Edit the 
          <code>conf/log4j.properties</code> file to customize the Hadoop 
          daemons' logging configuration (log-formats and so on).</p>
          
          <section>
            <title>History Logging</title>
            
            <p> The job history files are stored in central location 
            <code> mapreduce.jobtracker.jobhistory.location </code> which can be on DFS also,
            whose default value is <code>${HADOOP_LOG_DIR}/history</code>. 
            The history web UI is accessible from job tracker web UI.</p>
            
            <p> The history files are also logged to user specified directory
            <code>mapreduce.job.userhistorylocation</code> 
            which defaults to job output directory. The files are stored in
            "_logs/history/" in the specified directory. Hence, by default 
            they will be in "mapreduce.output.fileoutputformat.outputdir/_logs/history/". User can stop
            logging by giving the value <code>none</code> for 
            <code>mapreduce.job.userhistorylocation</code> </p>
            
            <p> User can view the history logs summary in specified directory 
            using the following command <br/>
            <code>$ bin/hadoop job -history output-dir</code><br/> 
            This command will print job details, failed and killed tip
            details. <br/>
            More details about the job such as successful tasks and 
            task attempts made for each task can be viewed using the  
            following command <br/>
            <code>$ bin/hadoop job -history all output-dir</code><br/></p> 
          </section>
        </section>
      
      <p>Once all the necessary configuration is complete, distribute the files
      to the <code>HADOOP_CONF_DIR</code> directory on all the machines, 
      typically <code>${HADOOP_HOME}/conf</code>.</p>
    </section>
    <section>
      <title>Cluster Restartability</title>
      <section>
        <title>Map/Reduce</title>
        <p>The job tracker restart can recover running jobs if 
        <code>mapreduce.jobtracker.restart.recover</code> is set true and 
        <a href="#Logging">JobHistory logging</a> is enabled. Also 
        <code>mapreduce.jobtracker.jobhistory.block.size</code> value should be 
        set to an optimal value to dump job history to disk as soon as 
        possible, the typical value is 3145728(3MB).</p>
      </section>
    </section>
    
    <section>
      <title>Hadoop Rack Awareness</title>
      <p>The HDFS and the Map/Reduce components are rack-aware.</p>
      <p>The <code>NameNode</code> and the <code>JobTracker</code> obtains the
      <code>rack id</code> of the slaves in the cluster by invoking an API 
      <a href="ext:api/org/apache/hadoop/net/dnstoswitchmapping/resolve
      ">resolve</a> in an administrator configured
      module. The API resolves the slave's DNS name (also IP address) to a 
      rack id. What module to use can be configured using the configuration
      item <code>topology.node.switch.mapping.impl</code>. The default 
      implementation of the same runs a script/command configured using 
      <code>topology.script.file.name</code>. If topology.script.file.name is
      not set, the rack id <code>/default-rack</code> is returned for any 
      passed IP address. The additional configuration in the Map/Reduce
      part is <code>mapred.cache.task.levels</code> which determines the number
      of levels (in the network topology) of caches. So, for example, if it is
      the default value of 2, two levels of caches will be constructed - 
      one for hosts (host -> task mapping) and another for racks 
      (rack -> task mapping).
      </p>
    </section>
    
    <section>
      <title>Hadoop Startup</title>
      
      <p>To start a Hadoop cluster you will need to start both the HDFS and 
      Map/Reduce cluster.</p>

      <p>
        Format a new distributed filesystem:<br/>
        <code>$ bin/hadoop namenode -format</code>
      </p>
      
      <p>
        Start the HDFS with the following command, run on the designated
        <code>NameNode</code>:<br/>
        <code>$ bin/start-dfs.sh</code>
      </p>
      <p>The <code>bin/start-dfs.sh</code> script also consults the 
      <code>${HADOOP_CONF_DIR}/slaves</code> file on the <code>NameNode</code> 
      and starts the <code>DataNode</code> daemon on all the listed slaves.</p>
      
      <p>
        Start Map-Reduce with the following command, run on the designated
        <code>JobTracker</code>:<br/>
        <code>$ bin/start-mapred.sh</code>
      </p>
      <p>The <code>bin/start-mapred.sh</code> script also consults the 
      <code>${HADOOP_CONF_DIR}/slaves</code> file on the <code>JobTracker</code> 
      and starts the <code>TaskTracker</code> daemon on all the listed slaves.
      </p>
    </section>

    <section>
      <title>Hadoop Shutdown</title>
      
      <p>
        Stop HDFS with the following command, run on the designated 
        <code>NameNode</code>:<br/>
        <code>$ bin/stop-dfs.sh</code>
      </p>
      <p>The <code>bin/stop-dfs.sh</code> script also consults the 
      <code>${HADOOP_CONF_DIR}/slaves</code> file on the <code>NameNode</code> 
      and stops the <code>DataNode</code> daemon on all the listed slaves.</p>
      
      <p>
        Stop Map/Reduce with the following command, run on the designated
        the designated <code>JobTracker</code>:<br/>
        <code>$ bin/stop-mapred.sh</code><br/>
      </p>
      <p>The <code>bin/stop-mapred.sh</code> script also consults the 
      <code>${HADOOP_CONF_DIR}/slaves</code> file on the <code>JobTracker</code> 
      and stops the <code>TaskTracker</code> daemon on all the listed slaves.</p>
    </section>
  </body>
  
</document>
