
# 运行MapReduce作业
MapReduce是大数据处理领域的经典计算模型，它将复杂的数据处理任务拆解为 "映射（Map）" 和 "规约（Reduce）" 两个阶段。在Map阶段，大量数据被分割成小块并行处理，每个节点独立执行用户自定义的映射函数，输出中间键值对；随后Reduce阶段汇总相同键的数据，通过规约函数完成聚合计算，最终输出结果。这种分布式计算框架不仅能高效处理 PB 级数据，还通过容错机制和自动任务调度，解决了传统单机处理的性能瓶颈，广泛应用于搜索引擎索引构建、日志分析、数据统计等场景 。
用户将自己开发的程序提交到MRS中，执行程序并获取结果，本章节指导您如何在MRS集群中提交一个MapReduce作业。
用户可以在MRS管理控制台在线创建一个作业并提交运行，也可以通过MRS集群客户端来以命令行形式提交作业。
#### 前提条件
- 用户已经将作业所需的程序包和数据文件上传至OBS或HDFS文件系统中。
- 如果作业程序需要读取以及分析OBS文件系统中的数据，需要先配置MRS集群的存算分离，请参考[配置MRS集群存算分离](https://support.huaweicloud.com/usermanual-mrs/mrs_01_248987.html)。
 
#### 约束与限制
- 当IAM用户的用户组的所属策略从MRS ReadOnlyAccess向MRS CommonOperations、MRS FullAccess、MRS Administrator变化时，或者反之从MRS CommonOperations、MRS FullAccess、MRS Administrator向MRS ReadOnlyAccess变化时，由于集群节点的SSSD（System Security Services Daemon）缓存刷新需要时间，因此用户同步完成后，请等待5分钟，待新策略生效之后，再到MRS管理控制台在线提交作业，否则会出现提交作业失败的情况。
- 当前IAM用户名中存在空格时（例如admin 01），不支持通过MRS管理控制台添加作业。
 
#### 操作视频
本视频以在MRS集群的管理控制台上提交并查看MapReduce作业为例进行说明。
因不同版本操作界面可能存在差异，相关视频供参考，具体以实际环境为准。
<video controls="controls" preload="none" id="object1456434312168" class="idp-external-video" src="https://res-video.hc-cdn.com/cloudbu-site/china/zh-cn/support/mrs-video/1677743593092565051.mp4" title="提交MapReduce作业" poster="https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002350391405.jpg" height="300.0000" width="600.0000"></video>
#### 提交作业
用户可通过管理控制台在线创建并运行作业，也可以通过集群客户端命令方式手动提交。
- [通过管理控制台提交作业]
  1. 准备应用程序及数据。 
     在本章节中，以提交一个Hadoop单词统计应用为例进行介绍，该样例程序可以从MRS集群客户端中获取（"客户端安装目录/HDFS/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*XXX* .jar"），然后上传至HDFS或者OBS的指定目录中，请参考[上传应用数据至MRS集群](https://support.huaweicloud.com/usermanual-mrs/zh-cn_topic_0019489057.html)。
     该应用运行时，需要的输入参数如下：
     - 程序类名：由用户程序内的函数指定，本应用中为wordcount。
     
     - 输入文件的路径：待分析的数据文件，需提前上传至HDFS或者OBS文件系统中。 例如上传一个数据文件"data1.txt"，文件内容如下：
       ```
       This is a test job.
       MRS supports multiple job submission modes.
       ```
       
     
     - 输出文件的路径：应用进行单词统计后，结果输出地址，需**设置为一个不存在的目录**，应用执行后会自动生成该目录。
     
     
     
     
  
  2. 登录[MRS管理控制台](https://console.huaweicloud.com/mrs/)。
  
  3. 选择"现有集群"，选中一个待操作的运行中的集群并单击集群名称，进入集群概览信息页面。
  
  4. 在"概览"页签中，单击"IAM用户同步"右侧的"同步"进行IAM用户同步。 
     集群开启Kerberos认证时需执行该步骤，若集群未开启Kerberos认证，无需执行本步骤。
     **IAM用户同步完成后，请等待5分钟，再进行提交作业，更多IAM用户同步说明请参考[IAM用户同步MRS集群说明](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0495.html)。**
     
     
  
  5. 单击"作业管理"，在作业列表界面单击"添加"。
  
  6. "作业类型"选择"MapReduce"，并配置其他作业信息。 
     图1添加MapReduce作业   
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002307367032.png "点击放大")
     表1作业配置信息 
     | **参数** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | **示例**                                                                       |
     |:---|:---|:---|
     | 作业名称   | 作业名称，只能由字母、数字、中划线和下划线组成，并且长度为1～128个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | mapreduce_job                                                                |
     | 执行程序路径 | 待执行程序包地址，可直接手动输入地址路径，也可单击"HDFS"或者"OBS"后选择文件。 - 最多为1023字符，不能包含;\|\&\>,\<'$特殊字符，且不可为空或全空格。  - OBS程序路径地址以"obs://"开头，HDFS程序路径地址以"hdfs://hacluster"开头，例如"hdfs://hacluster/user/*XXX*.jar"。  - MapReduce作业执行程序必须以".jar"结尾。                                                                                                                                                                                                                                                                               | obs://mrs-demotest/program/hadoop-mapreduce-examples-*XXX*.jar               |
     | 执行程序参数 | 可选参数，程序执行的关键参数，多个参数间使用空格隔开。 本章节示例程序的配置格式：***程序类名 数据输入路径 数据输出路径*** - 程序类名：由用户程序内的函数指定，MRS只负责参数的传入。  - 数据输入路径：通过单击"HDFS"或者"OBS"选择或者直接手动输入正确路径。  - 数据输出路径：数据处理结果输出路径，需输入一个不存在的目录。最多为150000字符，不能包含;\|\&\>\<'$特殊字符，可为空。 注意： 用户输入带有敏感信息（如登录密码）的参数时，可通过在参数名前添加"@"的方式为该参数值加密，以防止敏感信息被明文形式持久化。 在MRS管理控制台查看作业信息时，敏感信息会显示为"\*"。 例如：username=*testuser* @password=*用户密码*    | wordcount obs://mrs-demotest/input/data1.txt obs://mrs-demotest/output/demo1 |
     | 服务配置参数 | 可选参数，用于为本次执行的作业修改服务配置参数。 该参数的修改仅适用于本次执行的作业，如需对集群永久生效，请参考[修改MRS集群组件配置参数](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0204.html)进行集群组件配置参数的修改。 例如在MRS集群未配置存算分离的场景下，作业需要通过AK/SK方式访问OBS，可增加以下服务配置参数： - fs.obs.access.key：访问OBS的密钥ID。  - fs.obs.secret.key：访问OBS与密钥ID对应的密钥。                                                                                                                                                                                                                       | -                                                                            |
     | 命令参考   | 用于展示提交作业时提交到后台执行的命令。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | N/A                                                                          |
        
     
     
  
  7. 确认作业配置信息，单击"确定"，完成作业的新增。
  
  8. 作业提交成功中，可在作业列表中查看作业运行状态及执行结果，等待作业状态变为"已完成"，可查看相关程序分析结果。 
     本示例程序中，在指定的OBS输出目录下，可查看到对应的数据统计结果。
     图2查看作业执行结果   
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002341407993.png "点击放大")
     作业执行过程中，可选择"查看日志"或者"更多 \> 查看详情"，查看程序的详细执行情况，如果作业执行异常或者失败，可根据报错信息进一步定位原因。
     作业添加成功后，不支持进行编辑修改，如果需要再次执行作业，可选择"克隆"快速复制一个已创建的作业并进行参数调整。
     
     
   
- [通过集群客户端提交作业]
  1. 准备应用程序及数据。 
     在本章节中，以提交一个Hadoop单词统计应用为例进行介绍，该样例程序可以从MRS集群客户端中获取（"客户端安装目录/HDFS/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*XXX* .jar"），然后上传至HDFS或者OBS的指定目录中，请参考[上传应用数据至MRS集群](https://support.huaweicloud.com/usermanual-mrs/zh-cn_topic_0019489057.html)。
     该应用运行时，需要的输入参数如下：
     - 程序类名：由用户程序内的函数指定，本应用中为wordcount。
     
     - 输入文件的路径：待分析的数据文件，需提前上传至HDFS或者OBS文件系统中。 例如上传一个数据文件"data1.txt"，文件内容如下：
       ```
       This is a test job.
       MRS supports multiple job submission modes.
       ```
       
     
     - 输出文件的路径：应用进行单词统计后，结果输出地址，需**设置为一个不存在的目录**，应用执行后会自动生成该目录。
     
     
     
     
  
  2. 如果当前集群已开启Kerberos认证，需提前在Manager界面中创建一个具有对应作业提交权限的业务用户，请参考[创建MRS集群用户](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0345.html)。
     
     本示例中，创建一个人机用户testuser，关联用户组"supergroup"及角色"System_administrator"。
     
     
  
  3. 安装MRS集群客户端。 
     具体操作可参考[安装MRS集群客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_24212.html)。
     MRS集群中默认安装了一个客户端用于作业提交，也可直接使用该客户端。MRS 3.x及之后版本客户端默认安装路径为Master节点上的"/opt/Bigdata/client"，MRS 3.x之前版本为Master节点上的"/opt/client"。
     
     
  
  4. 使用MRS集群客户端安装用户登录客户端所在的节点。 
     具体操作可参考[登录MRS集群节点](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0083.html)。
     
     
  
  5. 执行以下命令进入客户端安装目录。 
     ```
     cd /opt/Bigdata/client
     ```
     加载环境变量：
     ```
     source bigdata_env
     ```
     如果当前集群已开启Kerberos认证，执行以下命令进行用户认证，如果当前集群未开启Kerberos认证，则无需执行kinit操作。
     ```
     kinit testuser
     ```
     
     
  
  6. 执行命令提交wordcount作业。 
     通常可以使用**yarn** 命令或者**hadoop jar**命令提交MapReduce作业。
     **yarn**命令是一个通用的资源管理和作业调度命令，它更侧重于对YARN集群资源的管理和作业生命周期的控制，可以用于提交MapReduce、Spark等作业，并且能够对作业进行查询、监控等操作。
     **hadoop jar**命令主要用于提交基于Java的MapReduce作业，它会自动处理MapReduce作业的启动和执行，将JAR文件中的主类作为作业的入口点，并将输入输出路径等参数传递给作业。
     使用**hadoop jar**命令提交样例程序作业，命令格式如下：
     ```
     hadoop jar 应用程序 wordcount 输入文件的路径 输出文件的路径
     ```
     例如使用样例程序统计HDFS中"/tmp/data/data1.txt"文件中的单词数并输出到HDFS的"/tmp/output/demo"目录中：
     ```
     hadoop jar HDFS/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /tmp/data/data1.txt /tmp/output/demo
     ```
     在MRS集群未配置存算分离的场景下，作业如果需要通过AK/SK方式访问OBS，可参考以下命令：
     ```
     hadoop jar HDFS/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount -Dfs.obs.access.key=访问OBS的密钥ID信息 -Dfs.obs.secret.key=访问OBS与密钥ID对应的密钥信息 "obs://mrs-demotest/input/data1.txt" "obs://mrs-demotest/output/demo"
     ```
     - 命令中如果携带认证密码信息可能存在安全风险，在执行命令前建议关闭系统的**history**命令记录功能，避免信息泄露。
     
     - AK/SK可登录OBS服务管理控制台，在页面右上角的用户名下拉框中选择"我的凭证 \> 访问密钥"获取。
     
     
     
     
  
  7. 作业提交并运行成功后，在指定的HDFS输出目录下，可查看到对应的数据统计结果。 
     ```
     hdfs dfs -ls /tmp/output
     ```
     图3查看作业执行结果   
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002341493741.png "点击放大")
     
     
  
  8. 使用testuser用户登录集群Manager页面，选择"集群 \> 服务 \> Yarn"，单击"ResourceManager Web UI"右侧的超链接进入Yarn WebUI页面，单击对应作业的Application ID，即可查看作业运行信息及相关日志。 
     图4查看MapReduce作业详情   
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002307521952.png "点击放大")
     
     
   
#### 相关文档
- 通过管理控制台提交作业后，每一条作业都支持查看日志，具体操作请参见[查看MRS作业详情和日志](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0055.html)。
- 作业添加成功后，不支持进行编辑修改，如果需要再次执行作业，可选择"克隆"快速复制一个已创建的作业并进行参数调整，具体操作请参考[克隆MRS集群作业](https://support.huaweicloud.com/usermanual-mrs/mrs_01_249004.html)。
- 开启Kerberos认证的集群在提交作业时，未进行IAM用户同步报错处理方法请参见[提交作业时系统提示当前用户在Manager不存在如何处理？](https://support.huaweicloud.com/mrs_faq/mrs_03_1173.html)。
- 作业提交后，查看指定Yarn任务日志的具体操作请参见[如何查看指定Yarn任务的日志？](https://support.huaweicloud.com/mrs_faq/mrs_03_1266.html)。
- 如需通过API方式新增并执行作业，具体操作请参见[新增并执行作业](https://support.huaweicloud.com/api-mrs/CreateExecuteJob.html)。
- 更多MRS应用开发样例程序，请参见[MRS应用开发指南](https://support.huaweicloud.com/devg-lts-mrs/mrs_07_010000.html)。
 
