更新时间:2025-08-09 GMT+08:00

运行HadoopStream作业

Hadoop Streaming是Apache Hadoop提供的一种编程接口,允许用户使用任何可执行程序(如Python、Shell脚本)作为Map和Reduce函数,而非传统的Java语言。通过标准输入输出(STDIN/STDOUT)进行数据交换,Hadoop Streaming使开发者能够快速利用已有脚本语言编写分布式计算作业,尤其适合快速原型开发和跨语言集成。

用户可将自己开发的程序提交到MRS中,执行程序并获取结果,本章节指导您如何在MRS集群中提交一个HadoopStream作业。

用户可以在MRS管理控制台在线创建一个作业并提交运行,也可以通过MRS集群客户端来以命令行形式提交作业。

前提条件

  • 用户已经将作业所需的程序包和数据文件上传至OBS或HDFS文件系统中。
  • 如果作业程序需要读取以及分析OBS文件系统中的数据,需要先配置MRS集群的存算分离,请参考配置MRS集群存算分离

约束与限制

  • 当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管理控制台添加作业。
  1. 准备应用程序及数据。

    在本章节中,以提交一个文本统计应用为例进行介绍,该样例程序可以从MRS集群客户端中获取(“客户端安装目录/HDFS/hadoop/share/hadoop/tools/lib/hadoop-streaming-XXX.jar”)。

    该应用运行时,需要的输入参数如下:

    • input:指定输入文件或者输入目录,可配置HDFS或者OBS文件系统中路径。

      例如上传一个数据文件“data1.txt”,文件内容如下:

      Hello Hadoop
      Hello Streaming
      Hadoop is awesome
    • output:应用进行统计分析后,结果输出地址,需设置为一个不存在的目录,应用执行后会自动生成该目录。
    • mapper:指定Map任务的可执行程序,既可以是系统命令,也可以是脚本路径。
    • reducer:指定Reduce任务的可执行程序,既可以是系统命令,也可以是脚本路径。

  2. 登录MRS管理控制台
  3. 选择“现有集群”,选中一个运行中的集群并单击集群名称,进入集群概览信息页面。
  4. “概览”页签中,单击“IAM用户同步”右侧的“同步”进行IAM用户同步。

    集群开启Kerberos认证时需执行该步骤,若集群未开启Kerberos认证,无需执行本步骤。

    IAM用户同步完成后,请等待5分钟,再进行提交作业,更多IAM用户同步说明请参考IAM用户同步MRS集群说明

  5. 单击“作业管理”,在作业列表界面单击“添加”。
  6. “作业类型”选择“HadoopStreaming”,参考表1配置作业信息。

    表1 作业配置信息

    参数

    描述

    示例

    作业名称

    作业名称,只能由字母、数字、中划线和下划线组成,并且长度为1~64个字符。

    hadoop_job

    运行程序参数

    可选参数,为本次执行的作业配置相关优化参数(例如线程、内存、CPU核数等),用于优化资源使用效率,提升作业的执行性能。

    常用运行程序参数如表2

    -

    执行程序参数

    可选参数,程序执行的关键参数,该参数由用户程序内的函数指定,MRS只负责参数的传入。

    多个参数间使用空格隔开,最多为150000字符,不能包含;|&><'$特殊字符,可为空。

    注意:

    用户输入带有敏感信息(如登录密码)的参数时,可通过在参数名前添加“@”的方式为该参数值加密,以防止敏感信息被明文形式持久化。

    在MRS管理控制台查看作业信息时,敏感信息会显示为“*”。

    例如:username=testuser @password=用户密码

    -input obs://mrs-demotest/input/data1.txt -output obs://mrs-demotest/output/demo2 -mapper "cat" -reducer "wc -l"

    服务配置参数

    可选参数,用于为本次执行的作业修改服务配置参数。

    该参数的修改仅适用于本次执行的作业,如需对集群永久生效,请参考修改MRS集群组件配置参数进行集群组件配置参数的修改。

    例如在MRS集群未配置存算分离的场景下,作业需要通过AK/SK方式访问OBS,可增加以下服务配置参数:

    • fs.obs.access.key:访问OBS的密钥ID。
    • fs.obs.secret.key:访问OBS与密钥ID对应的密钥。

    -

    命令参考

    用于展示提交作业时提交到后台执行的命令。

    N/A

    表2 运行程序参数

    参数

    参数说明

    取值样例

    -ytm

    设置每个TaskManager容器的内存(单位可选,默认单位:MB)。

    1024

    -yjm

    设置JobManager容器内存(单位可选,默认单位:MB)。

    1024

    -yn

    设置分配给应用程序的Yarn容器的数量,该值与TaskManager数量相同。

    MRS 3.x及之后版本,运行程序参数不支持“-yn”。

    2

    -ys

    设置TaskManager的核数。

    2

    -ynm

    自定义Yarn上应用程序名称。

    test

    -c

    设置程序入口点的类(如“main”或“getPlan()”方法)。该参数仅在JAR文件未指定其清单的类时需要。

    com.bigdata.mrs.test

  7. 确认作业配置信息,单击“确定”,完成作业的新增。
  8. 作业提交成功中,可在作业列表中查看作业运行状态及执行结果,等待作业状态变为“已完成”,可查看相关程序分析结果。

    本示例程序中,在指定的OBS输出目录下,可查看到对应的数据统计结果。

    图1 查看作业执行结果

    作业执行过程中,可选择“查看日志”或者“更多 > 查看详情”,查看程序的详细执行情况,如果作业执行异常或者失败,可根据报错信息进一步定位原因。

    作业添加成功后,不支持进行编辑修改,如果需要再次执行作业,可选择“克隆”快速复制一个已创建的作业并进行参数调整。

  1. 准备应用程序及数据。

    在本章节中,以提交一个文本统计应用为例进行介绍,该样例程序可以从MRS集群客户端中获取(“客户端安装目录/HDFS/hadoop/share/hadoop/tools/lib/hadoop-streaming-XXX.jar”)。

    该应用运行时,需要的输入参数如下:

    • input:指定输入文件或者输入目录,可配置HDFS或者OBS文件系统中路径。

      例如上传一个数据文件“data1.txt”,文件内容如下:

      Hello Hadoop
      Hello Streaming
      Hadoop is awesome
    • output:应用进行统计分析后,结果输出地址,需设置为一个不存在的目录,应用执行后会自动生成该目录。
    • mapper:指定Map任务的可执行程序,既可以是系统命令,也可以是脚本路径。
    • reducer:指定Reduce任务的可执行程序,既可以是系统命令,也可以是脚本路径。

  2. 如果当前集群已开启Kerberos认证,需提前在Manager界面中创建一个具有对应作业提交权限的业务用户,请参考创建MRS集群用户

    本示例中,创建一个人机用户testuser,关联用户组“supergroup”及角色“System_administrator”。

  3. 安装MRS集群客户端。

    具体操作可参考安装MRS集群客户端

    MRS集群中默认安装了一个客户端用于作业提交,也可直接使用该客户端。MRS 3.x及之后版本客户端默认安装路径为Master节点上的“/opt/Bigdata/client”,MRS 3.x之前版本为Master节点上的“/opt/client”。

  4. 使用MRS集群客户端安装用户登录客户端所在的节点。

    具体操作可参考登录MRS集群节点

  5. 执行以下命令进入客户端安装目录。

    cd /opt/Bigdata/client

    加载环境变量:

    source bigdata_env

    如果当前集群已开启Kerberos认证,执行以下命令进行用户认证,如果当前集群未开启Kerberos认证,则无需执行kinit操作。

    kinit testuser

  6. 执行以下命令提交HadoopStream作业。

    hadoop jar HDFS/hadoop/share/hadoop/tools/lib/hadoop-streaming-*.jar -input /tmp/input -output /tmp/output -mapper "cat" -reducer "wc -l"

    本示例中,使用“wc -l”命令统计行数,任务执行完成后,可执行以下命令查看指定的HDFS目录下生成的结果数据。

    hdfs dfs -cat /tmp/output/part-00000

  7. 使用testuser用户登录集群Manager页面,选择“集群 > 服务 > Yarn”,单击“ResourceManager Web UI”右侧的超链接进入Yarn WebUI页面,单击对应作业的Application ID,即可查看作业运行信息及相关日志。

    图2 查看Hadoop作业详情

相关文档