文档章节

spark on yarn 如何集成elasticsearch

九劫散仙
 九劫散仙
发布于 2017/04/11 16:37
字数 1116
阅读 44
收藏 1

随着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),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。

输入图片说明

© 著作权归作者所有

九劫散仙
粉丝 268
博文 175
码字总数 189625
作品 0
海淀
私信 提问
Spark2.x写入Elasticsearch的性能测试

一、Spark集成ElasticSearch的设计动机 ElasticSearch 毫秒级的查询响应时间还是很惊艳的。其优点有: 1. 优秀的全文检索能力 2. 高效的列式存储与查询能力 3. 数据分布式存储(Shard 分片) 相...

openfea
2017/10/27
335
0
Hadoop集群中增加与ElasticSearch连接的操作

在没有引入elasticsearch-hadoop-xxx.jar相应的Jar包时,的在Hive中执行ElasticSearch外部表操作,会报如下的异常: Exception in thread "main" java.io.IOException: Failed on local exce......

fenglibing
2018/05/28
0
0
大数据技术实践与应用

本期沙龙腾讯云联合快手带来大数据实践案例分享,聚焦在大数据技术实践与应用,比如基于spark构建PB级别云数仓、ElasticSearch产品架构与实践、yarn系统在快手的应用实践、云端大数据产品架构...

腾讯云开发者社区
08/08
1
0
优秀的数据工程师,怎么用 Spark 在 TiDB 上做 OLAP 分析

作者:RickyHuo 本文转载自公众号「大道至简bigdata」 原文链接:优秀的数据工程师,怎么用 Spark 在 TiDB 上做 OLAP 分析 TiDB 是一款定位于在线事务处理/在线分析处理的融合型数据库产品,...

TiDB
02/28
51
0
Apache Zeppelin 0.5.6-incubating 发布

Apache Zeppelin 0.5.6-incubating 发布,此版本更新内容如下: 新的后端支持: Spark up to 1.6.0 support Elasticsearch HiveInterpreter (with multiple configurations) Scalding (Local......

oschina
2016/01/25
993
1

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
525
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
28
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
15
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
40
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
50
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部