Open cjuexuan opened 7 years ago
首先,我们面对的现状是,业务团队每个开发使用的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简单
spark.yarn.dist.jars
spark-submit.sh 这个脚本把所有的活都给org.apache.spark.deploy.SparkSubmit做了,那么我们要解决debug问题,其实可以通过自己实现这一块逻辑,重写spark submit的代码,然后通过yarn-client的方式,实现在ide中连到集群
org.apache.spark.deploy.SparkSubmit
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比较,效果还是很不错的)
spark on yarn任务提交的一些实践
现状
首先,我们面对的现状是,业务团队每个开发使用的spark版本不尽相同,所以如何在yarn上实现spark多版本并存是我们需要解决的第一个问题,另外,开发过程中,有些问题很难通过local模式复现,难免需要远程debug,所以最好能在ide里面debug,最后,我们可能同时有dev,test和beta,product几套环境,有几套hadoop集群,所以最好也能解决几个环境同时并存的问题
思考
多版本问题
多版本问题,我们可以通过不同的hdfs目录进行多版本的隔离,因为是在yarn上,所以很自然的使用
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比较,效果还是很不错的)
效果图