频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
spark 2.0.1 官方文档(二)提交应用程序
2016-10-24 09:29:00         来源:狼窝  
收藏   我要投稿

提交应用程序

在spark的bin目录下有一个spark-submit的脚本文件是用来在集群环境下运行应用程序的. 它可以通过统一的接口,在所有spark支持的集群管理器上使用,而不需要你针对每个应用程序进行特殊的配置。

将你的应用程序依赖文件打包

如果你的代码依赖于其他的工程,你需要将这些工程连同自己的应用程序一起打包,以便在spark集群环境中进行部署. 你需要创建一个包含了你自己代码和依赖工程的jar包. sbt和Maven都有自己相应的装配插件.当创建集合包时,将spark和hadoop相关的包作为已经提供的依赖; 这些包不需要进行打包,由于他们已经在集群管理器在运行时提供. 一旦你创建了集合jar包,你就可以通过调用bin/spark-submit脚本来传输你的jar包.

对于python程序,你可以在spark-submit中使用--py-files参数来添加.py,.zip或者.egg文件. 如果你需要依赖多种python文件,我们建议你将他们打入一个.zip或者.egg文件.

使用spark-submit运行应用程序

一旦用户的程序被打好包,就可以使用bin/spark-submit脚本来运行它. 该脚本支持spark的classpath设置、依赖工程设置并且支持不同spark支持的集群管理器和部署模式:

./bin/spark-submit \
  --class  \
  --master  \
  --deploy-mode  \
  --conf = \
  ... # other options
   \
  [application-arguments]

一些通用的参数说明:

  • --class: 指明你的应用程序入口(例如:org.apache.spark.examples.SparkPi)
  • --master: 集群中主节点的URL地址(例如:spark://23.195.26.187:7077)
  • --deploy-mode: 是将你的驱动程序部署在工作节点(集群模式)还是作为一个外部客户端(客户端模式,默认的部署方式)进行本地部署?
  • --conf: 任意key-value格式的spark配置属性. 值中如果包含空白字符需要将其用双引号进行包裹(例如“key=value”).
  • application-jar: 包含了你自己应用程序和所有依赖的jar包路径. 该URL必须在你的集群环境中是全局可见的, 例如路径hdfs://和file://都需要在所有节点可见:.
  • application-arguments: 任何需要传递给你主类main方法的参数

    ?常见的部署策略是将你的应用程序提交到一台在物理上与你的工作机器相连的网管机上(例如:主节点在一个standalone EC2的集群中). 在这种设置下,推荐使用客户端模式. 在客户端模式下,驱动程序在spark-submit进程中直接运行,就好像是集群中的一个客户端. 其输入和输出都被绑定在console上. 这样,客户端模式非常适合需要进行交互执行的应用程序(例如:spark shell).

    可选的,如果你的应用程序提交的机器离工作节点很远(例如你本地工作站),通常是使用cluster模式来减小驱动和执行器之间的网络延迟. 目前,standalone模式是不支持python程序的cluster部署模式的.

    对于python应用,可以简单的在application-jar参数位置传递一个.py文件,并使用--py-files参数在搜索路径中添上.zip,.egg或者.py的python文件.

    针对于特定的集群管理器有一些特有的可用属性.例如,针对使用了cluster部署模式的spark standalone集群,你可以使用--supervise参数来保证驱动程序在返回码为非零的失败情况下,可以自动重新开始.你可以在spark-submit执行脚本上采用--help来查看可用的选择参数. 如下是一些公用参数的例子:

    # 在本地的8个cpu上运行应用程序
    ./bin/spark-submit \
      --class org.apache.spark.examples.SparkPi \
      --master local[8] \
      /path/to/examples.jar \
      100
    
    # 采用client部署模式在standalone集群上运行spark程序
    ./bin/spark-submit \
      --class org.apache.spark.examples.SparkPi \
      --master spark://207.184.161.138:7077 \
      --executor-memory 20G \
      --total-executor-cores 100 \
      /path/to/examples.jar \
      1000
    
    # 采用client部署模式在standalone集群上运行spark程序,并可以自动重启
    
    ./bin/spark-submit \
      --class org.apache.spark.examples.SparkPi \
      --master spark://207.184.161.138:7077 \
      --deploy-mode cluster \
      --supervise \
      --executor-memory 20G \
      --total-executor-cores 100 \
      /path/to/examples.jar \
      1000
    
    # 在yarn集群中运行
    export HADOOP_CONF_DIR=XXX
    ./bin/spark-submit \
      --class org.apache.spark.examples.SparkPi \
      --master yarn \
      --deploy-mode cluster \  # can be client for client mode
      --executor-memory 20G \
      --num-executors 50 \
      /path/to/examples.jar \
      1000
    
    # 在standalone集群上运行python应用
    ./bin/spark-submit \
      --master spark://207.184.161.138:7077 \
      examples/src/main/python/pi.py \
      1000
    
    # 采用cluster部署模式在mesos集群中运行程序,可自动重启
    ./bin/spark-submit \
      --class org.apache.spark.examples.SparkPi \
      --master mesos://207.184.161.138:7077 \
      --deploy-mode cluster \
      --supervise \
      --executor-memory 20G \
      --total-executor-cores 100 \
      https://path/to/examples.jar \
      1000

    主节点URL

    传递给spark的主节点URL可以是如下形式中的一个:

    Master URL Meaning
    local 在本地采用单工作线程运行spark(没有并行化).
    local[K] 在本地采用K个工作线程运行spark程序(理想情况下,k为你机器的cpu数量).
    local[*] 在本地运行spark程序,采用的工作线程数量为你机器逻辑上的cpu核数.
    spark://HOST:PORT 连接standalone集群的主节点. 连接端口需要和你在主节点上配置的一样,默认为7077.
    mesos://HOST:PORT

    连接mesos集群. 连接端口需要和你在主节点上配置的一样,默认为5050. 对于使用

    了zookeeper的mesos集群,需要使用mesos://zk://...的url和

    参数:--deploy-mode cluster来提交应用,host:port应该配置为

    连接到MesosClusterDispatcher.

    yarn

    连接到YARN集群,其部署模式依赖于--deploy-mode参数. 集群

    的位置基于HADOOP_CONF_DIR或者YARN_CONF_DIR变量设置.

    从文件中加载配置信息

    spark-submit脚本可以通过配置文件加载默认的spark配置信息,并传递给你的应用程序. 默认情况下会读取conf/spark-defaults配置文件.conf文件夹在spark的安装目录中. 更多的细节,请参考《默认参数加载》部分

    加载默认的spark配置参数可以避免每次执行spark-submit脚本时都需要录入固定的标识信息.例如,如果你在配置文件中设置了spark.master参数,那么你可以非常安全的在执行spark-submit脚本时省略掉--master参数.通常情况下,在代码中的SparkConf对象中设置的明确配置值拥有最高的优先级,然后是在执行spark-submit脚本时传递的标识,最后是默认文件中的配置.

    如果你不太清楚配置参数来自于哪种渠道,你可以通过在运行spark-submit脚本时使用--verbose参数来答应更加细粒度的调试信息.

    高级依赖管理

    当使用spark-submit时,应用程序jar连同所有在--jars配置中使用的jar包都会被自动传输到集群中. 在--jars中提供的URL需要使用逗号进行分割. 这个列表涉及到的url会被添加到驱动程序和执行器程序的类路径中.--jar不支持文件夹下子文件夹的递归.

    spark使用如下URL模式来允许不同策略的jar包传递:

    • file:- 驱动程序是一个HTTP服务器,该服务器提供file:/URI形式的绝对路径,每一个执行器都会从HTTP服务器上拉取文件.
    • hdfs:,http:,https:,ftp:- 从期望的URI中拉取文件和jar包
    • local:- 一个以local:/开始的URI表明是从各个工作节点本地获取文件. 这表明将不会有网络IO发生,这在需要将大文件和大jar包传输到各个工作节点、NFS,或者GlusterFs上的场景会工作的非常好.

      注意jar包和文件会被拷贝到每一个SparkContext的执行节点上. 这将会随着时间的增长而占用大量的磁盘空间. 如果是使用YARN作为集群管理器,清理工作会自动执行, 如果使用spark自带的standalone作为资源管理器, 可以通过配置spark.worker.cleanup.appDataTtl属性来完成自动清理的工作.

      用户也可以通过在--packages配置中,以逗号分隔的maven坐标的形式提供依赖包. All transitive dependencies will be handled when using this command当使用了这个命令,则所有的依赖传递将会被使用.附加的repositories 可以在--repositories参数后以逗号分隔的形式进行添加. 这些命令可以在调用pyspark,spark-shell,spark-submit脚本时使用.

      对于python程序,等价的可以使用--py-file参数将.egg,.zip和.py的类库文件分发到执行器.

点击复制链接 与好友分享!回本站首页
上一篇:spring中使用solr的代码实现
下一篇:tensorflow笔记 :常用函数说明
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站