zoukankan      html  css  js  c++  java
  • 【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 
  • 相关阅读:
    11.29第四天冲刺记录
    11.28第三天冲刺记录
    11.27第二天冲刺记录
    11.26冲刺第一天
    团队项目计划
    软件分析_csdn app
    第二次结对编程-字词短语统计
    结对编程
    20155217 《信息安全系统设计基础》week16课堂测试
    20155217 《信息安全系统设计基础》课程总结
  • 原文地址:https://www.cnblogs.com/hframe/p/6742360.html
Copyright © 2011-2022 走看看