分享

Spark1.0.0 on YARN 模式部署

问题导读
Spark on YARN有哪两种模式?
Spark有哪些常用配置?
采用yarn-client方式部署有什么好处?






1:概述
      说Spark on YARN的部署,还不如说是Spark应用程序在YARN环境中的运行。按照Spark应用程序中的driver (SparkContext)分布方式不同,Spark on YARN有两种模式:
  • 一种是yarn-client模式,在这种模式下,Spark driver在客户机上运行,然后向YARN申请运行exeutor以运行Task。
  • 一种是yarn-cluster模式,这种模式下,Spark driver将作为一个ApplicationMaster在YARN集群中先启动,然后再由ApplicationMaster向RM申请资源启动executor以运行Task,正如Spark1.0.0 运行架构基本概念  中Spark on YARN所示。

      对于Spark1.0.0,在YARN中部署Spark应用程序,可以使用bin/spark-submit工具(使用方法详见Spark1.0.0 应用程序部署工具spark-submit)。在YARN上部署Spark应用程序的时候,不需要象Standalone、Mesos一样提供URL作为master参数的值,因为Spark应用程序可以在hadoop的配置文件里面获取相关的信息,所以只需要简单以yarn-cluster或yarn-client指定给master就可以了。

2:配置
      正因为需要从hadoop的配置文件中获取相关的信息,所以需要配置环境变量HADOOP_CONF_DIR或者YARN_CONF_DIR。同样的,Spark1.0.0属性配置中的配置也适用于Spark on YARN,另外Spark还提供一些YARN专用的配置项:
  • 环境变量的配置
    • SPARK_YARN_USER_ENV 用户可以在这个参数中设置Spark on YARN的环境变量,例如 SPARK_YARN_USER_ENV="JAVA_HOME=/jdk64,FOO=bar"。
  • 系统属性的配置


YARN特有属性的配置,应该是支持SparkConf方式和conf/spark-defaults.conf文件配置方式。
属性名称 默认 含义
spark.yarn.applicationMaster.waitTries 10RM等待Spark AppMaster启动次数,也就是SparkContext初始化次数。超过这个数值,启动失败。
spark.yarn.submit.file.replication 3 应用程序上载到HDFS的文件的复制因子
spark.yarn.preserve.staging.files false 设置为true,在job结束后,将stage相关的文件保留而不是删除。
spark.yarn.scheduler.heartbeat.interval-ms 5000Spark AppMaster发送心跳信息给YARN RM的时间间隔
spark.yarn.max.executor.failures 2倍于executor数导致应用程序宣告失败的最大executor失败数
spark.yarn.historyServer.address Spark history server的地址(不要加http://)。这个地址会在应用程序完成后提交给YARN RM,使得将信息从RM UI连接到history server UI上。

需要更多的细节参看Spark1.0.0属性配置

3:实验环境
实验环境参见Spark1.0.0 开发环境快速搭建
实验代码参见 Spark1.0.0 多语言编程之Scala实现Spark1.0.0 多语言编程之python实现
下面分别实验scala程序在YARN中的部署和python程序在YARN中的部署。

4:scala程序在YARN中的部署
      Spark应用程序既可以在客户端部署也可以在集群中部署,如果客户端和集群的网络状况不是很好的话,就将Spark应用程序先复制到集群的某一个节点,然后在该节点上部署。特别是采用yarn-client方式部署的时候,这样不会因为网络状况不好而影响应用程序的运行,毕竟driver和executor之间存在大量的信息交换。本实验采用的客户端部署,使用的是Spark1.0.0 多语言编程之Scala实现编译生成的程序包week6.jar 。
  • yarn-client方式部署
    • ./bin/spark-submit --master yarn-client --class week6.SogouA --executor-memory 3g --driver-memory 1g week6.jar hdfs://hadoop1:8000/dataguru/data/mini.txt
    • ./bin/spark-submit --master yarn-client --class week6.SogouB --executor-memory 3g --num-executors 2 --driver-memory 1g week6.jar hdfs://hadoop1:8000/dataguru/data/mini.txt
    • ./bin/spark-submit --master yarn-client --class week6.SogouC --executor-memory 3g --executor-cores 4 --num-executors 3 --driver-memory 1g week6.jar hdfs://hadoop1:8000/dataguru/data/mini.txt
    • 上面列出了三个class的运行命令,命令中的参数可以用户自己设置,具体参见Spark1.0.0 应用程序部署工具spark-submit。上面采用不同参数只是说明以下参数可以根据YARN的集群情况来申请资源来运行程序。
    • 采用yarn-client方式,因为driver在客户端,所以可以通过webUI访问driver的状态,在本例中可以通过http://wyy:4040访问,而YARN通过http://hadoop1:8088访问。
    • 采用yarn-client方式,因为driver在客户端,所以程序的运行结果可以在客户端显示。
    • 客户端的driver将应用提交给YARN后,YARN会先后启动AppMaster和executor,另外AppMaster和executor都是装载在container里运行,container默认的内存是1G(参数yarn.scheduler.minimum-allocation-mb定义),AppMaster分配的内存是driver-memory,executor分配的内存是executor-memory,所以向YARN申请的内存是(driver-memory +1)+ (executor-memory + 1)* num-executors,上面运行week6.SogouC使用的内存就是(1+1) + (3+1)*3=14G,如下图所示:
20140616005504000.jpg


  • yarn-cluster方式部署
    • ./bin/spark-submit --master yarn-cluster --class week6.SogouA --executor-memory 3g --driver-memory 1g week6.jar hdfs://hadoop1:8000/dataguru/data/mini.txt
    • ./bin/spark-submit --master yarn-cluster --class week6.SogouB --executor-memory 3g --num-executors 2 --driver-memory 1g week6.jar hdfs://hadoop1:8000/dataguru/data/mini.txt
    • ./bin/spark-submit --master yarn-cluster --class week6.SogouC --executor-memory 3g --executor-cores 4 --num-executors 3 --driver-memory 1g week6.jar hdfs://hadoop1:8000/dataguru/data/mini.txt
    • 采用yarn-cluster方式,因为driver在YARN中运行,要通过webUI访问driver的状态,需要点YARN中该job的Tracking UI。
    • 采用yarn-cluster方式,因为driver在YARN中运行,所以程序的运行结果不能在客户端显示,所以最好将结果保存在hdfs上,客户端的终端显示的是作为YARN的job的运行情况。
    • YARN中内存分配情况和yarn-client方式一样,如下图:
2.jpg


5:python程序在YARN中的部署
      python程序在YARN中的部署和scala程序包部署是一样,只是命令稍有差异而已:
  • yarn-client方式部署
    • ./bin/spark-submit --master yarn-client --executor-memory 3g --driver-memory 1g SogouA.py hdfs://hadoop1:8000/dataguru/data/mini.txt
    • ./bin/spark-submit --master yarn-client --executor-memory 3g --num-executors 2 --driver-memory 1g SogouA.py hdfs://hadoop1:8000/dataguru/data/mini.txt
    • ./bin/spark-submit --master yarn-client --executor-memory 3g --executor-cores 4 --num-executors 3 --driver-memory 1g SogouA.py hdfs://hadoop1:8000/dataguru/data/mini.txt
  • yarn-cluster方式部署
    • spark1.0.0还未实现








已有(2)人评论

跳转到指定楼层
小南3707 发表于 2014-12-26 14:35:23
赞~                           
回复

使用道具 举报

yi40834 发表于 2015-1-13 09:30:22
good,刚好在看这块的东西
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条