0535-5.15.0-Oozie中創建Ssh Action指定ssh埠號

  • 2019 年 11 月 27 日
  • 筆記

1

文檔編寫目的

考慮到伺服器的安裝,有些系統管理員會將伺服器默認的SSH埠修改其它埠,這時在Hue上創建Oozie Ssh Action的WorkFlow時無法指定伺服器的SSH埠號,導致Ssh Action執行失敗。本篇文章Fayson主要介紹如何讓Oozie的Ssh Action支援埠指定。

  • 測試環境

1.CM和CDH版本為5.15.0

2

Ssh Action源碼分析

在CDH5.15.0版本中集成Oozie版本為4.1.0,Fayson通過在GitHub上找到Oozie的程式碼,在

https://github.com/apache/oozie/blob/branch-4.1/core/src/main/java/org/apache/oozie/action/ssh/SshActionExecutor.java

程式碼中包含了Ssh Action的所有邏輯,在程式碼中也可以看到ssh中唯一指定的參數為SSH_COMAND_OPTIONS,改變數為受保護的無法通過設置該變數增加ssh埠號等其他參數。

經分析現有oozie的SshActionExecutor.java的程式碼(甚至最新的oozie版本一樣該SshAction未修復該問題),是無法實現指定ssh埠號配置的。

Fayson在github上有看到有貢獻者提交了關於指定ssh埠號的修復版本

https://github.com/apache/oozie/pull/11,但提交的程式碼一直為合併到Oozie的主版本。

在程式碼中增加了oozie.action.ssh.command.port參數,來指定SSH的埠號,該參數可以在oozie-site.xml配置文件中配置。

3

編譯修復程式碼並打包

1.將GitHub上貢獻者提交的程式碼拷貝至本地

程式碼地址如下:

https://github.com/apache/oozie/pull/11/commits/26dffbb07a2a9b65578e8fed634e2a4ff61a6350#diff-05854c4c1632a781d1c1554c6039e4e4

2.在git上下載與CDH版本一致的oozie4.1.0版本源碼

wget https://github.com/apache/oozie/archive/release-4.1.0.tar.gz

將上一步保存的程式碼替換下載下來的源碼中對應目錄的SshActionExecutor.java程式碼目錄

/data/disk1/oozie-release-4.1.0/core/src/main/java/org/apache/oozie/action/ssh

3.回到core目錄下,執行如下命令重新編譯oozie-core jar包

mvn clean package -Dmaven.test.skip=true

編譯成功

注意:編譯要配置Maven和Java環境變數,只需要編譯core模組所以進入到core目錄下。

4.找到CDH對應版本的oozie-core-4.1.0-cdh5.15.0.jar包,這一步將編譯好的SshActionExecutor類打包到oozie-core-4.1.0-cdh5.15.0.jar包中

將oozie-core-4.1.0-cdh5.15.0.jar解壓到指定目錄下

[root@cdh1 disk1]# mkdir -p oozie-core  [root@cdh1 disk1]# unzip oozie-core-4.1.0-cdh5.15.0.jar -d oozie-core

將第4步通過編譯的SshActionExecutor類拷貝至

/data/disk1/oozie-core/org/apache/oozie/action/ssh/覆蓋jar包原有的類

[root@cdh1 ssh]# pwd  [root@cdh1 ssh]# cp -r * /data/disk1/oozie-core/org/apache/oozie/action/ssh/

5.更新了SshActionExecutor類後使用jar命令重新打包為oozie-core-4.1.0-cdh5.15.0.jar

[root@cdh1 ssh]# cd /data/disk1/oozie-core  [root@cdh1 oozie-core]# jar -cvf oozie-core-4.1.0-cdh5.15.0.jar .

6.將重新打包的jar包拷貝至/opt/cloudera/parcels/CDH/jars目錄下,替換原有的jar包

注意:需要替換oozie服務所在伺服器上的jar包。

4

示例運行及驗證

1.登錄CM進入oozie服務的配置介面,在oozie-site.xml中增加如下配置

<property>      <name>oozie.action.ssh.command.port</name>      <value>2222</value>  </property>

配置完成後重啟oozie服務。

2.登錄Hue創建一個Ssh Action工作流測試

運行該WorkFlow測試

5

總結

1.Oozie是不支援Ssh Action指定埠的,需要使用github上提交的程式碼編譯使其支援埠號配置。

2.GitHub上提交的程式碼SshActionExecutor,Fayson做了部分修改,主要是獲取配置參數的ConfigurationService調用的地方,可以參考Fayson的GitHub。

GitHub地址:

https://github.com/fayson/cdhproject/tree/master/ooziedemo/sshaction