最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何為Spark Application指定不同的JDK版本詳解

 更新時(shí)間:2017年11月29日 09:43:40   作者:StanZhai  
這篇文章主要給大家介紹了關(guān)于如何為Spark Application指定不同的JDK版本的相關(guān)資料,文中通過示例代碼將解決的方法介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友下面來隨著小編一起學(xué)習(xí)學(xué)習(xí)吧。

前言

隨著企業(yè)內(nèi)部業(yè)務(wù)系統(tǒng)越來越多,基于JVM的服務(wù),通常情況線上環(huán)境可能會有多套JDK跑不同的服務(wù)。大家都知道基于高版本的Java規(guī)范編寫的服務(wù)跑在低版本的JVM上會出現(xiàn):java.lang.UnsupportedClassVersionError的異常。

Spark 2.2開始移除了對Java 7的支持,大多數(shù)情況下,我們的Spark Application是和Hadoop系統(tǒng)公用的JDK,如果Hadoop依賴的JDK版本是7,那我們基于JDK 8編寫的Application跑在上面就會出問題。

該文主要介紹在不同的場景下,如何為Spark Application指定不同的JDK版本。

集群已部署了指定的JDK版本

假設(shè)集群中每個(gè)節(jié)點(diǎn)JDK的部署路徑為:/usr/java/jdk1.8

Spark提供了spark.executorEnv.[EnvironmentVariableName]配置,可以用來給Executor進(jìn)程添加環(huán)境變量,如果Spark Application使用的集群管理器是Standalone,只需要通過spark.executorEnv.JAVA_HOME制定Executor端的jdk路徑即可,如下:

$SPARK_HOME/bin/spark-submit \
 --conf "spark.executorEnv.JAVA_HOME=/usr/java/jdk1.8" \
 ...

在YARN模式下,還需要為Application Master指定不同的JAVA_HOME環(huán)境變量,如下:

$SPARK_HOME/bin/spark-submit \
 --conf "spark.executorEnv.JAVA_HOME=/usr/java/jdk1.8" \
 --conf "spark.yarn.appMasterEnv.JAVA_HOME=/usr/java/jdk1.8" \
 ...

以cluster的方式部署在YARN上的時(shí)候,spark.yarn.appMasterEnv.JAVA_HOME相當(dāng)于為Spark Application的Driver設(shè)置了特定的JDK版本;

以client的模式部署時(shí),spark.yarn.appMasterEnv.JAVA_HOME僅僅是為Executor Launcher設(shè)置了特定的JDK版本。

Driver端的JDK版本和spark-submit所在的機(jī)器中的SPARK_HOME環(huán)境變量一致,直接在spark-env.sh中指定即可。

集群缺失特定的JDK版本,且對集群無管理權(quán)限

某些特殊的場景下,我們對集群沒有管理權(quán)限,只能通過YARN提交Application,并且集群里沒有部署我們需要的JDK版本,這種情形就需要將JDK的安裝包也一并提交了。

這里要求我們的JDK安裝包必須為gz格式的,和你代碼打包后的jar包放在同一目錄下,假設(shè)我們下載的JDK的安裝包為:jdk-8u141-linux-x64.tar.gz。

關(guān)鍵配置如下:

$SPARK_HOME/bin/spark-submit \
 --conf "spark.yarn.dist.archives=jdk-8u141-linux-x64.tar.gz" \
 --conf "spark.executorEnv.JAVA_HOME=./jdk-8u141-linux-x64.tar.gz/jdk1.8.0_141" \
 --conf "spark.yarn.appMasterEnv.JAVA_HOME=./jdk-8u141-linux-x64.tar.gz/jdk1.8.0_141" \
 ...

我們可以通過指定spark.yarn.dist.archives配置,將JDK的安裝包分發(fā)到所有Executor的工作目錄下(包括Application Master的Executor),另外tar.gz的壓縮包也會被自動解壓,假設(shè)jdk-8u141-linux-x64.tar.gz解壓后的目錄為jdk1.8.0_141,那么我們特定的JDK的目錄就是:./jdk-8u141-linux-x64.tar.gz/jdk1.8.0_141,不同的JDK版本以此類推即可。

注意:由于Spark Standalone沒有提供分發(fā)JDK安裝包并自動解壓的功能,所以,這種方式只能用在YARN下。

驗(yàn)證

通過ps -ef grep查詢相關(guān)進(jìn)程信息,可以看到j(luò)ava的啟動路徑為我們特定JDK目錄的java表示配置成功。

如下是我在YARN模式下,單獨(dú)指定JDK版本的Executor的進(jìn)程啟動信息:

stan  590751 590745 0 20:45 ?  00:00:14 ./jdk-8u141-linux-x64.tar.gz/jdk1.8.0_141/bin/java -server -Xmx512m -XX:+UseG1GC -XX:+UnlockDiagnosticVMOptions -XX:+G1SummarizeConcMark -XX:InitiatingHeapOccupancyPercent=35 -XX:PermSize=256M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:./gc.log -verbose:gc -Djava.io.tmpdir=/home/stan/tmp/hadoop-stan/nm-local-dir/usercache/stan/appcache/application_1508397483453_0095/container_1508397483453_0095_01_000004/tmp -Dspark.driver.port=52986 -Dspark.yarn.app.container.log.dir=/home/stan//hadoop-2.6.4/logs/userlogs/application_1508397483453_0095/container_1508397483453_0095_01_000004 -XX:OnOutOfMemoryError=kill %p org.apache.spark.executor.CoarseGrainedExecutorBackend --driver-url spark://CoarseGrainedScheduler@10.0.0.110:52986 --executor-id 3 --hostname stan --cores 1 --app-id application_1508397483453_0095 --user-class-path file:/home/stan/tmp/hadoop-stan/nm-local-dir/usercache/stan/appcache/application_1508397483453_0095/container_1508397483453_0095_01_000004/__app__.jar

附:spark application運(yùn)行時(shí)版本不兼容錯(cuò)誤的解決方法

17/06/27 14:34:41 INFO deprecation: mapred.map.tasks is deprecated. Instead, use mapreduce.job.maps 
17/06/27 14:34:41 INFO MemoryStore: Block broadcast_0 stored as values in memory (estimated size 788.8 KB, free 1246.5 MB) 
17/06/27 14:34:41 INFO MemoryStore: Block broadcast_0_piece0 stored as bytes in memory (estimated size 54.0 KB, free 1246.4 MB) 
17/06/27 14:34:41 INFO BlockManagerInfo: Added broadcast_0_piece0 in memory on 10.50.70.121:37335 (size: 54.0 KB, free: 1247.2 MB) 
17/06/27 14:34:41 INFO SparkContext: Created broadcast 0 from rdd at TradeInfoOutlier.scala:30 
Exception in thread "main" java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror(Ljava/lang/ClassLoader;)Lscala/reflect/api/JavaUniverse$JavaMirror; 
at com.fangdd.data.profile.outlier.TradeInfoOutlier$.main(TradeInfoOutlier.scala:30) 
at com.fangdd.data.profile.outlier.TradeInfoOutlier.main(TradeInfoOutlier.scala) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:745) 
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181) 
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206) 
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121) 
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 
17/06/27 14:34:42 INFO SparkContext: Invoking stop() from shutdown hook 

這種錯(cuò)誤是由于生產(chǎn)環(huán)境采用的是scala 2.10 + spark1.6.3的運(yùn)行環(huán)境,本地打的application jar使用scala2.11 + spark.1.6.3的編譯環(huán)境,所以放入生產(chǎn)環(huán)境集群報(bào)了上述錯(cuò)誤,更改scala版本重新打jar包后運(yùn)行成功

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Spring?Boot項(xiàng)目傳參校驗(yàn)的最佳實(shí)踐指南

    Spring?Boot項(xiàng)目傳參校驗(yàn)的最佳實(shí)踐指南

    有參數(shù)傳遞的地方都少不了參數(shù)校驗(yàn),在web開發(fā)中前端的參數(shù)校驗(yàn)是為了用戶體驗(yàn),后端的參數(shù)校驗(yàn)是為了安全,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot項(xiàng)目傳參校驗(yàn)的最佳實(shí)踐,需要的朋友可以參考下
    2022-04-04
  • Java簡單實(shí)現(xiàn)UDP和TCP的示例

    Java簡單實(shí)現(xiàn)UDP和TCP的示例

    下面小編就為大家?guī)硪黄狫ava簡單實(shí)現(xiàn)UDP和TCP的示例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • java Jersey框架初體驗(yàn)

    java Jersey框架初體驗(yàn)

    本篇主要是Jersey體驗(yàn),你將在不做任何編碼的情況下,體驗(yàn)Jersey框架的神氣魅力!本文還假定你在eclipse里安裝了Maven插件
    2016-07-07
  • Java中g(shù)et/post的https請求忽略ssl證書認(rèn)證淺析

    Java中g(shù)et/post的https請求忽略ssl證書認(rèn)證淺析

    因?yàn)镴ava在安裝的時(shí)候,會默認(rèn)導(dǎo)入某些根證書,所以有些網(wǎng)站不導(dǎo)入證書,也可以使用Java進(jìn)行訪問,這篇文章主要給大家介紹了關(guān)于Java中g(shù)et/post的https請求忽略ssl證書認(rèn)證的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Java基礎(chǔ)之練習(xí)打印三角形

    Java基礎(chǔ)之練習(xí)打印三角形

    這篇文章主要介紹了Java基礎(chǔ)之練習(xí)打印三角形,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java 手寫LRU緩存淘汰算法

    Java 手寫LRU緩存淘汰算法

    本文主要講了如何通過哈希鏈表這種數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)LRU算法,提供了三種實(shí)現(xiàn)思路,第一種從雙向鏈表開始,借助于HashMap來實(shí)現(xiàn)滿足要求的LRUCache
    2021-05-05
  • Mybatis批量更新報(bào)錯(cuò)問題

    Mybatis批量更新報(bào)錯(cuò)問題

    這篇文章主要介紹了Mybatis批量更新報(bào)錯(cuò)的問題及解決辦法,包括mybatis批量更新的兩種方式,需要的的朋友參考下
    2017-01-01
  • spring?@Conditional的使用與擴(kuò)展源碼分析

    spring?@Conditional的使用與擴(kuò)展源碼分析

    這篇文章主要介紹了spring?@Conditional的使用與擴(kuò)展,這里需要注意如果Condition返回的是false,那么spirng就不會對方法或類進(jìn)行解析,具體源碼分析跟隨小編一起看看吧
    2022-03-03
  • springboot下使用shiro自定義filter的個(gè)人經(jīng)驗(yàn)分享

    springboot下使用shiro自定義filter的個(gè)人經(jīng)驗(yàn)分享

    這篇文章主要介紹了springboot下使用shiro自定義filter的個(gè)人經(jīng)驗(yàn),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java基于socket實(shí)現(xiàn)簡易聊天室實(shí)例

    Java基于socket實(shí)現(xiàn)簡易聊天室實(shí)例

    這篇文章主要介紹了Java基于socket實(shí)現(xiàn)簡易聊天室的方法,實(shí)例分析了java基于socket實(shí)現(xiàn)聊天室服務(wù)端與客戶端的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05

最新評論

清原| 邵东县| 兴宁市| 罗山县| 卢湾区| 惠安县| 思茅市| 丰县| 翼城县| 习水县| 怀安县| 马公市| 黄浦区| 望城县| 喀喇沁旗| 兴海县| 红桥区| 阿坝| 灵寿县| 昌宁县| 仁怀市| 全椒县| 五华县| 大田县| 长治县| 克拉玛依市| 永寿县| 侯马市| 睢宁县| 塔河县| 池州市| 来宾市| 西丰县| 南昌市| 霍州市| 青铜峡市| 衢州市| 呼和浩特市| 桓仁| 白山市| 桂东县|