使用法:HDFS DFS -getmerge SRC localdst [addnl]
自体をHDFSない理由getmergeはローカルの宛先に連結されている理由私の質問はありますか?この問題は次のような問題があるため質問されました
- マージするファイルがローカルのサイズを超えている場合はどうなりますか?
- hadoop-getmergeコマンドをローカル宛先にのみ連結するように制限する理由はありますか?
使用法:HDFS DFS -getmerge SRC localdst [addnl]
自体をHDFSない理由getmergeはローカルの宛先に連結されている理由私の質問はありますか?この問題は次のような問題があるため質問されました
getmerge
コマンドは、HDFSのファイルをローカルファイルシステム上の1つのファイルにマージするために作成されています。
このコマンドはMapReduceジョブの出力をダウンロードするのに非常に便利です。これは、複数のpart- *ファイルを生成し、それらをローカルに単一のファイルに結合する可能性があります。プレゼンテーション用のExcelシート)。ご質問
回答:
getmerge
は内部でIOUtils.copyBytes()
(IOUtils.copyBytes()参照)機能を使用して、HDFSからローカルファイルに一度に1つのファイルをコピーします。この関数は、コピー操作でエラーが発生するたびにIOException
をスローします。このコマンドは、HDFSからローカルファイルシステムにファイルを取得するコマンドhdfs fs -get
と同様の行です。相違点のみhdfs fs -getmerge
は、HDFSからローカルファイルシステムに複数のファイルをマージします。あなたはHDFSで複数のファイルをマージしたい場合は、FileUtil
クラス(FileUtil.copyMerge()を参照)からcopyMerge()
メソッドを使用して、それを達成することができます
。
このAPIは、ディレクトリ内のすべてのファイルを1つのファイルにコピーします(すべてのソースファイルをマージします)。
答えをありがとう、 – monic
hdfsからhdfsに直接ファイルをマージすることができる-getmergeの代替手段はありますか? – monic
そのためのコマンドライン機能はありません。答えで述べたように、 "FileUtil.copyMerge()"をプログラムで使用するか、ここで述べるようなLinuxシェルスクリプトのトリックを使用する必要があります:http://stackoverflow.com/questions/3548259/merging-multiple-files-into- 1つの中にhadoop。例えば、 hadoop fs -cat [dir]/* | hadoop fs -put - [出力先ファイル] –
私はこれがあなたの質問ではないことを知っていますが、おそらくあなたはこの投稿が役に立ちます。http://stackoverflow.com/questions/21776339/hadoop-getmerge-to-another-machine – vefthym