一、我理解经常使用的Spark部署方式有三种web
1)、本地服务,就是所谓的local,在IDE上本地跑程序,用于调试shell
2)、Standalone,使用本身的master/worker进行服务的调度。 脱离yarn的资源管理app
3)、Spark on yarn。 使用yarn来进行资源的调度ui
二、在spark-env.sh中配置export HADOOP_CONF_DIR= ,这样就可使用hdfs了。spa
三、提交应用使用bin/spark-submit,经过指定master来肯定是使用什么模式,即spark:// yarn-cluster yarn-client。若是使用的spark://,那么表明就是standalone模式,那么就须要sbin/start-all.sh启动一下spark集群进行资源调度。调试
四、使用bin/spark-shell来进行本地交互式查询。 但使用spark-shell貌似最好在standalone模式下进行日志
五、最终执行进程是Executor,它的资源使用在submit时指定--executor-cores,--executor-memory,--num-executors,若是没有指定,那么就会读取spark-env.sh配置文件中的SPARK_EXECUTOR_CORES,SPARK_EXECUTOR_MEMORY进程
六、在yarn模式下Executor进程名叫作CoarseGrainedExecutorBackend,在standalone模式下,Executor进程名叫作CoarseGrainedExecutorBackend。 (。。。我一直觉得进程名称不同呢,原来是同样的。 好吧,我是出来搞笑的)资源
七、yarn-client,yarn-cluster区别在于driver的位置。 所谓driver是指定你的运行代码。 client模式下,你的client就是在你在客户端中。 cluster模式下,彷佛应该是在ApplicationMaster中,它出现的位置是随机的。部署
形象的举个例子就清楚了,若是你在你的执行代码中输出了日志,那么在client模式下是能够看到日志的,但在cluster模式下是不太容易看到日志输出的,若是想要看到, 那么须要去yarn的webui看。或者执行命令yarn application -logs xxxxxxxxxxxxx(若是我没有记错的话) 。
我的使用经从来看,若是是使用spark streaming ,那么用client感受我的会好一些。
后续会读源代码,在源代码中了解一下client 和 cluster使用的区别,才能肯定哪一个应用场景会更好些。
暂时就这些,回头有想到的再补充