如何批量插入600MB大json文件到elasticsearch?

时间:2018-08-02 07:33:26

标签: json node.js elasticsearch npm kibana

我正在尝试将600MB Json文件(将来可能会扩大)插入elasticsearch。 但是,我遇到了以下错误,

Error: "toString()" failed

我正在使用stream-json npm但没有运气:( 做这个的最好方式是什么? 我正在考虑分块,但是如果有更好的方法,那将很棒

var makeBulk = function(csList, callback){
  const pipeline = fs.createReadStream('./CombinedServices_IBC.json').pipe(StreamValues.withParser());
  while()
  pipeline.on('data', data => {
    for(var index in data.value.features){
      bulk.push(
        { index: {_index: 'combinedservices1', _type: '_doc', _id: data.value.features[index].properties.OBJECTID } },
        {
          'geometry': data.value.features[index].geometry,
          'properties': data.value.features[index].properties
        }
      );
    }
    callback(bulk);

  });

}

2 个答案:

答案 0 :(得分:0)

有一个用于这种用例的工具Elasticdump(https://github.com/taskrabbit/elasticsearch-dump

安装elasticsearch-dump

npm install elasticdump -g
elasticdump

将Json导入ES

elasticdump \
  --input=./CombinedServices_IBC.json \
  --output=http://127.0.0.1:9200/my_index \
  --type=alias

答案 1 :(得分:0)

不要插入600MB的空间,默认bulk queue最多可以保留200个inn JVM Heap Space的空间-假设每个空间都是600MB,那么您将得到OOM和GC问题

请参阅https://www.elastic.co/guide/en/elasticsearch/guide/current/bulk.html#_how_big_is_too_big;示例logstash elasticsearch输出插件最多发送20Mb