【发布时间】:2018-03-30 12:17:43
【问题描述】:
使用 spark java 对 elasticsearch 的写入次数很少。
这里是配置
ES集群使用13.xlarge机器
4 instances each have 4 processors.
Set refresh interval to -1 and replications to '0' and other basic
configurations required for better writing.
火花:
2 节点 EMR 集群与
2 Core instances
- 8 vCPU, 16 GiB memory, EBS only storage
- EBS Storage:1000 GiB
1 Master node
- 1 vCPU, 3.8 GiB memory, 410 SSD GB storage
ES 索引在映射中定义了 16 个分片。
运行作业时有以下配置,
executor-memory - 8g
spark.executor.instances=2
spark.executor.cores=4
并使用
es.batch.size.bytes - 6MB
es.batch.size.entries - 10000
es.batch.write.refresh - false
使用此配置,我尝试加载 100 万个文档(每个文档的大小为 1300 字节),因此每个 ES 节点加载 500 个记录/文档。
在火花日志中看到每个任务
-1116 bytes result sent to driver
火花代码
JavaRDD<String> javaRDD = jsc.textFile("<S3 Path>");
JavaEsSpark.saveJsonToEs(javaRDD,"<Index name>");
此外,当我查看 ES 集群中的网络内图时,它非常低,我看到 EMR 没有通过网络发送大量数据。有没有办法告诉 Spark 发送正确数量的数据以加快写入速度?
或
还有其他我想调整的配置吗? 因为我看到每个 es 实例每秒 500 个文档较低。有人可以指导一下这个设置缺少什么来提高我的 es 写入性能
提前致谢
【问题讨论】:
-
在你的s3目录下,你是读取单个文件,还是读取多个文件?
-
使用很多文件
标签: apache-spark elasticsearch elasticsearch-hadoop elasticsearch-spark