
# 使用Oozie客户端提交DistCp任务
#### 操作场景
该任务指导用户在使用Oozie客户端提交DistCp任务。
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
请下载使用最新版本的客户端。
#### 前提条件
- HDFS和Oozie组件安装完成且运行正常，客户端安装成功。 如果当前客户端为旧版本，需要重新下载和安装客户端。
  
- 已创建或获取访问Oozie服务的人机用户账号及密码。
  ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
  - 该用户需要从属于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**
   ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 命令参数解释如下： -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"查看已提交的工作流信息。
     
    
   
   
 
