2012-06-29 52 views
5

我有一個Elastic Map Reduce作業,它正在S3中編寫一些文件,我想連接所有文件以生成唯一的文本文件。可以在S3中運行hadoop fs -getmerge嗎?

目前我手動將所有文件的文件夾複製到我們的HDFS(hadoop fs copyFromLocal),然後我運行hadoop fs -getmerge和hadoop fs copyToLocal來獲取文件。

是否有直接在S3上使用hadoop fs?

回答

1

實際上,關於getmerge的這個迴應是不正確的。 getmerge需要一個本地目標,並且不能與S3一起使用。它會拋出一個IOException如果您嘗試並用-getmerge:Wrong FS:做出響應。

用法:

hadoop fs [generic options] -getmerge [-nl] <src> <localdst> 
0

我自己沒有親自嘗試過getmerge命令,但EMR集羣節點上的hadoop fs命令支持像HDFS路徑一樣的S3路徑。例如,您可以SSH到羣集的主節點和運行:

hadoop fs -ls s3://<my_bucket>/<my_dir>/ 

上面的命令將列出了指定的目錄路徑下的所有S3對象。

我希望hadoop fs -getmerge以同樣的方式工作。因此,只需使用完整的S3路徑(以s3://開頭)而不是HDFS路徑。

+0

'Hadoop的FS -getmerge'只能合併到本地文件系統,而不是S3 – justderb

1

一個簡單的方法(如果要生成一個適合主計算機上的小文件)是做到以下幾點:

  1. 合併的文件部分成單個文件到本地機器(Documentation

    hadoop fs -getmerge hdfs://[FILE] [LOCAL FILE] 
    
  2. 複製結果文件到S3,然後刪除本地文件Documentation

    hadoop dfs -moveFromLocal [LOCAL FILE] s3n://bucket/key/of/file 
    
相關問題