本文介绍如何在E-MapReduce上使用Oozie。

说明 阿里云E-MapReduce在2.0.0及之后的版本中提供了对Oozie的支持,如果需要在集群中使用Oozie,请确认集群的版本不低于2.0.0。

准备工作

在集群建立出来之后,需要打通SSH隧道,详细步骤请参见通过SSH隧道方式访问开源组件Web UI

这里以MAC环境为例,使用Chrome浏览器实现端口转发(假设集群Master节点公网IP为xx.xx.xx.xx):
  1. 登录到Master节点。
    ssh root@xx.xx.xx.xx
  2. 输入密码。
  3. 查看本机的id_rsa.pub
    cat ~/.ssh/id_rsa.pub
  4. 将本机的id_rsa.pub内容写入到远程Master节点的~/.ssh/authorized_keys中。
    mkdir ~/.ssh/
    vim ~/.ssh/authorized_keys
  5. 然后将步骤 3中看到的内容粘贴进来,现在应该可以直接使用ssh root@xx.xx.xx.xx免密登录Master节点了。
  6. 在本机执行以下命令进行端口转发。
    ssh -i ~/.ssh/id_rsa -ND 8157 root@xx.xx.xx.xx
  7. 启动Chrome(在本机新开terminal执行)。
    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --proxy-server="socks5://localhost:8157" --host-resolver-rules="MAP * 0.0.0.0 , EXCLUDE localhost" --user-data-dir=/tmp

访问Oozie UI页面

在进行端口转发的Chrome浏览器中访问:xx.xx.xx.xx:11000/oozielocalhost:11000/oozie或者内网ip:11000/oozie

提交Workflow作业

运行Oozie需要先安装Oozie的shareLib

在E-MapReduce集群中,默认给Oozie用户安装了sharelib,即如果使用Oozie用户来提交workflow作业,则不需要再进行sharelib的安装。

由于开启HA的集群和没有开启HA的集群,访问NameNode和ResourceManager的方式不同,在提交oozie workflow job的时候,job.properties文件中需要指定不同的NameNode和JobTracker (ResourceManager)。具体如下:
  • 非HA集群
    nameNode=hdfs://emr-header-1:9000
    jobTracker=emr-header-1:8032
  • HA集群
    nameNode=hdfs://emr-cluster
    jobTracker=rm1,rm2
下面操作示例中,已经针对是否是HA集群配置好了,即样例代码不需要任何修改即可以直接运行。关于workflow文件的具体格式,请参见 Oozie官方文档
  • 在非HA集群上提交workflow作业
    1. 登录集群的主Master节点。
      ssh root@master公网Ip
    2. 下载示例代码。
      [root@emr-header-1 ~]# su oozie
      [oozie@emr-header-1 root]$ cd /tmp
      [oozie@emr-header-1 tmp]$ wget http://emr-sample-projects.oss-cn-hangzhou.aliyuncs.com/oozie-examples/oozie-examples.zip
      [oozie@emr-header-1 tmp]$ unzip oozie-examples.zip
    3. 将Oozie workflow代码同步到HDFS上。
      [oozie@emr-header-1 tmp]$ hadoop fs -copyFromLocal examples/ /user/oozie/examples
    4. 提交Oozie workflow样例作业。
      [oozie@emr-header-1 tmp]$ $OOZIE_HOME/bin/oozie job -config examples/apps/map-reduce/job.properties -run
      执行成功之后,会返回一个jobId,类似如下信息。
      job: 0000000-160627195651086-oozie-oozi-W
    5. 访问Oozie UI页面,可以看到刚刚提交的Oozie workflow job。
  • 在HA集群上提交workflow作业
    1. 登录集群的主Master节点。
      ssh root@主master公网Ip

      可以通过是否能访问Oozie UI来判断哪个Master节点是当前的主Master节点, Oozie server服务默认是启动在主Master节点xx.xx.xx.xx:11000/oozie

    2. 下载HA集群的示例代码。
      [root@emr-header-1 ~]# su oozie
      [oozie@emr-header-1 root]$ cd /tmp
      [oozie@emr-header-1 tmp]$ wget http://emr-sample-projects.oss-cn-hangzhou.aliyuncs.com/oozie-examples/oozie-examples-ha.zip
      [oozie@emr-header-1 tmp]$ unzip oozie-examples-ha.zip
    3. 将Oozie workflow代码同步到HDFS上。
      [oozie@emr-header-1 tmp]$ hadoop fs -copyFromLocal examples/ /user/oozie/examples
    4. 提交Oozie workflow样例作业。
      [oozie@emr-header-1 tmp]$ $OOZIE_HOME/bin/oozie job -config examples/apps/map-reduce/job.properties -run
      执行成功之后,会返回一个 jobId,类似如下信息。
      job: 0000000-160627195651086-oozie-oozi-W
    5. 访问Oozie UI页面,可以看到刚刚提交的Oozie workflow job。