更新时间:2024-07-24 GMT+08:00

使用Oozie客户端提交DistCp任务

操作场景

该任务指导用户在使用Oozie客户端提交DistCp任务。

请下载使用最新版本的客户端。

前提条件

  • HDFS和Oozie组件安装完成且运行正常,客户端安装成功。

    如果当前客户端为旧版本,需要重新下载和安装客户端。

  • 已创建或获取访问Oozie服务的人机用户账号及密码。
    • 该用户需要从属于hadoop、supergroup、hive组,同时添加Oozie的角色操作权限。如果使用Hive多实例,该用户还需要从属于具体的Hive实例组,如hive3。
    • 用户同时还需要至少有manager_viewer权限的角色。
  • 已获取运行状态的Oozie服务器(任意实例)URL,如“https://10.1.130.10:21003/oozie”。
  • 已获取运行状态的Oozie服务器主机名,如“10-1-130-10
  • 已获取Yarn ResourceManager主节点IP,如“10.1.130.11

操作步骤

  1. 以客户端安装用户登录安装Oozie客户端的节点。
  2. 执行以下命令,获取安装环境信息。其中“/opt/client”为客户端安装路径,该操作的客户端目录只是举例,请根据实际安装目录修改。

    source /opt/client/bigdata_env

  3. 判断集群认证模式。

    • 安全模式,执行kinit命令进行用户认证。

      例如,使用oozieuser用户进行认证。

      kinit oozieuser

    • 普通模式,执行4

  4. 执行以下命令,进入样例目录。

    cd /opt/client/Oozie/oozie-client-*/examples/apps/distcp/

    该目录下需关注文件如表1所示。

    表1 文件说明

    文件名称

    描述

    job.properties

    工作流的参数变量定义文件。

    workflow.xml

    工作流的规则定制文件。

  5. 执行以下命令,编辑“job.properties”文件。

    vi job.properties

    修改如下内容:

    更改“userName”的参数值为提交任务的人机用户名,例如“userName=oozieuser”

  6. 是否是跨安全集群的DistCp。

    • 是,执行步骤7
    • 否,则执行步骤9

  7. 对两个集群进行跨Manager集群互信。
  8. 备份并且修改workflow.xml的文件内容,命令如下:

    cp workflow.xml workflow.xml.bak

    vi workflow.xml

    修改以下内容:

    <workflow-app xmlns="uri:oozie:workflow:1.0" name="distcp-wf">
        <start to="distcp-node"/>
        <action name="distcp-node">
            <distcp xmlns="uri:oozie:distcp-action:1.0">
                <resource-manager>${resourceManager}</resource-manager>
                <name-node>${nameNode}</name-node>
                <prepare>
                    <delete path="hdfs://target_ip:target_port/user/${userName}/${examplesRoot}/output-data/${outputDir}"/>
                </prepare>
                <configuration>
                    <property>
                        <name>mapred.job.queue.name</name>
                        <value>${queueName}</value>
                    </property>
                    <property>
                        <name>oozie.launcher.mapreduce.job.hdfs-servers</name>
                        <value>hdfs://source_ip:source_port,hdfs://target_ip:target_port</value>
                    </property>
                </configuration>
                <arg>${nameNode}/user/${userName}/${examplesRoot}/input-data/text/data.txt</arg>
                <arg>hdfs://target_ip:target_port/user/${userName}/${examplesRoot}/output-data/${outputDir}/data.txt</arg>
                </distcp>
            <ok to="end"/>
            <error to="fail"/>
        </action>
        <kill name="fail">
            <message>DistCP failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
        </kill>
        <end name="end"/>
    </workflow-app>

    其中“target_ip:target_port”为另一个互信集群的HDFS active namenode地址,例如:10.10.10.233:25000。

    “source_ip:source_port ”为源集群的HDFS active namenode地址,例如:10.10.10.223:25000。

    两个IP地址和端口都需要根据自身的集群实际情况修改。

  9. 执行oozie job命令,运行工作流文件。

    oozie job -oozie https://oozie角色的主机名:21003/oozie/ -config job.properties -run

    • 命令参数解释如下:

      -oozie 实际执行任务的Oozie服务器URL

      -config 工作流属性文件

      -run 运行工作流

    • 执行完工作流文件,显示“job id”表示提交成功,例如“job: 0000021-140222101051722-oozie-omm-W”。登录Oozie管理页面,查看运行情况。

      使用oozieuser用户,登录Oozie WebUI页面:https://oozie角色的ip地址:21003/oozie 。

      Oozie的WebUI界面中,可在页面表格根据“job id”查看已提交的工作流信息。