2011-09-20 84 views
23

我跑了蜂巢EMR,01​​,需要一些文件複製到所有EMR實例。我的理解就是將文件複製到本地文件系統中的其他每個節點上如何將文件從S3複製到Amazon EMR HDFS?

的一種方法是將文件複製到HDFS,但是我還沒有找到一個簡單的方法來從S3複製到挺直HDFS。

什麼是最好的方式去做這件事?

回答

26

做到這一點的最好辦法是使用Hadoop的DistCp使用命令。實施例(在集羣節點中的一個):

% ${HADOOP_HOME}/bin/hadoop distcp s3n://mybucket/myfile /root/myfile

這將在HDFS從名爲mybucket S3桶複製稱爲MYFILE文件/root/myfile。請注意,這個例子假設你在「native」模式下使用S3文件系統;這意味着Hadoop將S3中的每個對象視爲一個文件。如果你在塊模式下使用S3,你可以在上面的例子中用s3替換s3n。有關本機S3和塊模式之間的區別的詳細信息,以及上面的例子的闡述,見http://wiki.apache.org/hadoop/AmazonS3

我發現DistCp使用是一個非常強大的工具。除了能夠使用它來大量文件複製進出S3的,也可以進行快速集羣,以集羣方式複製大型數據集。 distcp不是通過單個節點來推送所有數據,而是使用多個並行的節點來執行傳輸。這種傳輸大量數據的時候,比起復制一切本地文件系統作爲中介的替代顯着,使DistCp使用速度更快。

+0

使用distcp將s3移動到hdfs時仍然出現一些錯誤。在我的情況下,我想移動非常大的文件(超過300GB)移動40或50%後,開始形式開始不知道爲什麼。任何想法?? – rht

3

請注意,根據亞馬遜,在http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/FileSystemConfig.html「Amazon Elastic MapReduce - 文件系統配置」中,S3 Block FileSystem已被棄用,其URI前綴現在是s3bfs://並且他們特別不鼓勵使用它,因爲「它可以觸發競爭條件可能會導致你的工作流失敗「。

根據同一頁,HDFS現在是S3下的「一流」文件系統,雖然它是短暫的(當Hadoop作業結束時會消失)。

15

現在亞馬遜本身有一個通過distcp實現的包裝,即:s3distcp

S3DistCp是DistCp使用經過優化與 亞馬遜網絡服務(AWS)的工作,特別是亞馬遜簡單存儲服務 (亞馬遜S3)的延伸。您可以將S3DistCp作爲工作流程中的一個步驟添加。 使用S3DistCp,您可以高效地將大量數據從亞馬遜S3的 複製到HDFS,然後您的Amazon Elastic MapReduce(Amazon EMR)作業流中的後續步驟可以通過 進行處理。您還可以使用 S3DistCp複製亞馬遜的S3桶S3之間或從HDFS亞馬遜 數據

示例複製從Amazon S3日誌文件到HDFS

這下面的例子說明如何複製日誌文件存儲在Amazon S3存儲桶中到HDFS中。在本例中,--srcPattern選項用於限制複製到守護程序日誌的數據。

elastic-mapreduce --jobflow j-3GY8JC4179IOJ --jar \ 
s3://us-east-1.elasticmapreduce/libs/s3distcp/1.latest/s3distcp.jar \ 
--args '--src,s3://myawsbucket/logs/j-3GY8JC4179IOJ/node/,\ 
--dest,hdfs:///output,\ 
--srcPattern,.*daemons.*-hadoop-.*'