• 144969

    文章

  • 856

    评论

  • 13

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

spark源码阅读之spark-class脚本


spark-class脚本

  • 判断SPARK_HOME是否存在

    如果不存在SPARK_HOME,请阅读前一篇文章

  • 执行load-spark-env脚本

    1. 判断SPARK_ENV_LOADED是否存在,如果不存在执行2、3、4,如果存在到5.
    2. 设置SPARK_ENV_LOADED=1
    3. 设置SPARK_CONF_DIRSPARK_HOME下的conf目录。
    4. 查找SPARK_CONF_DIR下是否存在spark_env.sh,如果存在,执行脚本。
    5. 判断SPARK_SCALA_VERSION是否设置,如果没有设置执行6、7、8、9 。
    6. 设置ASSEMBLY_DIR2为${SPARK_HOME}/assembly/target/scala-2.11
    7. 设置ASSEMBLY_DIR1为${SPARK_HOME}/assembly/target/scala-2.12
    8. 如果两个文件夹都存在,则输出存在多个scala版本,失败退出。
    9. 通过文件夹存在判断scala的version。
  • 验证JAVA_HOME

    1. 判断JAVA_HOME是否存在,如果不存在执行2,存在则设置RUNNER为${JAVA_HOME}/bin/java。
    2. 执行java命令,如果成功则,设置RUNNER为java;如果失败,则退出脚本报错,JAVA_HOME is not set
  • 设置SPARK_JARS_DIR

    查看${SPARK_HOME}/jars是否存在,如果不存在,查看${SPARK_HOME}/assembly/target/scala-$SPARK_SCALA_VERSION/jars。如果$SPARK_JARS_DIR不存在,抛出Failed to find Spark jars directory,退出脚本。否则设置LAUNCH_CLASSPATH为SPARK_JARS_DIR所有文件。

  • 是否加入launcher

    如果设置SPARK_PREPEND_CLASSES环境变量,则加入${SPARK_HOME}/launcher/target/scala-$SPARK_SCALA_VERSION/classes

  • 构建执行命令

    解析spark-submit提交命令,执行java -Xmx128m -cp $LAUNCH_CLASSPATH org.apache.spark.launcher.Main $@(实际脚本提交参数).
    org.apache.spark.launcher.Mainlauncher模块,详细流程如下图:
    spark源码阅读之spark-class脚本

    图中buildSparkSubmitCommand逻辑如下:

    1. 读取提交命令重的--properties-file,如果不存在则读取conf/spark-default.conf
    2. isClientMode:判断是否为client模式,--master属性优先级高于conf/spark-default.confspark.master配置,--deploy-mode优先级高于conf/spark-default.confspark.submit.deployMode的优先级。判断master为空(默认是local模式)或者deploy-mode为client或者master为yarn-cluster并且deploy-mode为空
    3. 如果isClientMode为true,extraClassPath=conf/spark-default.confspark.driver.extraClassPath配置,如果不为true,则为null
    4. buildJavaCommand,获取javaHome,拼成cmd的第一个元素/javaHome/bin/java,如果存在conf/java-opts配置,读取配置,加入到cmd集合(这里网上介绍的很少,不知道为什么,导致不知道这个文件具体应该怎么写,看来只有debug了),加入-cp.
    5. buildClassPath,首先加入extraClassPath,其次加入conf文件夹。下面有关于测试的内容省略,加载SPARK_HOME下的jars目录,加载HADOOP_CONF_DIR、YARN_CONF_DIR、SPARK_DIST_CLASSPATH环境变量。
    6. 判断是否是Thrift Server,判断方法很简单,比较主函数是否为org.apache.spark.sql.hive.thriftserver.HiveThriftServer2。如果是的话,加入SPARK_DAEMON_JAVA_OPTS环境变量
    7. 加入SPARK_SUBMIT_OPTS环境变量,大概搜了下,都在spark-hell内。
    8. 获取driverExtraJavaOptions,获取配置中spark.driver.extraJavaOptions,配置中不允许出现Xmx,采用--driver-memory或者spark.driver.memory替代。
    9. 如果isClientMode为true,Xmx的顺序为SPARK_DAEMON_MEMORY(是否是thrift server)>spark.driver.memory>SPARK_DRIVER_MEMORY>SPARK_MEM>1g(默认内存)。
    10. 添加org.apache.spark.deploy.SparkSubmit到cmd中,添加实际提交命令到cmd中。
  • 执行命令

    构建好的命令大概如下:${JAVA_HOME}/bin/java -cp ${CLASS_PATH} org.apache.spark.deploy.SparkSubmit --master ......等,开始exec执行。


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

0条评论

Loading...


发表评论

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

自定义皮肤 主体内容背景
打开支付宝扫码付款购买视频教程
遇到问题联系客服QQ:419400980
注册梁钟霖个人博客