我觉得将EMR连接到Amazon S3是非常不可靠的,因为它依赖于网络速度。
我只能找到描述S3位置的链接。我想将EMR用于HDFS - 我该怎么做?
答案 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个步骤,那么您可能具有如下输入/输出: