随着spark越来越流行,我们的很多组件都有可能和spark集成,比如说spark处理完的数据写入mysql,redis,或者hbase,elasticsearch,spark本身不包含db的依赖的,这就需要自己解决依赖的jar包,这里大致有两种处理思路处理依赖问题:
(1)使用maven将整个依赖打成一个fat的jar,这样所有的依赖都会在一个jar包,这样的好处就是一个jar包包含所有依赖,不需要额外考虑依赖的问题,但是弊端也非常明显如果依赖多的话jar包的体积会非常大超过100M都很正常,每次代码有小的变更都需要重新编译上传linux测试,如果你们win环境跟服务器中间是通过vpn连接的,每次只允许上传几kb的数据,那么你就完蛋了,等你上传100M的jar包完了,1个小时也过去了,而且中间如果vpn不稳定断了,那么恭喜你,你需要重新再来一次。一天的上班时间也就够你调试8次代码.....
(2)第二种方式是使用maven将核心代码打成一个jar,依赖的不打进去,但是需要自己把依赖的jar包在服务器上做成一份共享的,每次程序运行时都可以加载到,这样的工作只需要做一次即可,以后代码变更,只会提交核心代码,共享的依赖用在变化,这样的好处就是动静分离,核心代码体积非常小,只有只kb,每次编译重新打包上传linux运行速度非常快,依赖的jar虽然体积比较大,数量多但是我们只需要第一次将其全部收集到一个公共目录即可,程序运行时加载这个目录即可。这样的缺点就是如果框架对依赖由特殊要求,那么就需要了解这个框架如何加载jar包,才能正确。
在使用spark集成es时候,我使用的是上面的第二种方法,下面看下如何使用,集成es的jar包如下:
jackson-dataformat-smile-2.6.6.jar
hppc-0.7.1.jar
t-digest-3.0.jar
jsr166e-1.1.0.jar
lucene-core-5.5.0.jar
elasticsearch-2.3.4.jar
这里需要解释一下依赖jar包如何在spark中提交,大多数时候我们直接使用spark-submit提交命令加上--jars libs/*jar即可,少数时候会出现另外一种情况,明明libs目录下有这个jar包,但是在运行spark任务的时候一直报这个jar的类
找不到,如果出现这种情况,就需要在每台hadoop或者spark的机器上创建一个本地的jar目录,然后把那个出现问题的jar,放在这里面,最后在使用下面的几个参数配置此jar,这样以来这种问题基本就能解决。
--driver-class-path $spark_jars \
--driver-library-path $spark_jars \
--conf spark.executor.extraClassPath=$spark_jars \
--conf spark.executor.extraLibraryPath=$spark_jars \
在使用spark和es集成的时候guava的包就出现了上述的第二种情况,所以我在下面使用了第二种加载方式,最后调试通过。
最后需要注意的是,如果跟hive集成的时候,还用到了yarn-cluster模式,那么提交任务的时候,必须把hive-site.xml也提交上去,否则会报找不到hive的表异常。
最终提交spark任务到yarn集群上的命令如下:
jars=`echo /home/spark/x_spark_job/libs/*jar | sed 's/ /,/g'`
spark_jars=/opt/bigdata/jars/spark/guava-18.0.jar
/opt/bigdata/spark/bin/spark-submit --class BuildIndexHistoryErrorQuest --master yarn --deploy-mode cluster \
--executor-cores 1 --driver-memory 1g --executor-memory 1g --num-executors 6 \
--files /etc/hive/conf/hive-site.xml --jars $jars \
--driver-class-path $spark_jars \
--driver-library-path $spark_jars \
--conf spark.executor.extraClassPath=$spark_jars \
--conf spark.executor.extraLibraryPath=$spark_jars \
/home/spark/x_spark_job/kp_diag-1.*jar
spark这个集成相关依赖时,还是比较简单的,大部分时候我们使用--jars都能非常轻松的解决依赖问题,少数时候需要在每一台spark机器上上传jar包,除此之外在使用maven打包的时候散仙推荐使用第二种,不要把依赖和核心代码耦合在一个jar里,最好能分离,这样核心代码的体积会非常小方便调试。
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。
分享到:
相关推荐
1. 解压Spark安装包 2. 配置Hadoop生态组件相关环境变量 2. 在 master 节点上,关闭HDFS的安全模式: 3. 在 master 节点上
■ 计算框架在Hadoop 中的作用 ■ YARN 的设计目的和基本架构 ...■ Apache Spark 概念 ■ YARN 如何分配集群资源 ■ YARN 如何处理故障 ■ 如何查看和管理YARN 应用程序 ■ 如何访问YARN 应用程序日志
【讲义-第10期Spark公益大讲堂】Spark on Yarn-.pdf
Spark on Yan集群搭建的详细过程,减少集群搭建的时间
Spark on Yarn模式部署.docx
基于docker搭建spark on yarn及可视化桌面.doc
spark初始化源码阅读sparkonyarn的client和cluster区别
#资源达人分享计划#
基于SparkonYarn的淘宝数据挖掘平台
SPARK2_ON_YARN-2.4.0 jar包下载
三种方式的spark on kubernetes对比,第一种:spark原生支持Kubernetes资源调度;第二种:google集成的Kubernetes的spark插件sparkoperator;第三种:standalone方式运行spark集群
本来不打算写的了,但是真的是闲来无事,整天看美剧也没啥意思。这一章打算讲一下Spark onyarn的实现,1.0.0里面...在第一章《spark-submit提交作业过程》的时候,我们讲过Sparkonyarn的在cluster模式下它的main clas
Oozie Spark on YARN requirement failed 所需jar包:http://blog.csdn.net/fansy1990/article/details/53856608
spark-yarn_2.11-2.1.3-SNAPSHOT.jar
Spark On Yarn完全分布式集群环境搭建文档。 分为如下几部分: 1、环境的准备; 2、Zookeeper完全分布式搭建; 3、Hadoop2.0 HA集群搭建步骤介绍; 4、Spark On Yarn搭建介绍; 5、集群启动介绍; 最新最全的java培训视频...
基于Spark_on_Yarn的淘宝数据挖掘平台
2014年Spark Summit于6月30日至7月2日在美国旧金山举行。Spark、Shark、Spark流媒体和相关项目及产品的主要用户聚集一地,共同探讨Spark项目开发的方向,以及Spark在各种各样应用程序中的实践情况。
java提交spark任务到yarn平台的配置讲解共9页.pdf.zip
本1、2、3节介绍了Spark 内存相关之识,第4节描述了常错误类型及产原因并给出了解决案。1 堆内和堆外内存规划堆内和堆外内存规划了更为详细的分配,以充分利内
本篇博客,Alice为大家带来关于如何搭建Spark的on yarn集群模式的教程。 文章目录准备工作cluster模式client模式[了解]两种模式的区别 官方文档: http://spark.apache.org/docs/latest/running-on-yarn.html 准备...