首页 > 解决方案 > 限制从 Apache Spark 写入 ES

问题描述

在我们的项目中,我们使用 Apache Spark 写入 ES。我们运行多个并行写入 ES 的 spark 作业。我们正在处理的数据量太大,导致写入吞吐量高达约 5K 写入/秒。

我们希望限制我们的 ES 写入,以将其降低到 500 到 1000 写入/秒的范围。我们遇到过类似的 ES 配置es.batch.size.byteses.batch.size.entries但我们不确定这些配置如何与 Apache Spark 一起使用。

标签: apache-sparkelasticsearchthrottling

解决方案


在 Spark 中使用 重新分区您的数据,或者如果您要降低分区数量repartition()则更可取的是,这是一种限制对 ES 的索引速率的简单方法。coalesce()

如果要在 pyspark 中设置属性

esconf={}
esconf["es.mapping.id"] = "_id"
esconf["es.nodes"] = "localhost"
esconf["es.port"] = "9200"
esconf["es.batch.size.bytes"] = "1000000" //default 1mb for bulk request
esconf["es.batch.size.entries"] = "1000" //default 1000 for bulk request
df.write.format("org.elasticsearch.spark.sql").options(**esconf).mode("append").save("index_name")

注意:请注意,批量大小和条目是按任务实例分配的。始终乘以 Hadoop 作业中的任务数,以获得运行时到达 Elasticsearch 的总批量大小/条目。这就是您获得 5K 写入/秒的原因


推荐阅读