对 Azure HDInsight 中的 Apache Oozie 进行故障排查

使用 Apache Oozie UI 可查看 Oozie 日志。 Oozie UI 还包含一些链接,指向工作流启动的 MapReduce 任务的 JobTracker 日志。 故障排除的模式应为:

  1. 在 Oozie Web UI 中查看作业。

  2. 如果特定的操作出错或失败,请选择该操作,以查看“错误消息”字段是否提供了有关失败的详细信息

  3. 如果已提供,请使用操作中的 URL 查看该操作的更多详细信息(例如 JobTracker 日志)。

下面是可能会遇到的特定错误及其解决方法。

JA009:无法初始化群集

问题

作业状态变为“SUSPENDED”。 作业详细信息中的 RunHiveScript 状态显示为“START_MANUAL”。 选择该操作会显示以下错误消息:

JA009: Cannot initialize Cluster. Please check your configuration for map

原因

job.xml 文件中使用的 Azure Blob 存储地址不包含存储容器或存储帐户名。 Blob 存储地址格式必须是 wasbs://containername@storageaccountname.blob.core.chinacloudapi.cn

解决方法

更改作业使用的 Blob 存储地址。


JA002:不允许 Oozie 模拟 <USER>

问题

作业状态变为“SUSPENDED”。 作业详细信息中的 RunHiveScript 状态显示为“START_MANUAL”。 选择操作会显示以下错误消息:

JA002: User: oozie is not allowed to impersonate <USER>

原因

当前的权限设置不允许 Oozie 模拟指定的用户帐户。

解决方法

Oozie 可以模拟 users 组中的用户。 使用 groups USERNAME 查看用户帐户所属的组。 如果该用户不是 users 组的成员,请使用以下命令将该用户添加到此组:

sudo adduser USERNAME users

注意

可能需要几分钟,HDInsight 才能识别用户已添加到该组。


启动器错误 (Sqoop)

问题

作业状态变为“KILLED”。 作业详细信息中的 RunSqoopExport 状态显示为“ERROR”。 选择操作会显示以下错误消息:

Launcher ERROR, reason: Main class [org.apache.oozie.action.hadoop.SqoopMain], exit code [1]

原因

Sqoop 无法加载访问数据库时所需的数据库驱动程序。

解决方法

从 Oozie 作业使用 Sqoop 时,必须同时包含数据库驱动程序和作业使用的其他资源(例如 workflow.xml)。 此外,通过 workflow.xml 的 <sqoop>...</sqoop> 节引用包含数据库驱动程序的存档。

例如,对于使用 Hadoop Oozie 工作流中的作业示例,使用以下步骤:

  1. mssql-jdbc-7.0.0.jre8.jar 文件复制到 /tutorials/useoozie 目录:

    hdfs dfs -put /usr/share/java/sqljdbc_7.0/enu/mssql-jdbc-7.0.0.jre8.jar /tutorials/useoozie/mssql-jdbc-7.0.0.jre8.jar
    
  2. 修改 workflow.xml,在 </sqoop> 上方的新行中添加以下 XML:

    <archive>mssql-jdbc-7.0.0.jre8.jar</archive>
    

后续步骤

如果你的问题未在本文中列出,或者无法解决问题,请访问以下渠道之一获取更多支持:

  • 如果需要更多帮助,可以从 Azure 门户提交支持请求。 从菜单栏中选择“支持” ,或打开“帮助 + 支持” 中心。