将数据输入和输出Elastic MapReduce HDFS

时间:2011-10-09 05:42:53

标签: hadoop elastic-map-reduce

我编写了一个Hadoop程序,它需要HDFS中的某个布局,然后我需要从HDFS中获取文件。它适用于我的单节点Hadoop设置,我很想让它在Elastic MapReduce中的10个节点上工作。

我一直在做的是这样的事情:

./elastic-mapreduce --create --alive
JOBID="j-XXX" # output from creation
./elastic-mapreduce -j $JOBID --ssh "hadoop fs -cp s3://bucket-id/XXX /XXX"
./elastic-mapreduce -j $JOBID --jar s3://bucket-id/jars/hdeploy.jar --main-class com.ranjan.HadoopMain --arg /XXX

这是异步的,但是当作业完成后,我可以这样做

./elastic-mapreduce -j $JOBID --ssh "hadoop fs -cp /XXX s3://bucket-id/XXX-output"
./elastic-mapreduce -j $JOBID --terminate

所以虽然这个排序有效,但它很笨重而不是我想要的。有更干净的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:9)

您可以使用distcp将文件复制为mapreduce作业

# download from s3
$ hadoop distcp s3://bucket/path/on/s3/ /target/path/on/hdfs/
# upload to s3
$ hadoop distcp /source/path/on/hdfs/ s3://bucket/path/on/s3/

这使得整个群集可以从s3并行复制。

(注意:每条路径上的尾部斜杠对于从目录复制到目录很重要)

答案 1 :(得分:0)

@ mat-kelcey,命令distcp是否期望S3中的文件具有最低权限级别?出于某种原因,我必须将文件的权限级别设置为“打开/下载”和“查看每个人的权限”,以便能够从引导程序或步骤脚本中访问文件。