说明 阿里雲 E-MapReduce 在 2.0.0 及之後的版本中提供了對 Oozie 的支援,如果需要在叢集中使用 Oozie,請確認叢集的版本不低於 2.0.0。

準備工作

在叢集建立出來之後,需要打通 ssh 隧道,詳細步驟請參考SSH 登入叢集

這裡以 MAC 環境為例,使用 Chrome 瀏覽器實現連接埠轉寄(假設叢集 master 節點公網 IP 為 xx.xx.xx.xx):
  1. 登入到 master 節點。
    ssh root@xx.xx.xx.xx
  2. 輸入密碼。
  3. 查看原生 id_rsa.pub 內容(注意在本機執行,不要在遠端 master 節點上執行)。
    cat ~/.ssh/id_rsa.pub
  4. 將原生 id_rsa.pub 內容寫入到遠程 master 節點的 ~/.ssh/authorized_keys 中(在遠端 master 節點上執行)。
    mkdir ~/.ssh/
    vim ~/.ssh/authorized_keys
  5. 然後將步驟 2 中看到的內容粘貼進來,現在應該可以直接使用 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/oozie,localhost:11000/oozie 或者內網 ip:11000/oozie。

提交workflow作業

運行 Oozie 需要先安裝 Oozie 的sharelib:https://oozie.apache.org/docs/4.2.0/WorkflowFunctionalSpec.html#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 官方文檔:https://oozie.apache.org/docs/4.2.0/。
  • 在非 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。