1、Spark集成ElasticSearch的设计动机web
ElasticSearch 毫秒级的查询响应时间仍是很惊艳的。其优势有:编程
1. 优秀的全文检索能力架构
2. 高效的列式存储与查询能力框架
3. 数据分布式存储(Shard 分片)elasticsearch
相应的也存在一些缺点:分布式
1. 缺少优秀的SQL支持函数
2. 缺少水平扩展的Reduce(Merge)能力,现阶段的实现局限在单机oop
3. JSON格式的查询语言,缺少编程能力,难以实现很是复杂的数据加工,自定义函数(相似Hive的UDF等)性能
Spark 做为一个计算引擎,能够克服ES存在的这些缺点:优化
1. 良好的SQL支持
2. 强大的计算引擎,能够进行分布式Reduce
3. 支持自定义编程(采用原生API或者编写UDF等函数对SQL作加强)
因此在构建即席多维查询系统时,Spark 能够和ES取得良好的互补效果
2、Spark与ElasticSearch结合的架构和原理
ES-Hadoop无缝打通了ES和Hadoop两个很是优秀的框架,咱们既能够把HDFS的数据导入到ES里面作分析,也能够将es数据导出到HDFS上作备份,归档,其中值得一提的是ES-Hadoop全面的支持了Spark框架,其中包括Spark,Spark Streaming,Spark SQL,此外也支持Hive,Pig,Storm,Cascading,固然还有标准的MapReduce,不管用那一个框架集成ES,都是很是简洁的。最后还可使用Kibana提供的可视化的数据分析一条龙服务,很是棒的组合
整个数据流转图以下
而咱们今天要介绍的,就是使用ES-Hadoop里面的ES-Spark插件,来完成使用spark向ES里面大批量插入数据和加载数据。
3、集群的硬件配置
Spark集群含有3个节点,FEA-spk和Spark集群的交互采用yarn-client。
主机 |
cpu |
mem |
disk |
10.68.23.89 |
1200MHZ*8 |
50g |
400g |
10.68.23.90 |
1200MHZ*8 |
50g |
400g |
10.68.23.91 |
1200MHZ*8 |
50g |
400g |
4、写入elasticsearch的数据介绍
elasticsearch副本数量是2个,每个副本的大小是216.4g
数据的条数为88762914,字段的个数73个
5、FEA-spk写入ElasticSearch的原语实现
(1) 建立spk的链接
(2) 建立ElasticSearch的链接
(3) 加载数据到es中
数据的格式以下表所示
(4) 查看一下df1表的前十行
(5)将df1表的数据写回到ES里面,其中spark是index,people是type
因为数据量比较大,因此咱们选择后台运行
进入spark web界面,查看运行状况
咱们能够看到花费了2.3小时,若是对集群的资源和参数优化,时间可能会更短
6、Spark写回数据到ES的性能计算
每秒处理的数据条数=总条数/总时间=88762914/(2.5*60*60)=9863条
每条记录的大小=总大小/总条数=216.4*1024*1024k/88762914=3K
每秒能写多少兆=每秒处理的数据条数*每条记录的大小/1024=9863*3/1024=29M
7、FEA-spk结合ES适用的场景
不会使用Spark,想使用Spark分析存放在ES中的数据,把结果写入到ES里面,FEA-spk是一个不错的选择。