问题1
Caused by: java.lang.NoClassDefFoundError: org/apache/hadoop/mapreduce/jobhistory/Event
- per-job on yarn模式运行报异常,
global limit =2; local limit is =1 yarn container exitCode: 239
进入yarn logs -applicationId application_1645773933151_92778
没有任何报错信息
分析flink on yarn
根据经验flink on yarn在config.sh 配置 hadoop classpath 并没有完全加载hadooo classpath中所有的环境变量的jar包,避坑:不要在项目中引用hadoop 环境变量中的jar包,为idea调试用,可以配置scope provided
- 以上根本原因是jar包冲突
- on yarn 没有任何报错信息,可以使用本地方法调试local,可以输出一些有用报错信息
/usr/local/flink-1.13.6/bin/flink run -t local -p 4 -Dtaskmanager.numberOfTaskSlots=4 -Djobmanager.memory.process.size=2048m -Dtaskmanager.memory.process.size=4096m -Dyarn.application.name=hive_log_parse -yqu etl -c com.xxx.job.parse.JobMain hive-log-parse-1.0.jar --day 20220612 --job.input.path hdfs://xxxdata/mr-history/day=20220612 --job.output.path hdfs://xxxdata/xxxdata/log/dw_hive_log_parse/day=20220612
-
java.lang.NoClassDefFoundError: org/apache/hadoop/mapreduce/jobhistory/Event
解决办法:
找到hadoop 环境中hadoop-mapreduce-client-core-2.7.3.2.6.5.0-292.jar
复制到 flink lib包目录即可,用到哪个复制哪个 - 因为项目使用datastream开发,在算子open函数中使用自定义hbase原生连接,引用hbase-client包导致和hadoop环境的jar包导致的依赖冲突
pom修改如下,保障本地可以测试也可以保障在yarn环境的可用性
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-hbase-1.4_2.12</artifactId>
<version>${flink.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<!--用于本地测试,hadoop环境使用上面的,如果不这么做,会有依赖冲突,导致yarn exit exitCode: 239 -->
<artifactId>hbase-shaded-client</artifactId>
<version>${hbase.version}</version>
<scope>provided</scope>
</dependency>
问题2
flink org.apache.logging.log4j.spi.LoggerContextFactory.isClassLoaderDependent()Z 报错
flink on yarn .NoClassDefFoundError: Could not initialize class org.apache.logging.log4j.core.LoggerContext
解决
背景flink1.13 on yarn datastream scala项目
<!-- 日志实现 将是最好的依赖方式 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.1</version>
</dependency>
问题3 Flink akka AskTimeoutException
解决
背景 flink 1.7.2 datastream scala项目 添加参数 flink-conf.yaml
,因为源码对这部分改动很大,可以选择flink到1.13.6,自动修复上诉问题
akka.ask.timeout: 300 s
web.timeout: 600000
问题4 设置参数
yqu etl 发现不生效了
解决
后续指定flink运行参数,建议使用-Dxx=xx
使用 -Dyarn.application.queue=etl