美文网首页spark
Spark on Yarn 在不同的JDK环境下运行

Spark on Yarn 在不同的JDK环境下运行

作者: Kent_Yao | 来源:发表于2017-11-17 18:33 被阅读379次

    前言

    Spark社区的快速发展给我带来越来越快,越来越方便的大数据处理工具的同时,也带来了不小的麻烦,一季度一个小版本,半年一个大版本,新版本JDK7说不要就不要了。要知道在大公司生产环境下升级一个JDK版本,那可是天大的事儿,这口锅谁都不敢背。

    一般的生产环境,Spark以跑在YARN上为主,YARN的环境也不能说动就能,因为也不止Spark一种类型的App泡在YARN上,在加上复杂的各种Hadoop生态,升级起来就更加费劲了。本文介绍在不改变YARN的NodeManager环境变量的前提下,以不同的JDK运行Spark Applications on Yarn。

    相关配置

    Configuration Default Value Meaning
    spark.yarn.appMasterEnv. 设置ApplicationMaster的环境变量
    spark.executorEnv. 设置executor的环境变量

    利用上述配置,我们就可以更改相关container的环境变量,包括我们的JAVA_HOME

    试验

    yarn端配置

    export JAVA_HOME=/usr/jdk64/jdk1.7.0_67
    

    spark客户端配置

    export JAVA_HOME=/usr/jdk64/jdk1.7.0_67
    或者
    export JAVA_HOME=/home/hadoop/jdk1.8.0_144
    
    bin/spark-sql

    默认情况下,直接使用yarn端配置


    image.png
    bin/spark-sql --conf spark.yarn.appMasterEnv.JAVA_HOME=/home/hadoop/jdk1.8.0_144 修改am的jdk,显示executor container没有变化
    image.png
    bin/spark-sql --conf spark.yarn.appMasterEnv.JAVA_HOME=/home/hadoop/jdk1.8.0_144 --conf spark.executorEnv.JAVA_HOME=/home/hadoop/jdk1.8.0_144

    同时修改


    image.png

    最后

    另外一种方法时通过 --archives或spark.yarn.dist.archives 上传jdk的压缩包,例如

    --archives path/to/jdk-8u77-linux-x64.tar.gz
    or
    --conf spark.yarn.dist.archives=path/to/jdk-8u77-linux-x64.tar.gz
    

    然后可以通过指定

    spark.yarn.appMasterEnv.JAVA_HOME=./jdk-8u77-linux-x64.tar.gz/jdk-8u77-linux-x64
    spark.executorEnv.JAVA_HOME=./jdk-8u77-linux-x64.tar.gz/jdk-8u77-linux-x64
    

    该方式先上传到yarn distribute cache,进而会被拉到各container的working dir 所以可以通过./jdk-8u77-linux-x64.tar.gz取到该文件,然后通过其解压后的目录jdk-8u77-linux-x64进行访问。

    获取将jdk压缩包取个文件别名,如

    --archives path/to/jdk-8u77-linux-x64.tar.gz#JDK8U77
    

    就变成了

    spark.yarn.appMasterEnv.JAVA_HOME=./JDK8U77/jdk-8u77-linux-x64
    spark.executorEnv.JAVA_HOME=./JDK8U77/jdk-8u77-linux-x64
    

    这种方案相对比较灵活,特别是对于yarn集群没有管理权限的时候,但是提交过程上传进200M的jdk还是需要花不少时间的。

    所以最后我们可以将其放到hdfs上,如hdfs://nn/path/to/jdk-8u77-linux-x64.tar.gz

    --archives hdfs://nn/path/to/jdk-8u77-linux-x64.tar.gz
    

    这种方式下,container下载这个jdk当然还是需要时间的,但是对于yarn集群的内网网络环境而言,应该还是比较轻松的。

    相关文章

      网友评论

        本文标题:Spark on Yarn 在不同的JDK环境下运行

        本文链接:https://www.haomeiwen.com/subject/icijvxtx.html