在Hadoop中getmerge描述Hadoop -getmerge如何工作?
用法:HDFS DFS -getmerge SRC localdst [addnl]
我的問題是,爲什麼getmerge被串聯到本地目標,爲什麼不HDFS本身?這個問題被問到,因爲我有以下問題
- 如果要合併的文件大於本地的大小?
- 是否有限制hadoop -getmerge命令僅用於連接到本地目標的任何具體原因?
在Hadoop中getmerge描述Hadoop -getmerge如何工作?
用法:HDFS DFS -getmerge SRC localdst [addnl]
我的問題是,爲什麼getmerge被串聯到本地目標,爲什麼不HDFS本身?這個問題被問到,因爲我有以下問題
getmerge
命令專門用於將文件從HDFS合併到本地文件系統中的單個文件。
該命令對於下載MapReduce作業的輸出非常有用,該作業可能會生成多個part- *文件,並將它們合併到本地的單個文件中,您可以將其用於其他操作(例如,將其放入Excel表單)。
問題的答案:
如果目標文件系統沒有足夠的空間,則拋出IOException。 getmerge
內部使用IOUtils.copyBytes()
(請參閱IOUtils.copyBytes())函數一次將一個文件從HDFS複製到本地文件。只要複製操作出現錯誤,此函數就會拋出IOException
。
該命令與hdfs fs -get
命令類似,用於從HDFS獲取文件到本地文件系統。唯一不同的是hdfs fs -getmerge
將HDFS中的多個文件合併到本地文件系統。
如果你想在HDFS合併多個文件,可以使用copyMerge()
方法從FileUtil
類(見FileUtil.copyMerge())實現它。
此API將目錄中的所有文件複製到單個文件(合併所有源文件)。
我知道這不是你的問題,但也許你會發現這個帖子很有用:http://stackoverflow.com/questions/21776339/hadoop-getmerge-to-another-machine – vefthym