
# 编译并运行MapReduce应用
在程序代码完成开发后，可以在Linux环境中运行应用。
![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
MapReduce应用程序只支持在Linux环境下运行，不支持在Windows环境下运行。
#### 操作步骤
1. 生成MapReduce应用可执行包。 
   执行mvn package生成jar包，在工程目录target目录下获取，比如"mapreduce-examples-1.0.jar"。
   
   
2. 上传生成的应用包"mapreduce-examples-1.0.jar"到Linux客户端上。例如"/opt"目录。
3. 如果集群开启Kerberos，参考[5.2.2-准备开发用户](https://support.huaweicloud.com/devg-mrs/mrs_06_0088.html)获得的"user.keytab"、"krb5.conf"文件需要在Linux环境上创建文件夹保存这些配置文件，例如"/opt/conf"。并在linux环境上，在客户端路径下（/opt/client/HDFS/hadoop/etc/hadoop/）获得core-site.xml、hdfs-site.xml文件放入上述文件夹里。
4. 样例程序如果指定OBS为输入输出的目标文件系统（如obs://\<BucketName\>/input/），需要进行以下配置。 
   在$YARN_CONF_DIR/core-site.xml中添加AK配置项"fs.obs.access.key"和SK配置项"fs.obs.secret.key"，AK/SK可登录"OBS控制台"，进入"我的凭证"页面获取。
   ```
   <property>
   <name>fs.obs.access.key</name>
   <value>xxxxxxxxxxxxxxxx</value>
   </property>
   <property>
   <name>fs.obs.secret.key</name>
   <value>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</value>
   </property>
   ```
   
   
5. 在Linux环境下运行样例工程。 
   - 对于MapReduce统计样例程序，执行如下命令。
     1. 如果集群开启kerberos，在Linux环境中添加样例工程运行所需的classpath，例如 export YARN_USER_CLASSPATH=/opt/conf/
        
     
     2. 执行如下命令:
        ```
        cd /opt
        yarn jar mapreduce-examples-1.0.jar com.huawei.bigdata.mapreduce.examples.FemaleInfoCollector <inputPath> <outputPath>
        ```
        
      
   
   
   此命令包含了设置参数和提交job的操作，其中*\<inputPath\>* 指HDFS文件系统中input的路径，*\<outputPath\>*指HDFS文件系统中output的路径。
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 在执行**yarn jar mapreduce-examples-1.0.jar com.huawei.bigdata.mapreduce.examples.FemaleInfoCollector** *\<inputPath\> \<outputPath\>*命令之前，需要把log1.txt和log2.txt这两个文件上传到HDFS的\<inputPath\>目录下。
   
   - 在执行**yarn jar mapreduce-examples-1.0.jar com.huawei.bigdata.mapreduce.examples.FemaleInfoCollector** *\<inputPath\> \<outputPath\>*命令之前，\<outputPath\>目录必须不存在，否则会报错。
   
   - **mapreduce-examples-1.0.jar**适用于MRS 1.x版本。
   
   - 在MapReduce任务运行过程中禁止重启HDFS服务，否则可能会导致任务失败。
   
   - 运行样例工程前需要根据实际环境修改认证信息。
   
   - 针对开启Kerberos认证的安全集群，代码中的"principal"请根据实际环境修改。例如test@FAA12CC3_0996_432F_9D6F_E18F6F9D7F43.COM。
    
   - 对于MapReduce访问多组件样例程序，操作步骤如下。
     1. 获取"hbase-site.xml"、"hiveclient.properties"、"hive-site.xml"和"mapred-site.xml"文件，如果是安全模式集群，还需要同时获取"user.keytab"、"krb5.conf"，并在Linux环境上创建文件夹保存这些配置文件，例如"/opt/conf"。
        ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
        请联系管理员获取相应账号对应权限的"user.keytab"和"krb5.conf"文件，"hbase-site.xml"从HBase客户端获取，例如：/opt/client/HBase/hbase/conf，"hiveclient.properties"和"hive-site.xml"从Hive客户端获取，例如：/opt/client/Hive/config，"mapred-site.xml"文件从Yarn客户端获取，例如：/opt/client/Yarn/config。
        
     
     2. 对于安全模式集群，在新建的文件夹中创建文件"jaas_mr.conf"，文件内容如下。
        ```
        Client {
        com.sun.security.auth.module.Krb5LoginModule required
        useKeyTab=true
        keyTab="user.keytab"
        principal="test@FAA12CC3_0996_432F_9D6F_E18F6F9D7F43.COM"
        useTicketCache=false
        storeKey=true
        debug=true;
        };
        ```
        ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
        - 文件内容中的test@HADOOP.COM为示例，实际操作时请做相应修改。
        
        - "jaas_mr.conf"文件和代码中的"principal"请根据实际环境修改。例如test@FAA12CC3_0996_432F_9D6F_E18F6F9D7F43.COM。
        
        - 未开启Kerberos认证集群略过此步骤。
          
     
     3. 在Linux环境中添加样例工程运行所需的classpath，例如（以客户端安装路径为/opt/conf为例） **export YARN_USER_CLASSPATH=/opt/conf/:/opt/client/HBase/hbase/lib/\*:/opt/client/Hive/Beeline/lib/\***
        ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
        - 针对MRS 1.9.x版本集群，需要在执行上述命令前或者执行上述命令后执行**mv /opt/client/Hive/Beeline/lib/derby-10.10.2.0.jar derby-10.10.2.0.jar.bak**命令。
        
        - 命令中使用的jar包请根据集群中对应路径下的实际版本修改。
          
     
     4. 提交MapReduce任务，执行如下命令，运行样例工程。运行样例工程前需要根据实际环境修改认证信息。 **yarn jar mapreduce-examples-1.0.jar com.huawei.bigdata.mapreduce.examples.MultiComponentExample**
        
      
   
   
   
   
 
