gpt4 book ai didi

apache-spark - Spark + Elastic搜索写入性能问题

转载 作者:行者123 更新时间:2023-12-03 00:03:27 24 4
gpt4 key购买 nike

使用Spark Java看到对Elasticsearch的写入次数低。

这是配置

将13.xlarge机器用于ES群集

 4 instances each have 4 processors.
Set refresh interval to -1 and replications to '0' and other basic
configurations required for better writing.

Spark :

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

Spark 代码
    JavaRDD<String> javaRDD = jsc.textFile("<S3 Path>");
JavaEsSpark.saveJsonToEs(javaRDD,"<Index name>");

另外,当我查看ES群集中​​的In-Network图时,它非常低,而且我看到EMR没有通过网络发送大量数据。有没有一种方法可以告诉Spark发送正确数量的数据以加快写入速度?

要么

还有其他我想调整的配置吗?
原因我看到每个实例每秒500docs的速度较低。有人可以指导此设置缺少什么以提高我的ES写入性能

提前致谢

最佳答案

您可能在这里遇到问题。spark.executor.instances=2
您仅限于两个执行程序,根据群集配置,您可以有四个执行程序。我将其更改为4或更大。我也可以尝试executor-memory = 1500M,cores = 1,instances = 16。我想在内存中留一点开销,这就是为什么我从2G下降到1.5G(但是您不能做1.5G,所以我们必须做1500M)的原因。如果您通过执行程序进行连接,则可以提高性能。

需要一些代码来进一步调试。我想知道您是否仅在驱动程序中而不是在工作节点中连接到 flex 搜索。这意味着您只会获得一个连接,而不是每个执行器一个连接。

关于apache-spark - Spark + Elastic搜索写入性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46813305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com