我有一個Elastic Map Reduce作業,它正在S3中編寫一些文件,我想連接所有文件以生成唯一的文本文件。可以在S3中運行hadoop fs -getmerge嗎?
目前我手動將所有文件的文件夾複製到我們的HDFS(hadoop fs copyFromLocal),然後我運行hadoop fs -getmerge和hadoop fs copyToLocal來獲取文件。
是否有直接在S3上使用hadoop fs?
我有一個Elastic Map Reduce作業,它正在S3中編寫一些文件,我想連接所有文件以生成唯一的文本文件。可以在S3中運行hadoop fs -getmerge嗎?
目前我手動將所有文件的文件夾複製到我們的HDFS(hadoop fs copyFromLocal),然後我運行hadoop fs -getmerge和hadoop fs copyToLocal來獲取文件。
是否有直接在S3上使用hadoop fs?
實際上,關於getmerge的這個迴應是不正確的。 getmerge需要一個本地目標,並且不能與S3一起使用。它會拋出一個IOException
如果您嘗試並用-getmerge:Wrong FS:做出響應。
用法:
hadoop fs [generic options] -getmerge [-nl] <src> <localdst>
我自己沒有親自嘗試過getmerge命令,但EMR集羣節點上的hadoop fs
命令支持像HDFS路徑一樣的S3路徑。例如,您可以SSH到羣集的主節點和運行:
hadoop fs -ls s3://<my_bucket>/<my_dir>/
上面的命令將列出了指定的目錄路徑下的所有S3對象。
我希望hadoop fs -getmerge
以同樣的方式工作。因此,只需使用完整的S3路徑(以s3://開頭)而不是HDFS路徑。
一個簡單的方法(如果要生成一個適合主計算機上的小文件)是做到以下幾點:
合併的文件部分成單個文件到本地機器(Documentation)
hadoop fs -getmerge hdfs://[FILE] [LOCAL FILE]
複製結果文件到S3,然後刪除本地文件(Documentation)
hadoop dfs -moveFromLocal [LOCAL FILE] s3n://bucket/key/of/file
'Hadoop的FS -getmerge'只能合併到本地文件系統,而不是S3 – justderb