一、我理解經常使用的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使用的區別,才能肯定哪一個應用場景會更好些。
暫時就這些,回頭有想到的再補充