spark-sql(四)---读写elasticsearch数据
来源:互联网 发布:php会员卡系统源码 编辑:程序博客网 时间:2024/06/02 03:16
sparksql读写elasticsearch
sparksql将elasticsearch数据转换成RDD进行计算,测试下sparksql对elasticsearch的读和写的操作。
1环境
1.1软件环境
- hadoop 2.7.3
- spark 2.2
- elasticsearch 5.6.4
- jdk 1.8
1.2机器环境
1.3相关
需要下载spark-elasticsearch支持包
https://www.elastic.co/downloads/past-releases/elasticsearch-apache-hadoop-5-6-5
将里面的elasticsearch-spark-20_2.11-5.6.4.jar放到spark/jars下面。
2.写入操作
- 启动sparksql
sbin/start-thriftserver.sh --master yarn \--driver-cores 2 --driver-memory 2g \--executor-cores 13 --executor-memory 8g \--num-executors 3 --conf spark.sql.warehouse.dir=hdfs://node11:9000/user/hive/warehouse
- sparksql中创建textfile表,并导入测试数据
导入的文本数据2.2G大小,变为3个字段为6.6G
##创建textfile表create table test_txt1 (f1 string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\r' STORED AS TEXTFILE;##加载测试数据load data local inpath '/opt/pass.txt' into table test_txt1;
- 初始化一个es index
es相关可看这里,
http://blog.csdn.net/dante_003/article/details/78563303
http://blog.csdn.net/dante_003/article/details/78501066
并向里面导入数据,不导入数据的话,在sparksql里面创建es临时表会出现资源不存在的错误信息。
PUT http://node11:9200/es_test1/testtype/1?{"f1":"test","f2":"test","f3":"test",}##curl命令curl -XPUT "http://node11:9200/test_es1/testtype/1" -d '{"f1":"test"}'
- sparksql操作
# 创建elasticsearch临时表CREATE TEMPORARY TABLE myIndex1 USING org.elasticsearch.spark.sql OPTIONS ( resource 'test_es1/testtype', nodes 'http://node11:9200,http://node19:9200');# 向其中导入数据insert into myIndex1 select * from test_txt1;
任务进行中的截图
spark任务的详细信息
硬件监控
任务结束后的截图
es-head信息
spark任务信息
由此可见,使用sparksql向es中写入数据的时候,会占用大量的CPU来创建索引,一个字符串字段建立一个索引,此测试环境中写入速度为500KB/S,4.6万条/S
数据增长7倍(不算副本),原始数据2.2G,导入到es中变为15.6G
3.读操作
#内连接查询,测试从es读取速度select count(*) from test_txt2 t1,myIndex1 t2 where t1=t2;
任务进行中的截图
spark任务信息
spark任务详细信息
硬件监控
PS:hadoop、spark用的都是hostname,elasticsearch配置以及sparksql中指定的主机用的也都是hostname,没有用IP。
stage8是加载textfile的数据到内存,stage9是加载elasticsearch的数据,stage9加载数据的本地级别为“RACK_LOCAL”而不是“NODE_LOCAL”,这时观测流量和硬盘读写情况,网络一直有流量,可以判断sparksql从elasticsearch拿数据并没有遵从”本地数据本地计算”的分布式原则,所以这种计算速度低下。
4.结论
- 写操作
- 会占用大量cpu创建es的索引
- 数据体积是原始数据的7倍(不算副本)
- 读操作
- 即使spark的执行节点在es的数据节点上,也不会加载本地数据计算,不是”本地数据本地计算”
5.相关文档参考
- https://www.elastic.co/guide/en/elasticsearch/hadoop/current/spark.html
- spark-sql(四)---读写elasticsearch数据
- Spark SQL通过JDBC连接MySQL读写数据
- spark中读取elasticsearch数据
- Elasticsearch(四)【Elasticsearch.Net之Post数据】
- spark-sql与elasticsearch整合&测试
- spark-sql与elasticsearch整合&测试
- Spark SQL 集成ElasticSearch的案例实战
- spark-sql与elasticsearch整合&测试
- 使用spark访问elasticsearch的数据
- spark streaming 批量索引数据到 elasticsearch
- Spark Streaming 读取Kafka数据写入Elasticsearch
- 使用Hive读写ElasticSearch中的数据
- Spark(四): Spark-sql 读hbase
- Spark(四): Spark-sql 读hbase
- Spark SQL通过JDBC连接MySQL读写数据实例(比较过时了)
- elasticsearch详解(四)——elasticsearch数据的基本操作
- elasticsearch Getting Started (四)-修改数据
- [日志处理工作之九]整合Spark SQL和Elasticsearch
- 【Scikit-Learn 中文文档】36 随机投影
- from表单提交前的JS检测
- Linux system 火墙服务
- 蓝桥杯 算法训练 出现次数最多的整数
- Java集合框架-2
- spark-sql(四)---读写elasticsearch数据
- javascript基础知识整理2
- 深入理解Java:注解(Annotation)自定义注解入门
- 【Scikit-Learn 中文文档】37 内核近似
- AutoCompleteTextView中的弹出框实现模糊查询
- python3:对list中每个元素进行处理
- Hello World
- ListView适配器
- class 与 public class的区别