如何在EMR中使用HDFS?

时间:2014-03-12 06:44:49

标签: amazon-s3 hdfs emr amazon-emr

我觉得将EMR连接到Amazon S3是非常不可靠的,因为它依赖于网络速度。

我只能找到描述S3位置的链接。我想将EMR用于HDFS - 我该怎么做?

1 个答案:

答案 0 :(得分:5)

您可以使用hdfs输入和输出路径,例如hdfs:///input/

假设您已将作业添加到群集,如下所示:

ruby​​ elastic-mapreduce -j $ jobflow --jar s3:/my-jar-location/myjar.jar --arg s3:/ input --arg s3:/ output

相反,如果你需要它在hdfs上,你可以如下所示:

ruby​​ elastic-mapreduce -j $ jobflow --jar s3:/my-jar-location/myjar.jar --arg hdfs:/// input --arg hdfs: ///输出

为了与EMR集群上的HDFS进行交互,ssh到主节点并执行常规HDFS命令。 例如,要查看输出文件,您可以执行以下操作:

hadoop fs -get hdfs://output/part-r-0000 /home/ec2-user/firstPartOutputFile

但是如果您正在使用瞬态群集,则不鼓励使用原位HDFS,因为当群集终止时您将丢失数据。

我也有基准测试证明使用S3或HDFS并没有提供太多的性能差异。 对于~200GB的工作量:   - 作为输入源,作业在22秒内完成   - 使用HDFS作为输入源,作业在20秒内完成

EMR经过超级优化,可以从/向S3读取/写入数据。

对于中间步骤,输出写入hdfs是最好的。 因此,如果您的管道中有3个步骤,那么您可能具有如下输入/输出:

  • 第1步:从S3输入,在HDFS中输出
  • 步骤2:HDFS输入,HDFS输出
  • 步骤3:从HDFS输入,在S3输出