2014-03-12 29 views
5

我覺得將EMR連接到Amazon S3是非常不可靠的,因爲它依賴於網絡速度。如何在EMR中使用HDFS?

我只能找到描述S3位置的鏈接。我想用HDFS使用EMR - 我該如何做?

回答

5

您可以使用hdfs輸入和輸出路徑,如hdfs:///input/

假設你有添加到集羣中的工作如下:

紅寶石彈性MapReduce的-j $ jobflow --jar S3:/my-jar-location/myjar.jar --arg S3:/輸入 --arg S3:/輸出

相反,你可以擁有它,如果你需要它是在HDFS如下:

紅寶石彈性MapReduce的-j $ jobflow --jar S3:/我的-jar-location/myjar.jar --arg hdfs:///輸入 --arg hdfs:///輸出

爲了與EMR集羣上的HDFS進行交互,請將ssh與主節點交互並執行常規的HDFS命令。 例如查看輸出文件,可以按如下操作:

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

但如果你有短暫集羣工作,利用原位HDFS氣餒,當集羣被終止,您會丟失數據。

另外我有基準證明使用S3或HDFS不會提供太多的性能差異。 對於〜200GB的工作量: - 作業得成品22秒S3作爲輸入源 - 工作得成品在20秒與HDFS作爲輸入源

EMR是超級優化,以從/向讀取/寫入數據S3。

對於中間步驟的輸出寫入hdfs是最好的。 所以說,如果你在你的管道3步,那麼你可能有輸入/輸出如下:

  • 第1步:從S3輸入,輸出的HDFS
  • 第2步:輸入由HDFS在HDFS
  • 輸出
  • 步驟3:從HDFS輸入,輸出在S3
+0

每個回合後,我得到了很多的輸出文件,我怎麼能貓他們到1個文件進行下一步驟之前, ?另外,我怎樣才能改變亞馬遜emr的S3/HDFS塊的大小?我使用控制檯,我應該移動到亞馬遜cli? – member555