spark on yarn 不需要部署spark,升级也和spark程序无关,网上的帖子包括我之前整理的关于spark on yarn的文章,都是先配置spark集群,然后配置hadoop集群,这样是不对的,spark的客户端(就是提交spark-submit的程序)需要可以配置spark-default.conf。其他的是不用配置的。hadoop spark集群配置参考
。所以升级的时候也可以不用管各个节点是否有spark程序。那是如何升级spark,要修改什么?
1.回顾spark on yarn 集群配置
hadoop的配置可以直接参考之前的帖子,spark又不需要配置集群,那么spark只有客户端需要配置,spark客户端只会读取spark-env.sh和spark-defaults.conf这两个配置文件
1.1 spark-env.sh
export SCALA_HOME=/opt/hadoop/scala-2.12.2 export JAVA_HOME=/opt/hadoop/jdk1.8.0_77 export HADOOP_HOME=/opt/hadoop/hadoop-2.7.7 export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export SPARK_HOME=/opt/hadoop/spark-2.3.0-bin-hadoop2.7 export SPARK_MASTER_IP=master #export SPARK_LOCAL_IP=master export SPARK_MASTER_HOST=master export SPARK_MASTER_PORT=7077 export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop export SPARK_YARN_USER_ENV=$HADOOP_HOME/etc/hadoop export SPARK_WORKER_DIR=/opt/hadoop/data/spark/work/ export SPARK_EXECUTOR_MEMORY=8G
这个配置是我spark Standalone集群时的配置,放在客户端无所谓,客户端也会使用这个配置。
最重要的是export HADOOP_HOME=/opt/hadoop/hadoop-2.7.7,当spark-submit提交模式为yarn时,通过这个配置来找到yarn的配置,从而提交到yarn的集群。
所以你的spark客户端程序,需要把hadoop集群的程序复制一份过来,放在一起。
1.2 spark-default.conf
spark 应用提交的参数都可以配置在spark-default.conf
spark.master yarn spark.submit.deployMode cluster spark.executor.cores 10 spark.num.executors 5 #spark.executor.instances 2 spark.driver.memory 8g spark.executor.memory 16g #动态资源分配 #spark.dynamicAllocation.enabled true #spark.shuffle.service.enabled true #spark.dynamicAllocation.minExecutors 2 #spark.dynamicAllocation.maxExecutors 2 #spark.dynamicAllocation.initialExecutors 2 spark.eventLog.enabled true spark.eventLog.compress true spark.eventLog.dir hdfs://master:9000/tmp/logs/root/logs spark.history.fs.logDirectory hdfs://master:9000/tmp/logs/root/logs spark.yarn.historyServer.address http://master:18080 spark.sql.parquet.writeLegacyFormat true spark.sql.autoBroadcastJoinThreshold 10485760 spark.shuffle.memoryFraction 0.8 spark.shuffle.file.buffer 6400k spark.reducer.maxSizeInFlight 960M spark.network.timeout 300s spark.rpc.askTimeout 300s spark.shuffle.io.serverThreads 8 spark.yarn.jars hdfs://master:9000/sparkJars/*.jar spark.executor.extraClassPath /opt/hadoop/spark-2.3.0-bin-hadoop2.7/external_jars/* spark.driver.extraClassPath /opt/hadoop/spark-2.3.0-bin-hadoop2.7/external_jars/*
最终要的配置就时spark.yarn.jars,如果没有这个配置,提交应用时spark jars里面的jar都会复制上去,如果有这个配置,就会用这个配置里面的jar,所以这个里面的jar,才是运行时依赖的包。
2.如何升级spark?
你只需要将新版本的jars里面的jar重新上传到spark.yarn.jars 对应的位置就可以了
是的前面说了一大堆,整个升级就只干这么简单的一件事情。
要注意的是你原来的spark.yarn.jars ,可能自己添加了很多jar,比如mysql,mongo等等,你不要忘记保留这些包了。