共用方式為

对 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>
    

Oozie UI - 默认用户访问权限

問题

对于创建的 HDInsight Oozie 群集,默认情况下,用户将拥有对所有作业的读取访问权限、对其自己的作业的写入访问权限,并且可以基于 ACL 写入作业。 管理员用户具有更广泛的权限,包括对所有作业和操作的写入权限。 在 Oozie 群集中,如果安全配置已禁用,则所有用户都被视为管理员,HDInsight Oozie 群集默认禁用安全配置。

原因

如果禁用安全性,则所有用户被视为管理员用户,这是 Oozie 中的标准行为,而不是 HDInsight 平台特有的。 请参考以下 Oozie 页面中提供的相同内容 - Oozie - 用户身份验证公共文档

决议

可以通过特定属性定义管理员用户。 ACL 是在作业提交期间设置的,可以同时包括用户名和组。 系统检查用户是否属于执行操作的必要组。

在 ambari 中设置此属性 oozie.service.AuthorizationService.security.enabled=true

Ambari UI -> 服务 -> Oozie -> 配置 -> 高级 -> 搜索并设置为 True -> 重启所有受影响项

管理员用户根据 oozie.service.AuthorizationService.admin.groups 属性中指定的管理员组列表确定。 使用逗号分隔多个组,空格、制表符和 ENTER 字符将被去除。

后续步骤

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

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

Oozie WebUI 禁用及命令行选项作为替代方案

問题

Apache Oozie 自 2025 年 2 月以来已停用,请参阅 此链接。 存在与 Oozie WebUI 相关的已知漏洞。

原因

若要禁用 Oozie WebUI,请执行以下步骤:

  1. 在 Ambari 门户中停止 Oozie 服务。

  2. 编辑 /var/lib/ambari-server/resources/stacks/HDInsight/<version>/services/OOZIE/quicklinks/quicklinks.json 并删除参数的值 <url> 并将其替换为“”。

之前:

  "name": "default",
  "description": "default quick links configuration",
  "configuration": {
    "links": [
  .....
        "url":"%@://%@:%@/oozie?user.name=%@",
  .....

After:

  "name": "default",
  "description": "default quick links configuration",
  "configuration": {
    "links": [
  .....
        "url":"",
  .....
  1. 重启 Ambari 服务
sudo ambari-services restart
  1. 从 Ambari 启动 Oozie 服务

解决方法

使用 Oozie 的命令行选项,参见 链接