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