bug消消乐

spark on hdp yarn cluster踩坑jerse

2021-05-14  本文已影响0人  朝朝Mumu

现在hdp 3版本中自带的jersey版本已经是1.19,而我所用的spark3.1.1自带的jersey版本已经是2.30了。

《Spark在HDP Yarn的提交与正常通信》一文中我们知道使用开源spark提到hdp yarn时需要替换2个包:jersey-client和jersey-core,版本均为1.19。这种解决办法是可行的,对代码也没有什么侵入性。但是技术上不怎么优雅,且需要去每个spark目录下替换这个jersey包。

方案1:就是换jar包,如果用户没有遇到其他异常,这样就行。

方案2:如果不使用timeline-service,那么设置YARN服务的yarn.timeline-service.enabled配置为false,这个ClientConfig错误也会消失。设置这个参数的提示会在启动spark-sqlspark-shell报错时直接提示你这么修改。

error

注意:这里是公共参数!

方案3:在提交任务时指定classpath包含所需版本的jersey-client来解决。具体就是在spark-submit命令行增加--conf spark.driver.extraClassPath=/path-to-jar/jersey/* --conf spark.executor.extraClassPath=/path-to-jar/jersey/*。这样可以不用把jar包拷贝到每个节点。请预先把1.19版本的jersey jar放置在你配置的路径下(修改/path-to-jar/jersey)。

最佳方案:
hdp原装的spark2可以正常提交任务,是因为修改了源码,在提交任务时追加参数设置yarn.timeline-service.enabledfalse,那么我们也要重新编译spark源码吗?答案是不需要!
spark-submit命令行增加 --conf spark.hadoop.yarn.timeline-service.enabled=false,只影响当前任务,比方案2更优雅。
根据我们的实测结果,使用最佳方案完全OK。

如果想改Spark源码一劳永逸的解决,修改的地方是src/main/scala/org/apache/spark/deploy/SparkHadoopUtil.scala,在第447行增加hadoopConf.set("yarn.timeline-service.enabled", "false")

为什么要替换这个包,WestC同学在Spark on hdp yarn cluster踩坑(timeline-service)中有排查过程。

参考:
Spark在HDP Yarn的提交与正常通信

点:spark on yarn、debug、jersey-client
线:Spark
面:资源调度

不积跬步无以至千里;不积小流无以成江海

上一篇 下一篇

猜你喜欢

热点阅读