使用Share Lib检查工具
Oozie任务运行需要依赖Share Lib中的原生Jar包,Share Lib由Oozie内核启动时自动上传到HDFS的“/user/oozie”目录下,当HDFS上的Share Lib损坏、缺失或Jar包冲突可能导致Oozie任务运行失败。
当用户提交的Oozie作业运行失败时,可以通过该工具对Share Lib进行检查。
前提条件
- 已安装HDFS、Oozie客户端。
- 若需要检查Spark Share Lib,Oozie客户端所在节点上还需要安装Spark客户端。
- 执行检查的用户需要拥有Oozie的“普通用户权限”,及HDFS“/user/oozie”目录的访问权限。
操作步骤
- 以客户端安装用户登录安装客户端的节点。
- 执行以下命令,切换到客户端安装目录。
cd 客户端安装目录
- 执行以下命令配置环境变量并认证用户。
source bigdata_env
kinit 提交Oozie任务的用户( 若集群未启用Kerberos认证(普通模式)请跳过该操作)
- 检查Share Lib,包括客户端和服务端两种方式。Spark Share Lib仅支持客户端检查。
- 客户端方式:
- 检查Oozie核心Share Lib,且执行检查的Oozie客户端所在节点必须安装了一个oozie实例。
oozie -validatesharelib -oozie.core.path=oozie实例安装路径
例如:
oozie -validatesharelib -oozie.core.path=${BIGDATA_HOME}/FusionInsight_Porter_*/install/FusionInsight-Oozie-*/oozie-*
- 检查Spark Share Lib。
oozie -validatesharelib -spark.client.path=Spark客户端安装目录
例如:
oozie -validatesharelib -spark.client.path=/opt/client/Spark/
- 检查Oozie核心Share Lib,且执行检查的Oozie客户端所在节点必须安装了一个oozie实例。
- 服务端方式:
oozie job -oozie https://oozie角色的主机名:21003/oozie -validatesharelib
oozie角色的主机名可在FusionInsight Manager,选择“集群 > 服务 > Oozie > 实例”查看。
“21003”为Oozie HTTPS请求的运行端口,可在FusionInsight Manager,选择“集群 > 服务 > Oozie > 配置”,搜索“OOZIE_HTTPS_PORT”查看。
- 客户端方式:
- 查看检查结果。包括以下几种情况:
- Share Lib存在Jar包缺失
若检测到缺失Jar包,将输出“Share Lib jar file(s) not found on hdfs:”及缺失的Jar包信息。
若Share Lib Jar包完整,将输出“All Share Lib jar file(s) found on hdfs.”。
- 已损坏的Jar包
若检测到已损坏的Jar包,将输出“Share Lib jar file(s) mismatch on hdfs:”以及损坏的Jar包信息。
若Share Lib jar包完好,将输出“All Share Lib jar file(s) on hdfs match.”。
- 已上传的自定义Jar包
若检测到已上传的自定义Jar包,将输出“Extra Share Lib jar file(s) found on hdfs:”以及自定义Jar包信息。
若未检测到自定义Jar包,将输出“No extra Share Lib jar file(s) found on hdfs.”。
- Share Lib存在Jar包缺失
- 根据检查结果进行异常处理。
若5的检测结果中包括缺失或已损坏的Jar包信息,需执行以下步骤进行处理:
- Spark Share Lib:
上传“Spark客户端安装目录/spark/jars”路径下的Spark Jar包到检查结果对应的HDFS路径下:
hdfs dfs -put -f 本地Jar包路径 异常Spark Jar包所在的HDFS路径
- Core Share Lib:
- 解压oozie安装路径下的“${BIGDATA_HOME}/FusionInsight_Porter_*/install/FusionInsight-Oozie-*/oozie-*/oozie-sharelib-*.tar.gz”,找到Share Lib Jar包:
- 上传6.a获取的oozie Jar包到检查结果对应的HDFS路径下。
hdfs dfs -put -f 本地Jar包路径 异常Oozie Jar包所在的HDFS路径
- Spark Share Lib: