我們的大資料叢集是基于CDH6.0.1搭建的,在安裝CDH叢集時采用了推薦開啟TLS加密,即開啟安全傳輸協定。這樣在叢集配置身份驗證和授權時,Cloudera Manager Server會通過網絡将敏感資訊發送到叢集主機,例如Kerberos keytabs和包含密碼的配置檔案。要確定傳輸安全,必須在Cloudera Manager Server和所有群集主機之間配置TLS加密。TLS加密還用于使用HTTPS保護與Cloudera Manager管理界面的用戶端連接配接。Cloudera Manager還支援TLS身份驗證。如果沒有證書身份驗證,惡意使用者可以通過安裝Cloudera Manager Agent軟體并将其配置為與Cloudera Manager Server進行通信,将主機添加到Cloudera Manager。要防止這種情況,必須在每個代理主機上安裝證書,并将Cloudera Manager Server配置為信任這些證書。
雖然通過CDH自帶的Hue可以友善的以托拉拽的方式建構Oozie工作流和檢視工作流執行情況,但這種托拉拽的方式對于大型的工作流來說,運維難度較大,且不利于工程化,故需要通過編寫腳本代碼的方式使建構Oozie工作流工程化。是以首當其沖就是利用Oozie提供的指令行來操作工作流腳本,和利用Oozie的web ui來檢視Oozie指令送出的工作流(因為Oozie指令送出的工作流不會在Hue界面上顯示)。下面是實作Oozie工作流工程化的過程中遇到的兩個問題及其解決方案。
一、執行Oozie指令報認證失敗問題解決
在安裝Oozie服務的主機上将當初添加該主機進CDH叢集時所生成的主機證書檔案cm-auto-host_cert_chain.pem加入到該主機本地java秘鑰庫中,執行如下指令檢視本地java秘鑰庫已添加的證書清單:
cd $JAVA_HOME/jre/lib/security
keytool -list -keystore cacerts
Enter keystore password: changeit
然後執行如下指令将CDH主機認證證書檔案cm-auto-host_cert_chain.pem加入上述證書清單:
keytool -import -alias oozie_key -keystore cacerts -file /var/lib/cloudera-scm-agent/agent-cert/cm-auto-host_cert_chain.pem
最後執行oozie指令驗證是否通過認證:
oozie admin -oozie https://hostname:11443/oozie -status 正常應傳回: System mode: NORMAL
二、通路Oozie web界面報錯問題解決
通路web界面報錯資訊:{"errorMessage":"org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp","httpStatusCode":500}
經排查确認是缺少相關依賴包,需将如下檔案拷貝到/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/oozie/libext目錄:
ext-2.2.zip
libj2v8_linux_x86_64.so
或者如果有網絡可下載下傳,就執行
cd /opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/oozie/libext
wget http://archive.cloudera.com/gplextras/misc/ext-2.2.zip
unzip ext-2.2.zip
最後在Cloudera Manager界面上重新開機Oozie服務即可