有一些大型数据集(25gb+,可在 Internet 上下载)我想使用 Amazon EMR 进行尝试。不是将数据集下载到我自己的计算机上,然后将它们重新上传到亚马逊,将数据集上传到亚马逊的最佳方法是什么?
我是否要启动 EC2 实例,从实例中将数据集(使用 wget)下载到 S3,然后在运行 EMR 作业时访问 S3?(我之前没有使用过亚马逊的云基础设施,所以不确定我刚才所说的是否有意义。)
有一些大型数据集(25gb+,可在 Internet 上下载)我想使用 Amazon EMR 进行尝试。不是将数据集下载到我自己的计算机上,然后将它们重新上传到亚马逊,将数据集上传到亚马逊的最佳方法是什么?
我是否要启动 EC2 实例,从实例中将数据集(使用 wget)下载到 S3,然后在运行 EMR 作业时访问 S3?(我之前没有使用过亚马逊的云基础设施,所以不确定我刚才所说的是否有意义。)
我推荐以下...
启动您的 EMR 集群
elastic-mapreduce --create --alive --other-options-here
登录到主节点并从那里下载数据
wget http://blah/data
复制到 HDFS
hadoop fs -copyFromLocal data /data
没有真正的理由将原始数据集通过 S3。如果要保留结果,可以在关闭集群之前将它们移动到 S3。
如果数据集由多个文件表示,您可以使用集群在机器上并行下载它。如果是这种情况,请告诉我,我将引导您完成。
垫
如果您刚刚开始尝试 EMR,我猜您希望在 s3 上使用这些,因此您不必启动交互式 Hadoop 会话(而是通过 AWS 控制台使用 EMR 向导)。
最好的方法是在与 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 将是免费的。
我不确定,但对我来说,hadoop 似乎应该能够直接从您的来源下载文件。
只需输入http://blah/data作为您的输入,其余的由 hadoop 完成。它当然可以与 s3 一起使用,为什么它不能与 http 一起使用?