【问题标题】:Elasticsearch data binary ran out of memoryElasticsearch 数据二进制文件内存不足
【发布时间】:2017-02-12 01:48:53
【问题描述】:

我正在尝试将 800GB 文件上传到 elasticsearch,但我不断收到内存错误,告诉我数据二进制文件内存不足。我的系统上有 64GB 的 RAM 和 3TB 的存储空间

curl -XPOST 'http://localhost:9200/carrier/doc/1/_bulk' --data-binary @carrier.json

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

谢谢

【问题讨论】:

  • curl: 选项 --data-binary: 内存不足 curl: 尝试 'curl --help' 或 'curl --manual' 了解更多信息
  • 你有 GB 在那里。这不是拼写错误(比如 MB 而不是 GB)?
  • 不,这是一个 800 GB 的 json 大文件
  • 您能否展示一下您的carrier.json 文件的简短摘录?

标签: memory elasticsearch


【解决方案1】:

一次发送 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

更新

如果你想解释 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"])';

【讨论】:

  • 非常好的例子!是否可以通过任何简单的方式专门输出错误(当内存用完时,即使拆分为 10000 行)?默认情况下,ES 返回完整详细的结果输出,因此无法搜索错误。
  • @GabeHiemstra 当然,我已经用一个例子更新了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
相关资源
最近更新 更多