問題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
根據(jù)經(jīng)驗flink on yarn在config.sh 配置 hadoop classpath 并沒有完全加載hadooo classpath中所有的環(huán)境變量的jar包,避坑:不要在項目中引用hadoop 環(huán)境變量中的jar包宛裕,為idea調(diào)試用行施,可以配置scope provided
- 以上根本原因是jar包沖突
- on yarn 沒有任何報錯信息让腹,可以使用本地方法調(diào)試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 環(huán)境中hadoop-mapreduce-client-core-2.7.3.2.6.5.0-292.jar
復制到 flink lib包目錄即可,用到哪個復制哪個 - 因為項目使用datastream開發(fā)历谍,在算子open函數(shù)中使用自定義hbase原生連接虾标,引用hbase-client包導致和hadoop環(huán)境的jar包導致的依賴沖突
pom修改如下寓盗,保障本地可以測試也可以保障在yarn環(huán)境的可用性
<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環(huán)境使用上面的璧函,如果不這么做傀蚌,會有依賴沖突,導致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項目
<!-- 日志實現(xiàn) 將是最好的依賴方式 -->
<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
image.png
解決
背景 flink 1.7.2 datastream scala項目 添加參數(shù) flink-conf.yaml
,因為源碼對這部分改動很大蘸吓,可以選擇flink到1.13.6善炫,自動修復上訴問題
akka.ask.timeout: 300 s
web.timeout: 600000
問題4 設置參數(shù)
yqu etl 發(fā)現(xiàn)不生效了
解決
后續(xù)指定flink運行參數(shù),建議使用-Dxx=xx
使用 -Dyarn.application.queue=etl