您的位置:首页 > 其它

spark on yarn 详解

2018-03-11 17:00 726 查看
注意:其他更前置的配置见本人博客“spark运行模式及集群架构”。

1、spark on yarn有两种模式,一种是cluster模式,一种是client模式。
a.执行命令“./spark-shell --master yarn”默认运行的是client模式。
b.执行"./spark-shell --master yarn-client"或者"./spark-shell --master yarn --deploy-mode client"运行的也是client。
c.执行"./spark-shell --master yarn-cluster"或者"./spark-shell --master yarn --deploy-mode cluster"运行的是cluster模式。

    ##但是,以上两个启动cluster模式的命令是不可用的,这就牵涉到这两种模式的区别。

d.client和cluster模式的主要区别在于,前者的driver是运行在客户端进程中,后者的driver是运行在NodeManager的ApplicationMaster之中。我们知道,driver是负责分发作业的,运行在ApplicationMaster里的driver是无法直接与客户端进行通信的,故而c中所提到的两条命令不可用。
  ##对应的spark-sql中的一些命令也是不可用的。
注:生产上我们通常使用spark on yarn-cluster模式,由于client模式的driver在客户端上,客户端可能课executor不在同一局域网,他们之间的通信会很慢。
2、spark on yarn的两种模式的详细介绍 http://blog.csdn.net/buster2014/article/details/50133241 http://blog.csdn.net/lw_ghy/article/details/50859346 http://blog.csdn.net/shenxiaoming77/article/details/54630675
3、提交作业的方式
./bin/spark-submit --class org.apache.spark.examples.SparkPi \        #作业类名
--master yarn \                       #spark模式
--deploy-mode cluster \                #spark on yarn 模式
--driver-memory 4g \                    #每一个driver的内存
--executor-memory 2g \                    #每一个executor的内存
--executor-cores 1 \                        #每一个executor占用的core数量
--queue thequeue \                            #作业执行的队列
examples/jars/spark-examples*.jar \            #jar包
10                                               #传入类中所需要的参数


4、提交作业时yarn会将spark jars分发到yarn的container中,这十分耗费资源,故而我们可以将spark jars放在一个yarn可以访问到的目录中,具体做法如下:
vi spark-default.cong  添加
 spark.yarn.jars  hdfs://ip:8021/somepath/*
保存生效,并将所有的spark jars上传至hdfs://ip:9000/somepath/即可。

5、spark对于同时运行的作业数目有一定的限制,该限制由参数"spark.port.maxRetries"决定,该参数默认值为16,表明同一时间运行的作业最多为17个(不是16个哦),生产上16肯定太小,我们可以更改这一数字,具体做法如下:
vi spark-default.cong  添加

spark.port.maxRetries  ${业务所需要的数值}

6、启动spark on yarn的命令:“/spark-shell --master yarn --jars mysql驱动包绝对路径”
是不是超级麻烦,来来来,大佬帮你们简化

vi spark-defaults.cong  添加
spark.executor.extraClassPath  mysql驱动包绝对路径
spark.driver.extraClassPath  mysql驱动包绝对路径

保存生效,则启动命令变成:“/spark-shell --master yarn ”
####当某个jar包啊或者某个类找不到的时候,都可以用这种方式手动指定类或jar包的路径

继续简化,vi spark-defaults.cong  
该配置文件中有一行“#spark.master local[3]”,将#去掉,将local[3]改成yarn即可。
保存生效,则启动命令变成:“/spark-shell  ”

7、但是,6中这种对于spark-defaults.conf的修改,会作用于其他的spark模式,这样容易产生一些问题。
那怎么做呢?
    我们可以将spark-defaults.conf.template拷贝一份(当然啦,你拷贝spark-defaults.conf也行,只要spark-defaults.conf这个配置文件定义生效的参数你用的到),你命名成什么名字都行,接着在该配置文件中个性化定义你的属性。然后以命令“/spark-shell --properties-file ${你拷贝的配置文件绝对路径}”即可。

8、另一种传入属性的方法:
“/spark-shell --master yarn --conf spark.属性=值”

9、其他重要的属性
spark.yarn.maxAppAttempts 
该属性用来设置作业最大重试次数,它不应该大于yarn配置中设置的全局最大重试数。默认是等于的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spark yarn spark on yarn