You need to enable JavaScript to run this app.
导航
常见问题
最近更新时间:2025.04.01 20:13:41首次发布时间:2024.11.12 16:54:09
我的收藏
有用
有用
无用
无用

Yarn 应用不在运行

问题现象:The Yarn application application_xxxxxx doesn't run anymore.
Image
我们在运行 Standalone cluster 模式或者 yarn-session 模式时,可能会碰到 Yarn Application 不存在的情况。主要原因是上一个 yarn-session 的 Application 任务已经结束,然而在本地/tmp/.yarn-properties-root文件中仍保留着已经结束的 Application ID。在 SQL 客户端默认不指定execution.target的情况下,会从该文件中读取 Application ID,并尝试向该 Application 提交任务。
**解决办法:**手动删除或者修改/tmp/.yarn-properties-root文件。

Hive 找不到相关依赖

问题现象:运行 SQLClient 的时候,设置使用 Hive 方言。报错如下:Cloud not find any factory for identifier 'hive' that implements 'org.apache.flink.table.planner.delegation.ParserFactory' in the classpath.
Image
在 Flink 1.16 之后使用 Hive 方言的场景下,可能会出现以上错误,主要由依赖 Jar 包配置问题导致。
**解决办法:**可参考 官方指南,将 Hive 的相关依赖 Jar 包放入 lib 中。

# 进入FLINK_HOME
mv lib/flink-table-planner-loader-1.16.1.jar opt/
cp opt/flink-table-planner_2.12-1.16.1.jar lib/
cp connectors/flink-sql-connector-hive-3.1.2_2.12-1.16.1.jar lib/

注意:非 Hive 方言场景, 不要将 Connector 的 Jar 包依赖放入 lib 目录下。

Hive 方言模式下,找不到 Ranger 插件

问题现象:开启 Hive 方言模式,如果集群启用了 Ranger,直接使用${HIVE_HOME}/conf作为 Hive conf 创建 Hive Catalog 时,Flink 运行环境缺少 ranger-hive-plugin 的相关依赖。java.lang.ClassNotFoundException: org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizerFactory
解决办法:

  • 如果依然想启用 ranger-hive-plugin 进行权限校验,需将 ranger-hive-plugin 添加到 Flink classpath 下,比如ln -s ${RANGER_HOME}/lib/ranger-hive-plugin-shim-2.1.1-SNAPSHOT.jar ranger-hive-plugin-shim-2.1.1-SNAPSHOT.jar
  • 如果不想启用 ranger-hive-plugin,可以单独拷贝hive-site.xml,并取出 ranger 相关的配置参数,用新的hive-site.xml创建 Hive Catalog。

Hudi 和 Iceberg 冲突

问题现象:目前同时安装 Hudi 和 Iceberg 服务时,创建 Iceberg Hive Catalog 的时候可能会遇到以下错误,主要由于 Iceberg 和 Hudi 的冲突导致:

java.lang.VerifyError: Stack map does not match the one at exception handler 20 Exception Details: Location: org/apache/iceberg/hive/HiveCatalog.alterHiveDataBase(Lorg/apache/iceberg/catalog/Namespace;Lorg/apache/hadoop/hive/metastore/api/Database;)V

解决办法:

  • 方法一:安装服务时,只安装 Iceberg 和 Hudi 其中的一个服务。
  • 方法二:当使用 Iceberg 时,执行unlink ${FLINK_HOME}/lib/hudi-flink-bundle_2.12.jar 命令手动移除 Hudi-flink 依赖包。

如何查看正在运行的Flink作业的日志?

在YARN上正在运行的Flink作业,可以通过以下几种方式查看日志:

  1. YARN ResourceManager Web界面:
    • 打开YARN ResourceManager的Web界面。
    • 在界面上找到你的Flink作业对应的Application ID。
    • 点击这个Application ID,进入到Application的详情页面。
    • 在详情页面中,找到启动时间离当前最近的“Attempt ID”。
    • 点击这个Attempt ID,可以看到所有运行该Flink作业的容器列表。
    • 点击任一容器的日志链接,可以查看该容器的日志文件(.log)、标准输出(stdout)和标准错误输出(stderr),这些文件里通常会包含Flink作业的运行或错误日志。
  2. Flink Web界面:
    • 打开YARN ResourceManager的Web界面。
    • 在界面上找到你的Flink作业对应的Application ID。
    • 点击这个Application ID,进入到Application的详情页面。
    • 在详情页面,点击“Tracking URL”后的超链接,正常情况下会自动跳转到Flink Web界面。
    • 在Flink Web界面中,点击左侧的“Job Manager”菜单,进入Job Manager的详情页。
    • 在Job Manager的详情页,点击“Logs”或“Log List”选项卡则可查看Job Manager相关的日志。
    • 在Flink Web界面中,点击左侧的“Task Managers”页面,你可以看到所有TaskManager的列表。
    • 点击任一TaskManager,然后点击“Stdout”或“Logs”或“Log List”可查看相应的日志。
  3. 使用YARN命令行工具:
    • 打开YARN ResourceManager的Web界面。
    • 在界面上找到你的Flink作业对应的Application ID。
    • 在LAS 控制台,选择MasterGroup中的一个节点,远程连接到该节点。
    • 使用YARN的命令行工具 yarn logs ,运行命令 yarn logs -applicationId <Application-ID> 来获取日志(含Job Manager与Task Manager的所有日志)

用户可以参考以上三种方式来查看正在运行中的Flink作业的日志。一般情况下,建议使用YARN ResourceManager Web界面和Flink Web界面来查看。

如何查看已运行完成的Flink作业的日志?

在 Hadoop YARN 上运行的 Flink 作业,一旦作业结束,其日志通常会被 YARN 聚合并存储到 HDFS中。这是通过 YARN 的日志聚合功能实现的(LAS 湖仓一体分析平台提供的YARN服务默认就启用了该功能)。以下是查看已经结束的 Flink 作业日志的主要步骤:

  1. YARN ResourceManager Web界面:
    • 打开YARN ResourceManager的Web界面。
    • 在界面上找到你的Flink作业对应的Application ID。
    • 点击这个Application ID,进入到Application的详情页面。
    • 在详情页面中,找到启动时间离当前最近的“Attempt ID”。
    • 点击这个Attempt ID,可以看到所有曾经运行该Flink作业的容器列表。
    • 点击任一容器的日志链接,可以查看该容器的日志文件(.log)、标准输出(stdout)和标准错误输出(stderr),这些文件里通常会包含Flink作业的运行或错误日志。
  2. 使用YARN命令行工具:
    • 打开YARN ResourceManager的Web界面。
    • 在界面上找到你的Flink作业对应的Application ID。
    • 在LAS 控制台,选择MasterGroup中的一个ECS节点,远程连接到该节点。
    • 使用YARN的命令行工具 yarn logs ,运行命令 yarn logs -applicationId <Application-ID> 来获取日志(含Job Manager与Task Manager的所有日志)。

对于已运行完成日志的保留期由 yarn.log-aggregation.retain-seconds 控制,如果超过这个时间,日志可能已经被自动删除。如果希望保留更长时间,可以调整该参数。如果日志文件非常大,使用 yarn logs 命令可能需要较长时间来下载和显示日志。