Spark Conf和Shell文件分析

本文主要介绍Spark的Conf和Shell也就是配置文件和启动脚本,对其中主要的进行简单分析

1.文件概览和说明

Spark安装包下的conf,bin,sbin目录文件概览如下:
1. conf/
├── docker.properties.template:docker相关配置属性
├── fairscheduler.xml.template:调度相关配置
├── log4j.properties.template:日志文件配置
├── metrics.properties.template:Spark自带的Metrics的配置
├── slaves.template:Standalone模式下的从机配置
├── spark-defaults.conf.template:Spark运行时配置
└── spark-env.sh.template:用户加入的环境变量
2. bin/
├── beeline:启动beeline
├── find-spark-home:宣召SPAEK_HOME
├── load-spark-env.sh:加载环境变量
├── pyspark:启动PySpark的CLI
├── run-example:运行Spark的Example
├── spark-class:启动脚本最终调用的脚本,用于执行 org.apache.spark.launcher.Main
├── sparkR:启动Spark R
├── spark-shell:启动Spark的CLI
├── spark-sql:启动spark-sql的CLI
└── spark-submit:向Spark提交应用程序
3. sbin/
├── slaves.sh:运行shell命令在所有的slave机器上
├── spark-config.sh:用于判断和设置环境变量
├── spark-daemon.sh:可以接收Start和Submit等参数,如用于启动Standalone和ThriftServer等
├── spark-daemons.sh:运行Spark相关命令在所有的slave机器上
├── start-all.sh:用于Standalone启动Master和Slaves等进程
├── start-history-server.sh:用于启动Spark的history-server
├── start-master.sh:用于启动Master
├── start-mesos-dispatcher.sh:用于启动mesos的MesosClusterDispatcher
├── start-mesos-shuffle-service.sh:用于启动Mesos的外部Shuffle服务
├── start-shuffle-service.sh:在调用该命令的机器上启动外部Shuffle服务
├── start-slave.sh:作为从机启动
├── start-slaves.sh:启动所有该Master的从机
├── start-thriftserver.sh:用于启动ThriftServer
├── stop-all.sh:停止所有的进程
├── stop-history-server.sh:停止history-server
├── stop-master.sh:停止Master
├── stop-mesos-dispatcher.sh:停止MesosClusterDispatcher
├── stop-mesos-shuffle-service.sh:停止Mesos的外部Shuffle服务
├── stop-shuffle-service.sh: 停止外部Shuffle服务
├── stop-slave.sh:停止slave
├── stop-slaves.sh: 停止所有的slave
└── stop-thriftserver.sh:停止ThriftServer

2.conf目录文件介绍

  1. fairscheduler.xml:fairs cheduler调度器配置
    内容主要是:
    <allocations>
    <pool name="production"><!--资源池名-->
    <schedulingMode>FAIR</schedulingMode><!--调度模式能够设为:FIFO和FAIR -->
    <weight>1</weight><!--调度池的权重,默认为1-->
    <minShare>2</minShare><!-- 给调度池的CPU核数目,默认为0-->
    </pool>
    <pool name="test">
    <schedulingMode>FIFO</schedulingMode>
    <weight>2</weight>
    <minShare>3</minShare>
    </pool>
    </allocations>
  2. log4j.properties:
    注意log4j中的配置和SPARK_LOG_DIR是有区别的其中SPARK_LOG_DIR是为了给后台进程用的error和out都输出到该目录下:nohup -- "$@" >> $log 2>&1 < /dev/null &
  3. spark-defaults.conf
    Spark运行时配置,Spark运行时的配置有三种设置方式,按照优先级分别是:1.程序里面设置通过sparkConf;2.通过提交应用程序时指定;3.通过在spark-default.conf中设定;
  4. spark-env.sh:
    Spark相关的环境变量如SPARK_HISTORY_OPTS指定History-Server的额外参数。SPARK_LOG_DIR指定Spark的日志目录

3.bin目录命令介绍

  1. beeline
    主要调用spark-class 提交org.apache.hive.beeline.BeeLine类
  2. load-spark-env.sh
    获得sparkConf,然后加载spark-env.sh,最后选择Scala版本
  3. pyspark
    主要判断了相关配置,设置PySpark的类路径,然后调用spark-submit 提交 pyspark-shell-main
  4. sparkR
    比较简单主要调用了spark-submit命令提交了sparkr-shell-main
  5. spark-shell
    定义了一个main()方法和onExit方法,main方法里面调用了spark-submit提交 org.apache.spark.repl.Main
  6. spark-sql
    比较简单主要调用了spark-submit命令提交了org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver 类
  7. spark-submit
    spark-submit比较简短主要向spark-class 提交执行org.apache.spark.deploy.SparkSubmit类
  8. spark-class
    从前面6个启动脚本可知全部的命令最终其实都是调用了spark-class,spark主要做了以下几件事情:

    1. 检查SPARK_HOME,JAVA_HOME等环境变量
    2. 设置Spark的类路径:${SPARK_HOME}/jars
    3. 定义了方法build_command()用于构建启动命令:Java -Xmx128m -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "$@"
    4. 定义存放执行结果的数组CMD
    5. 执行build_command并将结果写入CMD
    6. 计算CMD数组的长度,并获得退出代码,如果为0则输出CMD 并退出

这里面比较重要的类是spark-submit中提交的org.apache.spark.deploy.SparkSubmit是Spark加载应用并运行的起点。后面再进行分析;

4.Sbin目录脚本介绍

  1. start-master.sh:Standalone模式
    1. 判断并设置SPAK_HOME并设置CLASS=“org.apache.spark.deploy.master.Master”;
    2. 加载spark-config.sh和load-spark-env.sh;
    3. 设置相关的端口:SPARK_MASTER_PORT,SPARK_MASTER_HOST,SPARK_MASTER_WEBUI_PORT;
    4. 执行脚本spark-daemon.sh:spark-daemon.sh start $CLASS 1 参数
  2. start-slave.sh:Standalone模式
    1. 判断并设置SPAK_HOME并设置CLASS=“org.apache.spark.deploy.worker.Worker”;
    2. 加载spark-config.sh和load-spark-env.sh;
    3. 设置相关的端口:SPARK_WORKER_PORT,SPARK_WORKER_WEBUI_PORT;
      4.判断是否设置SPARK_WORKER_INSTANCES,来启动相应的slvae数;
    4. 执行脚本spark-daemon.sh start $CLASS 参数
  3. start-history-server.sh
    1. 判断设置SPAK_HOME,加载conf和env.sh
    2. 执行脚本:spark-daemon.sh start start org.apache.spark.deploy.history.HistoryServer 1 $@
  4. start-thriftserver.sh
    1. 判断设置SPARK_HOME,并设置CLASS=org.apache.spark.sql.hive.thriftserver.HiveThriftServer2
    2. 执行脚本:spark-daemon.sh submit $CLASS 1 参数
  5. spark-config.sh
    1. 判断存在或者设置 SPARK_CONF_DIR
    2. 加载PySpark classes
  6. spark-daemon.sh
    1. SPARK_HMOE,conf等的设置;
    2. 分别设置option、command、instance为后面的三个参数(如:option=submit ,command=org.apache.spark.sql.hive.thriftserver.HiveThriftServer2,instance=1);
    3. 定义spark_rotate_log函数:日志回滚函数,更改日志名,原有log变为log.1等;
    4. 判断SPARK_IDENT_STRING是否有值,没有将其设置为$USER;
    5. 判断存在或设置:SPARK_LOG_DIR,SPARK_PID_DIR。并设置log和pid;
    6. 判断存在或设置:SPARK_NICENESS,调度优先级;
    7. 定义execute_command() 和 run_command()函数;
    8. case option:判断是submit或start或stop或status 调用相应的方法;
    9. run_command函数:1.创建PID目录,判断是否存在相应的进程;2.删除相应的文件夹,回滚日志;3.进入case执行相应的execute_command;4.这里使用了nice命令用于和上面的SPARK_NICENESS配套使用优先级;5.向spark-class提交或者spark-submit提交。
    10. execute_command() 函数拼接启动命令为后台执行,启动过后台进程平判断是否启动成功。

经过上面总结最终sbin下面的脚本大部分调用了spark-daemon.sh,并最终调用的都是spark-class脚本。

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

标签:

分享到:

扫一扫在手机阅读

扫一扫 在手机阅读、分享本文

上一篇: 下一篇:

还没有评论,快来抢沙发!

电子邮件地址不会被公开。 必填项已用*标注

loading

johnnwang

人生得意须尽欢,莫使金樽空对月。