日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spark on yarn 使用自定义jdk

發布時間:2024/2/28 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spark on yarn 使用自定义jdk 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 背景
    • 2. 使用自定義的jdk

1. 背景

??公司的hadoop集群默認使用的還是jdk1.7 我剛來不知道,用spark2.0+jdk1.8開發了應用程序。 提交到集群上面報錯

Job aborted due to stage failure: Task 1 in stage 37.0 failed 4 times, most recent failure: Lost task 1.3 in stage 37.0 (TID 10960, hadoop37): java.lang.UnsupportedClassVersionError: com/chen/search//task/IndexBuilder$1 : Unsupported major.minor version 52.0

當時內心有點崩潰,沒想到集群只支持jdk1.7, 最開始想到的方案是降低當前工程的jdk版本吧,于是在本地又裝了一個jdk1.7, 然后各種依賴的包都要處理,因為很多第三方包新一些的都是jdk1.8了,讓人欲哭無淚,我一頓操作,終于把大部分依賴都降低到了1.7, 結果發現有一個沒法繞過去的地方,這個spark任務最終要寫入Elasticsearch, ES的版本是7.+, 7.0之后ES的client對jdk1.7已經不再支持了,所以也決定了這個問題無法通過降低jdk來完成了,而且降低jdk的操作本來也不合我的想法,開歷史倒車。

2. 使用自定義的jdk

??上面的一頓操作猛如虎,一看結果啥用沒有,比較坑。也說明我的思維不夠靈活,遇到問題第一個想到的是適應,比如hadoop平臺說只支持1.7,我就去降低自己的代碼的jdk版本,沒有想過怎樣在集群中運行高版本的jdk。還好在經歷上面的失敗之后我并沒有放棄,想到有沒有其他方案呢,我就查了一下,結果真的有,就是hadoop集群的多版本jdk的方案。這里需要提交的時候做更多的配置。整個的提交命令是這樣的:

spark-submit --deploy-mode client --master yarn --class com.xxxx.task.RebuildStarter \ --driver-memory 2G \--num-executors 80 \--queue aaa \--conf spark.default.parallelism=60 \--executor-cores 4 \--executor-memory 16G \user-1.0-SNAPSHOT.jar \--conf "spark.yarn.appMasterEnv.JAVA_HOME=/opt/jdk1.8.0_181" \--conf "spark.executorEnv.JAVA_HOME=/opt/jdk1.8.0_181" \--conf "spark.yarn.executor.memoryOverhead=2048" 2>&1

其中比較重要的是

--conf "spark.yarn.appMasterEnv.JAVA_HOME=/opt/jdk1.8.0_181" \--conf "spark.executorEnv.JAVA_HOME=/opt/jdk1.8.0_181" \

這個設置需要在hadoop集群中所有的機器上都安裝jdk1.8,其實就是解壓放上去就好,所以實際上不會對集群的穩定性造成影響。
設置master和executor的jdk。這個方案也是我從網上找到的一個方案,但是在我實際運行后不行,依然報上面的jdk的版本不支持的錯誤,有點頭大, 這個時候,我想有沒有可能是這些命令在將任務提交到其他executor的時候沒有分發過去呢(在使用集群的時候多少覺得這個集群哪里不對頭)?
于是在代碼里面增加了一些設置,就是把這個設置抄寫了一遍

SparkConf sparkConf = new SparkConf().setAppName(JOB_NAME).set(ConfigurationOptions.ES_NODES, esHost).set(ConfigurationOptions.ES_PORT, esPort).set(ConfigurationOptions.ES_NET_HTTP_AUTH_USER, esUser).set(ConfigurationOptions.ES_NET_HTTP_AUTH_PASS, esPass).set(ConfigurationOptions.ES_BATCH_SIZE_ENTRIES, "1000").set(ConfigurationOptions.ES_MAPPING_ID, ES_MAPPING_ID).set(ConfigurationOptions.ES_BATCH_WRITE_REFRESH, "false").set("spark.sql.warehouse.dir", "/user/hive/warehouse").set("spark.executorEnv.JAVA_HOME","/opt/jdk1.8.0_181").set("spark.default.parallelism","60").set("spark.yarn.executor.memoryOverhead","2048") ;SparkSession session = SparkSession.builder().appName(JOB_NAME).config(sparkConf).enableHiveSupport().getOrCreate();

這樣提交任務后終于不再報這個錯了。

總結

以上是生活随笔為你收集整理的spark on yarn 使用自定义jdk的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。