Elasticsearch数据二进制文件内存不足

Tai*_*han 1 memory elasticsearch

我试图上传一个800GB的文件到elasticsearch但我不断得到一个内存错误,告诉我数据二进制文件是内存不足.我的系统上有64GB的RAM和3TB的存储空间

curl -XPOST 'http://localhost:9200/carrier/doc/1/_bulk' --data-binary @carrier.json
Run Code Online (Sandbox Code Playgroud)

我想知道配置文件中是否有设置增加内存量,以便我可以上传到他的文件

谢谢

Val*_*Val 5

一次性发送800GB是相当多的,ES必须将所有内容放入内存才能处理它,因此对于你拥有的内存量来说可能太大了.

解决此问题的一种方法是将文件拆分为多个,然后逐个发送.您可以使用下面的小shell脚本来实现它.

#!/bin/sh

# split the main file into files containing 10,000 lines max
split -l 10000 -a 10 carrier.json /tmp/carrier_bulk

# send each split file
BULK_FILES=/tmp/carrier_bulk*
for f in $BULK_FILES; do
    curl -s -XPOST http://localhost:9200/_bulk --data-binary @$f
done
Run Code Online (Sandbox Code Playgroud)

UPDATE

如果你想要解释ES响应,你可以通过将响应传递给一个小的python单行来轻松完成,如下所示:

curl -s -XPOST $ES_HOST/_bulk --data-binary @$f | python -c 'import json,sys;obj=json.load(sys.stdin);print "    <- Took %s ms with errors: %s" % (obj["took"], obj["errors"])';
Run Code Online (Sandbox Code Playgroud)