
# 使用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路径*
        
      
   
   
   
   
 
