使用Logstash索引Elasticsearch中的大型宽JSON文件时避免OutOfMemoryError

时间:2015-12-22 15:26:30

标签: json elasticsearch logstash

我试图找到一种方法来有效地将一些大型嵌套JSON文件索引到Elasticsearch中,但我在避免使用OutOfMemoryError时遇到了麻烦。

使用我不太理想的设置(Win7,8GB RAM,旋转硬盘)我可以在同一个.conf中索引5.4GB,4.3GB和2.3GB文件。我还需要索引一个27GB和80GB的文件。我的所有文件都有大约相同的行数(~40,000),因此较大的文件具有非常宽的行。自发布here以来,我决定将这些较大的文件拆分为< 6GB文件(因此80GB文件现在分成17个单独的文件)。但是,当我只为一个分割文件编制索引时,我收到此错误:

IndexFailedEngineException[Index failed for [subject#84142]]; nested: OutOfMemoryError[Java heap space];

即使在最小的分割文件(~2.6GB)中也会发生这种情况。因此,我得出结论,这个问题与行的宽度有关。我所有文档中的每一行都有一个嵌套结构,如下例所示:

{"id":2,"file3":[{"id":2,"time":"2094-05-18 01:28:23","event2":"RT4"} {"id":2,"time":"2094-05-18 04:23:53","event2":"W3"}]}

使用20 + GB文件,每行有数千个JSON文档。我不能减少行宽并保持我需要的结构。

我尝试了许多设置来防止OutOfMemoryError没有运气: export LS_HEAP_SIZE=4g elasticsearch.yml:index.merge.scheduler.max_thread_count : 1index.refresh_interval : -1

PUT /_cluster/settings
{
    "persistent" : {
        "indices.store.throttle.max_bytes_per_sec" : "1mb"
    }
}

如何更改Logstash设置,以便它可以处理大行的这些文件?有没有办法减慢被索引的项目数量?

0 个答案:

没有答案