关于怎么高效地迁移数据到 hadoop

2017-11-02 13:43:41 +08:00
 ufo22940268

现在我想把几十 G 的信息从 elasticsearch 迁移到 hadoop. 用的方式是 spark + elasticsearch-hadoop

Demo 代码如下:

 $ ./bin/pyspark --driver-class-path=/path/to/elasticsearch-hadoop.jar
>>> conf = {"es.resource" : "index/type"}   # assume Elasticsearch is running on localhost defaults
>>> rdd = sc.newAPIHadoopRDD("org.elasticsearch.hadoop.mr.EsInputFormat",\
    "org.apache.hadoop.io.NullWritable", "org.elasticsearch.hadoop.mr.LinkedMapWritable", conf=conf)
>>> rdd.first()         # the result is a MapWritable that is converted to a Python dict
(u'Elasticsearch ID',
 {u'field1': True,
  u'field2': u'Some Text',
  u'field3': 12345})

按照这种方式能够正常地从 es 迁移数据,但是现在有一个问题,就是迁移的速度太慢了.


我想出了一个解决方案如下:

首先我通过日期创建 n 个迁移的任务,然后让他们同时在 spark 集群上执行,然后集群上的 core 数只够 k 个任务,那么就让(n-k)个任务自己在排队等待资源

有没有更好的解决方案呢?

3823 次点击
所在节点    Hadoop
8 条回复
gouchaoer
2017-11-02 14:17:27 +08:00
憨肚噗如果是用的 thrift 接口 insert 的数据然后跑 mapreduce 任务的话会很慢,如果你先把数据从 elastic 中导出来成为 txt 文件,然后再用 spark/hive 直接导入的话会很快,我也不知道为啥
hwsdien
2017-11-02 14:17:52 +08:00
还不如 dump 出来直接 cp 到 hadoop 上?
ufo22940268
2017-11-02 15:23:37 +08:00
@gouchaoer Save my day!
focusheart
2017-11-02 21:40:27 +08:00
可以直接 dump 成文件,hdfs dfs cp 命令复制上去也很快哦。https://github.com/taskrabbit/elasticsearch-dump
ufo22940268
2017-11-02 21:44:48 +08:00
这里个个都是人才,说话又好听,超喜欢在这里
mingweili0x
2017-11-03 04:08:23 +08:00
用 hadoop 自带的 distcp 可以啊。hadoop 会开一个专门的 mapreduce job 来拷你的数据,前提是你的数据放在了所有机器都能访问到的地方(比如 nfs 上)
yanyanlong
2017-11-03 10:40:21 +08:00
@gouchaoer 可能是大文件和小文件的区别,hadoop 更适合对大文件处理
pythonee
2018-09-04 10:56:49 +08:00
考虑增量数据吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/402917

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX