文档章节

使用ES-Hadoop插件结合spark向es插入数据

九劫散仙
 九劫散仙
发布于 2017/05/05 17:22
字数 847
阅读 173
收藏 1

上篇文章简单介绍了ES-Hadoop插件的功能和使用场景,本篇就来看下如何使用ES-Hadoop里面的ES-Spark插件,来完成使用spark想es里面大批量插入数据。

这里说明下ES-Hadoop是一个fat的maven依赖,也就是引入这个包会导入许多额外的依赖,不建议这么搞,除非是测试为了方便用的,实际情况是ES也单独提供了每个不同框架的mini包,比如说只使用spark那么就可以单独引入es-spark的包,而不需要使用fat包因为它会附加引入其他的包依赖,如果使用hive那就单独引入es-hive的包即可。这里面唯一需要注意的就是注意版本问题,不同的框架的版本和es-hadoop的组件都有对应的版本,使用不当会报异常,具体的情况,请参考官网文档:

https://www.elastic.co/guide/en/elasticsearch/hadoop/current/install.html

下面看下如何使用es-spark读写es的数据:

spark版本:2.1.0

scala版本:2.11.8

es版本:2.3.4

索引要引入下面的依赖pom才行

      <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch-spark-20_2.11</artifactId>
            <version>5.3.2</version>
        </dependency>

这里为了快速体验,所以直接使用spark的local模式测试,如果要放到正式环境运行,切记把local模式的代码去掉。

先看下向es里面插入数据的代码,非常简单:

    val conf=new SparkConf()
    conf.setMaster("local[1]")//指定local模式
    conf.setAppName("spark to es")//设置任务名
    conf.set("es.index.auto.create","true")//开启自动创建索引
    conf.set("es.nodes","192.168.201.5,192.168.201.6")//es的节点,多个用逗号分隔
    conf.set("es.port","9200")//端口号
    val sc=new SparkContext(conf)
    val data1 = Map("id" -> 1, "name" -> "tom", "age" -> 19)//第一条数据
    val data2 = Map("id" -> 2, "name" -> "john","age"->25)//第二条数据
    sc.makeRDD(Seq(data1, data2)).saveToEs("spark/docs")//添加到索引里面
    println("存储成功!")
    sc.stop()

然后我们看下如何读取es里面的数据:

    val conf=new SparkConf()
    conf.setMaster("local[1]")//指定local模式
    conf.setAppName("spark to es")//任务名
    conf.set("es.nodes","192.168.201.5,192.168.201.6")//es节点多个逗号分隔
    conf.set("es.port","9200")
    val sc=new SparkContext(conf)
    val ds=sc.esRDD("stu2017-05-03/stu")//读取数据到spark的rdd里面
    log.info("stu2017-05-03数据总量:"+ds.count())//统计数量
    sc.stop()

从上面的代码量我们可以看到非常少,这是由于es-spark底层已经帮我们封装好了相关的代码,所以用起来非常简单,围绕的核心还是rdd,无论是写入es,还是从es读取数据都是通过spark的rdd做中转的,我们只要把我们的目标数据给转成RDD或者DataFrame就能非常方便的与es对接了。

上面的代码使用spark的core来完成的,此外我门还可以使用spark sql或者spark streaming来与es对接,这个以后用到的时候再总结分享,最后使用spark操作es的时候我门还可以有非常多的配置参数设置,本例子中只使用了部分的参数,关于详细的配置参数 大家可以看下面的这个类:

org.elasticsearch.hadoop.cfg.ConfigurationOptions

官网文档:

https://www.elastic.co/guide/en/elasticsearch/hadoop/current/reference.html

有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。

输入图片说明

© 著作权归作者所有

共有 人打赏支持
九劫散仙
粉丝 266
博文 175
码字总数 189625
作品 0
海淀
私信 提问
Spark2.x写入Elasticsearch的性能测试

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

openfea
2017/10/27
0
0
【转】在E-MapReduce中使用 ES-Hadoop

(本文转自E-MapReduce产品文档,详情请访问:阿里云E-MapReduce产品文档。) ES-Hadoop 是 Elasticsearch(ES) 推出的专门用于对接 Hadoop 生态的工具,使得用户可以使用 Mapreduce(MR)、Spark...

汐林
2018/10/16
0
0
腾讯云EMR&Elasticsearch中使用ES-Hadoop之MR&Hive篇

在这篇文章中: 资源准备 数据准备 ES-Hadoop关键配置项说明 在hive中创建ES外部表 通过MapReduce任务向ES写入数据 结语 ES-Hadoop 是 Elastic 官方推出的一个用于对接 Hadoop 生态的工具,使...

ethanzhang
2018/12/11
0
0
Spark2.x与ElasticSearch的完美结合

ElasticSearch(简称ES)是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RestFul web接口。ElasticSearch是用Java开发的,并作为Apache许可条款下的开放源...

openfea
2017/10/19
0
0
在CloudEdge中,通过ES实践解决ElasticLog产品问题

在CloudEdge中,通过ES实践解决ElasticLog产品问题 2018 Elastic Meetup南京交流会,由赵伟带来以“ElasticLog with ES in CloudEdge”为题的演讲。本文首先介绍了CloudEdge与ElasticLog是什...

云迹九州
2018/07/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

双亲委派模型

双亲委派模型的工作流程是: 如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到...

无精疯
9分钟前
0
0
原 分布式项目(三)CoAp

上回说到Web manage的构建,完成的对产品,物模型中的数据,设备数据,并把对应的数据缓存到redis中,接下来就开始coap客户端和服务器的构建。 coap 现阶段PC网络交互中较多的是使用tcp和htt...

lelinked
9分钟前
0
0
next.js 提示 chunk styles [mini-css-extract-plugin]

会出现css 导入警告 导入两个插件 并在next.config.js 配置 yarn add webpack-filter-warnings-pluginyarn add mini-css-extract-plugin const FilterWarningsPlugin = require('webpack-......

一箭落旄头
49分钟前
2
0
AWS的自动部署codeploy 应用程序规范文件

codedeploy应用程序的规范文件 ECS平台上的应用规范文件: AppSpec file也可以是 YAML 或 JSON 格式的,可以直接写入控制台内的编辑器内。 AppSpec file用于指定: 用于将流量定向到新任务集...

守护-创造
56分钟前
1
0
Confluence 6 超过当前许可证期限进行升级

这个页面将会对你在进行 Confluence 升级的时候超过了当前许可证的期限进行升级的情况。 许可证警告 在升级的过程中,你将会在 Confluence 的应用程序日志(log file)中看到类似下面的错误提...

honeymoose
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部