如何在EMR中使用HDFS?

use*_*842 8 amazon-s3 hdfs amazon-emr emr

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

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

Ama*_*mar 6

您可以使用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:/// output

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

hadoop fs -get hdfs://output/part-r-0000 /home/ec2-user/firstPartOutputFile
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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