複数の小さなファイルを入力ディレクトリに取得し、ローカル ファイル システムを使用したり mapred を作成したりせずに、これらを 1 つのファイルにマージしたいと考えています。hadoof fs コマンドまたは Pig を使用してそれを行う方法はありますか?
ありがとう!
複数の小さなファイルを入力ディレクトリに取得し、ローカル ファイル システムを使用したり mapred を作成したりせずに、これらを 1 つのファイルにマージしたいと考えています。hadoof fs コマンドまたは Pig を使用してそれを行う方法はありますか?
ありがとう!
hadoop fs -getmerge <dir_of_input_files> <mergedsinglefile>
わかりました...hadoop fs
コマンドを使用する方法を見つけました-
hadoop fs -cat [dir]/* | hadoop fs -put - [destination file]
テストしたところうまくいきました...考えられる落とし穴はありますか?
ありがとう!
HDFS をローカル ディレクトリにマウントするように fuse をセットアップした場合、出力はマウントされたファイル システムになります。
たとえば、HDFS を/mnt/hdfs
ローカルにマウントしています。次のコマンドを実行すると、うまく機能します。
hadoop fs -getmerge /reports/some_output /mnt/hdfs/reports/some_output.txt
もちろん、fuse を使用して HDFS をローカル ディレクトリにマウントする理由は他にもありますが、これは良い副作用でした。
HDFS 0.21 の新機能であるツールHDFSConcatを使用して、コピーのコストを発生させずにこの操作を実行できます。
すべてのソリューションは、
hadoop fs -cat [dir]/* > tmp_local_file
hadoop fs -copyFromLocal tmp_local_file
これは、ローカル m/c I/O がデータ転送のクリティカル パス上にあることを意味するだけです。