注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mmicky 的博客

追逐刹那的惊艳

 
 
 

日志

 
 

Spark1.0.0 on YARN 模式部署  

2013-12-25 22:04:49|  分类: spark |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
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文件配置方式,Spark1.0.0 属性配置 - mmicky - mmicky 的博客
 属性名称 默认 含义
 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:实验环境
下面分别实验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,如下图所示:
Spark1.0.0 on YARN 模式部署 - mmicky - mmicky 的博客
 
  • 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方式一样,如下图:
Spark1.0.0 on YARN 模式部署 - mmicky - mmicky 的博客
 
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方式部署
    • ./bin/spark-submit --master yarn-cluster --executor-memory 3g --driver-memory 1g SogouA.py hdfs://hadoop1:8000/dataguru/data/mini.txt
    • ./bin/spark-submit --master yarn-cluster --executor-memory 3g --num-executors 2 --driver-memory 1g SogouA.py hdfs://hadoop1:8000/dataguru/data/mini.txt
    • ./bin/spark-submit --master yarn-cluster --executor-memory 3g --executor-cores 4 --num-executors 3 --driver-memory 1g SogouA.py hdfs://hadoop1:8000/dataguru/data/mini.txt




  评论这张
 
阅读(4003)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017