<!--
  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>mapred.mapper.class</name>
        <value>org.apache.hadoop.streaming.PipeMapper</value>
    </property>
    <property>
        <name>mapred.reducer.class</name>
        <value>org.apache.hadoop.streaming.PipeReducer</value>
    </property>
    <property>
        <name>mapred.map.runner.class</name>
        <value>org.apache.hadoop.streaming.PipeMapRunner</value>
    </property>

    <property>
        <name>mapred.input.format.class</name>
        <value>org.apache.hadoop.mapred.TextInputFormat</value>
    </property>
    <property>
        <name>mapred.output.format.class</name>
        <value>org.apache.hadoop.mapred.TextOutputFormat</value>
    </property>
    <property>
        <name>mapred.output.value.class</name>
        <value>org.apache.hadoop.io.Text</value>
    </property>
    <property>
        <name>mapred.output.key.class</name>
        <value>org.apache.hadoop.io.Text</value>
    </property>

    <property>
        <name>mapred.create.symlink</name>
        <value>yes</value>
    </property>
    <property>
        <name>mapred.used.genericoptionsparser</name>
        <value>true</value>
    </property>

    <property>
        <name>stream.addenvironment</name>
        <value/>
    </property>

</configuration>
