cjuexuan / mynote

236 stars 34 forks source link

spark on yarn任务提交的一些实践 #36

Open cjuexuan opened 7 years ago

cjuexuan commented 7 years ago

spark on yarn任务提交的一些实践

现状

首先,我们面对的现状是,业务团队每个开发使用的spark版本不尽相同,所以如何在yarn上实现spark多版本并存是我们需要解决的第一个问题,另外,开发过程中,有些问题很难通过local模式复现,难免需要远程debug,所以最好能在ide里面debug,最后,我们可能同时有dev,test和beta,product几套环境,有几套hadoop集群,所以最好也能解决几个环境同时并存的问题

思考

多版本问题

多版本问题,我们可以通过不同的hdfs目录进行多版本的隔离,因为是在yarn上,所以很自然的使用spark.yarn.jars

该参数的介绍如下

spark.yarn.jars

相关链接

另外其实也可以走spark.yarn.dist.jars 通过 distitrbuted cache file 进行分发,不过用起来没spark.yarn.jars简单

ide debug

spark-submit.sh 这个脚本把所有的活都给org.apache.spark.deploy.SparkSubmit做了,那么我们要解决debug问题,其实可以通过自己实现这一块逻辑,重写spark submit的代码,然后通过yarn-client的方式,实现在ide中连到集群

ps:这样自己初始化还有个好处是接入内部监控系统,挂hook的过程可以对业务透明

多环境问题

现在的build tools其实都有profile或者env的概念,在解决了多版本问题的情况下,默认我们每个项目各自管理各自jar包了,那么我们也很自然的将我们环境相关的配置放到profile中,这样可以在打jar包的时候解决多环境的问题

其他

我司java司机还是比较多的,spring是大家都熟悉的东西,而且通过xml管理这些东西也比较清晰,描述性和可读性很好,所以我们基于spring进行了封装,由于用户把jar打到各自项目的lib中,那么有个同步本地lib到hdfs的动作,我们也通过hdfs的api实现了,然后通过配置在spring中,在加载applcation context的时候实现jar的同步(第一个版本md5比较,发现效果一般,后来进行modify time比较,效果还是很不错的)

效果图

image

image