天天看点

Oozie相关问题解决

我们的大数据集群是基于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服务即可

继续阅读