工作中从Elasticsearch导出大批量数据到文件,因为Elasticsearch导出有限制,一次性最多导出10000条,虽然可以调大这个数值,但是对于Elasticsearch集群上千万甚至上亿条数据导出,这个参数调整就没什么意义了。
所以我使用了两种方式,一个是用Python模块elasticsearch的helpers.scan来导出数据,另一种使用elasticdump工具来导出数据
说一下这两种方式的体验
方式一: python helpers.scan
优点:在导出数据过程中可以对数据进行处理,对于Elasticsearch上存储的脏数据导出友好,速度还可以
缺点:在对Elasticsearch上规整的数据单纯导出时候,速度有点慢,因为查询的返回结果是unicode格式,还是个数组,输出到文件要稍微处理一下。
方式二:elasticdump
优点:因为是主要为Elasticsearch 备份功能实现的工具,在数据转移的功能上是挺丰富的,使用也简单,速度稍微快一点
缺点:导出过程中无法处理数据,所以最好导出规整的数据到文件。
测试
在导出8300万条数据大小46G到文件时,helpers.scan方式,对数据进行格式化,处理不规则字符,速度慢到无法忍受。
只导出数据时helpers.scan导出完数据要15个小时左右,使用elasticdump也没快多少,只用了13.5小时。
如果有人知道什么好方法,请告知。