限制apache spark对es的写入

izkcnapc  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(538)

在我们的项目中,我们使用apachespark来编写es。我们运行多个spark作业,这些作业并行地向es写入数据。我们处理的数据量太大,导致写入吞吐量高达~5k写入/秒。
我们希望限制es写入,以便将其降低到500到1000写入/秒的范围。我们遇到过这样的情况 es.batch.size.bytes 以及 es.batch.size.entries 但我们不确定这些配置如何与apachespark一起工作。

rjee0c15

rjee0c151#

在spark中使用 repartition() ,或更优选 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写/秒

相关问题