問題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復(fù)制到 flink lib包目錄即可,用到哪個復(fù)制哪個 - 因為項目使用datastream開發(fā),在算子open函數(shù)中使用自定義hbase原生連接,引用hbase-client包導(dǎo)致和hadoop環(huán)境的jar包導(dǎo)致的依賴沖突
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)境使用上面的,如果不這么做,會有依賴沖突,導(dǎo)致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,自動修復(fù)上訴問題
akka.ask.timeout: 300 s
web.timeout: 600000
問題4 設(shè)置參數(shù)
yqu etl 發(fā)現(xiàn)不生效了
解決
后續(xù)指定flink運行參數(shù),建議使用-Dxx=xx
使用 -Dyarn.application.queue=etl