32

複数の小さなファイルを入力ディレクトリに取得し、ローカル ファイル システムを使用したり mapred を作成したりせずに、これらを 1 つのファイルにマージしたいと考えています。hadoof fs コマンドまたは Pig を使用してそれを行う方法はありますか?

ありがとう!

4

8 に答える 8

17
hadoop fs -getmerge <dir_of_input_files> <mergedsinglefile>
于 2010-08-24T17:46:33.737 に答える
7

わかりました...hadoop fsコマンドを使用する方法を見つけました-

hadoop fs -cat [dir]/* | hadoop fs -put - [destination file]

テストしたところうまくいきました...考えられる落とし穴はありますか?

ありがとう!

于 2010-08-25T08:49:08.660 に答える
4

HDFS をローカル ディレクトリにマウントするように fuse をセットアップした場合、出力はマウントされたファイル システムになります。

たとえば、HDFS を/mnt/hdfsローカルにマウントしています。次のコマンドを実行すると、うまく機能します。

hadoop fs -getmerge /reports/some_output /mnt/hdfs/reports/some_output.txt

もちろん、fuse を使用して HDFS をローカル ディレクトリにマウントする理由は他にもありますが、これは良い副作用でした。

于 2011-04-26T15:21:48.947 に答える
1

HDFS 0.21 の新機能であるツールHDFSConcatを使用して、コピーのコストを発生させずにこの操作を実行できます。

于 2010-10-04T11:46:06.253 に答える
0

すべてのソリューションは、

hadoop fs -cat [dir]/* > tmp_local_file  
hadoop fs -copyFromLocal tmp_local_file 

これは、ローカル m/c I/O がデータ転送のクリティカル パス上にあることを意味するだけです。

于 2011-06-27T04:37:23.967 に答える