更新时间:2024-07-24 GMT+08:00

使用Share Lib工具检查Oozie依赖Jar包正确性

Oozie任务运行需要依赖Share Lib中的原生Jar包,Share Lib由Oozie内核启动时自动上传到HDFS的“/user/oozie”目录下,当HDFS上的Share Lib损坏、缺失或Jar包冲突可能导致Oozie任务运行失败。

当用户提交的Oozie作业运行失败时,可以通过该工具对Share Lib进行检查。

该操作仅适用于MRS 3.3.0及之后版本。

前提条件

  • 已安装HDFS、Oozie客户端。
  • 如果需要检查Spark Share Lib,Oozie客户端所在节点上还需要安装Spark客户端。
  • 执行检查的用户需要拥有Oozie的“普通用户权限”,及HDFS“/user/oozie”目录的访问权限。

操作步骤

  1. 以客户端安装用户登录安装客户端的节点。
  2. 执行以下命令,切换到客户端安装目录。

    cd 客户端安装目录

  3. 执行以下命令配置环境变量并认证用户。

    source bigdata_env

    kinit 提交Oozie任务的用户( 如果集群未启用Kerberos认证(普通模式)请跳过该操作)

  4. 检查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 job -oozie https://oozie角色的主机名:21003/oozie -validatesharelib

      oozie角色的主机名可在FusionInsight Manager,选择“集群 > 服务 > Oozie > 实例”查看。

      “21003”为Oozie HTTPS请求的运行端口,可在FusionInsight Manager,选择“集群 > 服务 > Oozie > 配置”,搜索“OOZIE_HTTPS_PORT”查看。

  5. 查看检查结果。包括以下几种情况:

    • 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.”。

  6. 根据检查结果进行异常处理。

    如果5的检测结果中包括缺失或已损坏的Jar包信息,需执行以下步骤进行处理:

    • Spark Share Lib:

      上传“Spark客户端安装目录/spark/jars”路径下的Spark Jar包到检查结果对应的HDFS路径下:

      hdfs dfs -put -f 本地Jar包路径 异常Spark Jar包所在的HDFS路径

    • Core Share Lib:
      1. 解压oozie安装路径下的“${BIGDATA_HOME}/FusionInsight_Porter_*/install/FusionInsight-Oozie-*/oozie-*/oozie-sharelib-*.tar.gz”,找到Share Lib Jar包:

        tar -zxf oozie-sharelib-*.tar.gz

      2. 上传6.a获取的oozie Jar包到检查结果对应的HDFS路径下。

        hdfs dfs -put -f 本地Jar包路径 异常Oozie Jar包所在的HDFS路径