我试图找到一种方法来有效地将一些大型嵌套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 : 1
,index.refresh_interval : -1
PUT /_cluster/settings
{
"persistent" : {
"indices.store.throttle.max_bytes_per_sec" : "1mb"
}
}
如何更改Logstash设置,以便它可以处理大行的这些文件?有没有办法减慢被索引的项目数量?