【Spark2.0源碼學習】-2.一切從腳本提及

從腳本提及
     在看源碼以前,咱們通常會看相關腳本瞭解其初始化信息以及Bootstrap類,Spark也不例外,而Spark咱們啓動三端使用的腳本以下:
  • %SPARK_HOME%/sbin/start-master.sh
  • %SPARK_HOME%/sbin/start-slaves.sh
  • %SPARK_HOME%/sbin/start-all.sh
  • %SPARK_HOME%/bin/spark-submit
 
     三端啓動腳本中對於公共處理部分進行抽取爲獨立的腳本,以下:
     
spark-config.sh 初始化環境變量 SPARK_CONF_DIR, PYTHONPATH
bin/load-spark-env.sh
初始化環境變量SPARK_SCALA_VERSION,
調用%SPARK_HOME%/conf/spark-env.sh加載用戶自定義環境變量
conf/spark-env.sh 用戶自定義配置
 
    接下來針對於一些重要的腳本進行一一描述
一. start-daemon.sh
     主要完成進程相關基本信息初始化,而後調用bin/spark-class進行守護進程啓動,該腳本是建立端點的通用腳本,三端各自腳本都會調用spark-daemon.sh腳本啓動各自進程
     
  • 初始化 SPRK_HOME,SPARK_CONF_DIR,SPARK_IDENT_STRING,SPARK_LOG_DIR環境變量(若是不存在)
  • 初始化日誌並測試日誌文件夾讀寫權限,初始化PID目錄並校驗PID信息
  • 調用/bin/spark-class腳本,/bin/spark-class見下
 
二. bin/spark-class
  •  master調用舉例:bin/spark-class --class org.apache.spark.deploy.master.Master --host $SPARK_MASTER_HOST --port $SPARK_MASTER_PORT --webui-port $SPARK_MASTER_WEBUI_PORT $ORIGINAL_ARGS
  • 初始化 RUNNER(java),SPARK_JARS_DIR(%SPARK_HOME%/jars),LAUNCH_CLASSPATH信息
  • 調用( "$RUNNER" -Xmx128m -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "$@")獲取最終執行的shell語句
  • 執行最終的shell語句(好比:/opt/jdk1.7.0_79/bin/java -cp /opt/spark-2.1.0/conf/:/opt/spark-2.1.0/jars/*:/opt/hadoop-2.6.4/etc/hadoop/ -Xmx1g -XX:MaxPermSize=256m org.apache.spark.deploy.master.Master --host zqh --port 7077 --webui-port 8080),若是是Client,那麼可能爲r,或者python腳本
 
三. start-master.sh
     啓動Master的腳本,流程以下:
     
  • 用戶執行start-master.sh腳本,初始化環境變量SPARK_HOME (若是PATH不存在SPARK_HOME,初始化腳本的上級目錄爲SPARK_HOME),調用spark-config.sh,調用load-spark-env.sh
  • 若是環境變量SPARK_MASTER_HOST, SPARK_MASTER_PORT,SPARK_MASTER_WEBUI_PORT不存在,進行初始化7077,hostname -f,8080
  • 調用spark-daemon.sh腳本啓動master進程(spark-daemon.sh start org.apache.spark.deploy.master.Master 1 --host $SPARK_MASTER_HOST --port $SPARK_MASTER_PORT --webui-port $SPARK_MASTER_WEBUI_PORT $ORIGINAL_ARGS)
 
四. start-slaves.sh
     啓動Worker的腳本,流程以下:
    
  • 用戶執行start-slaves.sh腳本,初始化環境變量SPARK_HOME,調用spark-config.sh,調用load-spark-env.sh,初始化Master host/port信息,
  • 調用slaves.sh腳本,讀取conf/slaves文件並遍歷,經過ssh鏈接到對應slave節點,啓動 ${SPARK_HOME}/sbin/start-slave.sh spark://$SPARK_MASTER_HOST:$SPARK_MASTER_PORT
  • start-slave.sh在各個節點中,初始化環境變量SPARK_HOME,調用spark-config.sh,調用load-spark-env.sh,根據$SPARK_WORKER_INSTANCES計算WEBUI_PORT端口(worker端口號依次遞增 )並啓動Worker進程(${SPARK_HOME}/sbin /spark-daemon.sh start org.apache.spark.deploy.worker.Worker $WORKER_NUM  --webui-port "$WEBUI_PORT" $PORT_FLAG $PORT_NUM $MASTER "$@")
     
五. start-all.sh
     屬於快捷腳本,內部調用start-master.sh與start-slaves.sh腳本,並沒有額外工做
 
六. bin/spark-submit
     任務提交的基本腳本,流程以下:
          
  • 直接調用spark-class腳本進行進程建立(./spark-submit --class org.apache.spark.examples.SparkPi --master spark://zqh:7077 ../examples/jars/spark-examples_2.11-2.1.0.jar 10)
  • 若是是java/scala任務,那麼最終調用SparkSubmit.scala進行任務處理(/opt/jdk1.7.0_79/bin/java -cp /opt/spark-2.1.0/conf/:/opt/spark-2.1.0/jars/*:/opt/hadoop-2.6.4/etc/hadoop/ -Xmx1g -XX:MaxPermSize=256m org.apache.spark.deploy.SparkSubmit --master spark://zqh:7077 --class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.1.0.jar 10)
 
七.總結
     三端在的腳本主要進行多方面抽取,使代碼更加精煉
    • 公共的環境變量由spark-config.sh,bin/load-spark-env.sh進行統一的處理
    • 擴在由conf/spark-env.sh進行配置讀取實現
    • 守護進程由spark-daemon.sh進行建立,進行相關的log,pid前置處理
    • spark-class.sh是公共的處理入口腳本
    • Main.java負責對參數的解析組裝
    • 最後執行組裝好的command,其中支持scala/java/python/r 
相關文章
相關標籤/搜索