使用Spark批量插入时,Elasticsearch索引编制速度非常慢

时间:2018-08-02 06:18:27

标签: apache-spark elasticsearch apache-spark-sql

我有一个应用程序,在其中将spark数据框放在elasticsearch上

使用以下代码

inputDF.write.format("org.elasticsearch.spark.sql")
          .mode(SaveMode.Append)
          .option("es.resource", "{date}/" + type).save()

具有这些属性

spark.es.batch.size.bytes=5000000
spark.es.batch.size.entries=5000
spark.es.batch.write.refresh=false

在一些做相同工作并推送到Elasticsearch的机器上,我有多个独立Spark提交实例(100-150)。

在Elasticsearch方面,我有一个主节点和9个数据节点,它们具有1TB的容量和足够的RAM(15 GB-64GB)

我为索引创建默认映射 使用这些参数

"number_of_shards": "45",
"refresh_interval": "-1",
"number_of_replicas": "0"

以下是特定索引的统计信息

"total" : {
      "docs" : {
        "count" : 2083251258,
        "deleted" : 0
      },
      "store" : {
        "size_in_bytes" : 1814616254253,
        "throttle_time_in_millis" : 0
      },
      "indexing" : {
        "index_total" : 1703849459,
        "index_time_in_millis" : 739162810,
        "index_current" : 0,
        "index_failed" : 0,
        "delete_total" : 0,
        "delete_time_in_millis" : 0,
        "delete_current" : 0,
        "noop_update_total" : 0,
        "is_throttled" : false,
        "throttle_time_in_millis" : 0
      }
}

看起来索引速率仅为每秒约2k。 另外,我不断收到失败条目的错误,像这样

Could not write all entries [99/347072] (maybe ES was overloaded?).

如何快速无误地插入文档?

0 个答案:

没有答案