将大型数据集导入亚马逊弹性mapreduce

时间:2011-04-27 06:04:06

标签: amazon-s3 amazon-ec2 amazon-emr

我想使用Amazon EMR来播放一些大型数据集(25gb +,可在Internet上下载)。而不是将数据集下载到我自己的计算机上,然后将它们重新上传到亚马逊上,将数据集放到亚马逊上的最佳方法是什么?

我是否启动EC2实例,从实例中将数据集(使用wget)下载到S3中,然后在运行EMR作业时访问S3? (我之前没有使用亚马逊的云基础设施,所以不确定我刚刚说过的是否有意义。)

3 个答案:

答案 0 :(得分:4)

我推荐以下内容......

  1. 启动您的EMR群集

    elastic-mapreduce --create --alive --other-options-here

  2. 登录主节点并从那里下载数据

    wget http://blah/data

  3. 复制到HDFS

    hadoop fs -copyFromLocal data /data

  4. 没有理由将原始数据集放入S3。如果要保留结果,可以在关闭群集之前将其移动到S3。

    如果数据集由多个文件表示,您可以使用群集在计算机上并行下载它。如果是这种情况,请告诉我,我会引导您完成它。

答案 1 :(得分:1)

如果你刚开始尝试使用EMR,我猜你在s3上想要这些,所以你不必启动交互式Hadoop会话(而是通过AWS控制台使用EMR向导)。 / p>

最好的方法是在与S3存储桶相同的区域中启动微实例,使用wget下载到该计算机,然后使用类似s3cmd的内容(您可能需要在实例上安装) )。在Ubuntu上:

wget http://example.com/mydataset dataset
sudo apt-get install s3cmd 
s3cmd --configure
s3cmd put dataset s3://mybucket/

您希望实例和s3存储桶位于同一区域的原因是为了避免额外的数据传输费用。虽然您将为wget的实例收取绑定带宽费用,但是到S3的xfer将是免费的。

答案 2 :(得分:0)

我不确定,但对我来说似乎hadoop应该可以直接从你的来源下载文件。

只需输入http://blah/data作为输入,hadoop应该完成剩下的工作。它肯定适用于s3,为什么它不适用于http?