elasticsearch 使用BulkProcessor导入txt大文件
最近在学es,需要导入8亿条数据
手上有一个txt大约有8亿条数据的样子,文件有19G左右,一开始百度搜了下,基本都是重复文章,不过也根据写这些文章的大佬慢慢google到了一些方法。
先说下导入机器配置:
cpu: E5 1620V2
内存: 32G(分给es 12G)
硬盘:4x2T raid 0(io大概在600左右)
导入的几种方法:
1、bulk:
ES本地支持的批量导入方式,将json文件post到es进行处理。
将需要导入的数据先生成json文件,格式类似这种
#指定 index
{"index":{"_index":"suoy","_id":1}}
#字段
{"text_entry":"内容"}
{"index":{"_index":"suoy","_id":1}}
{"text_entry":"内容"}
{"index":{"_index":"suoy","_id":1}}
{"text_entry":"内容"}
...........然后使用curl提交
curl -H 'Content-Type: application/x-ndjson' -XPOST '127.0.0.1:9200/xxxxxxxx/doc/_bulk?pretty' --data-binary @out.json一开始我是尝试这种方法,用python将数据重新处理了下,生成的文件有48GB……,还花了3-5个小时的样子,导入的时候直接失败~后面,看了下说是文件大小尽量不能超过200MB???这样的话就要分割文件了,虽然可以shell脚本一个一个的提交小文件json,后面想想直接放弃了(嫌麻烦)…….
2、logstash:
ES官方的另一个产品,将数据文本转换为ES的数据源。
我的文本一行只有两个字段,用 “—-” 分割,花了点时间学logstash直接上手开干,但是导入速度只有9000条/s的样子,一个小时导了大概3200w条数据,导了16个小时大概导了5.2亿条数据,这速度完全不行啊,后面手贱不注意按了 Ctrl+c,嗯…..这下好了,不知道怎么断点续传,又得重新来……
我用的脚本如下,有懂的大佬能否告知下logstash有没有类似BulkProcessor储存到x条数据再执行Bulk的方法?



