Spark on Yarn 详解(转)

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/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/即可。

4所说的是一个调优点哦

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配置中设置的全局最大重试数。默认是等于的。

原文:https://blog.csdn.net/pengzonglu7292/article/details/79517051?utm_source=copy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值