マップ/リダクションを使用して同じディレクトリの下にあるいくつかの小さなファイルをマージしようとしています。誰かがストリーミングを使って非常にシンプルになると言いましたが、今はJAVAマップ/縮小しか使用できません。 私の解決策は1つのレコードを1つのレコードで読み込み、同じ出力ファイルに書き込んでいます。しかし、効率が悪いと思います。ファイル全体の内容をマッパーの値として使用できるので、I/O効率を向上できますか? 返信いただきありがとうございます!mapreduceを使っていくつかのファイルをマージするには?
hadoop fs -cat /path/to/files/*.txt | hadoop fs -put - /output/path/blobbed.txt
あなたは、これがさらに大きなデータセットをうまく動作することがあります:
マージの順序はあなたに関係しますか?これらのファイルは以前のMRジョブから出力されていますか?ソートされた出力を1つ作成するか、定義されていない順序で1つのファイルだけが必要ですか? –
ファイルは既にHDFSまたは一部のローカルディスクにありますか? –
私は命令を要求せず、すべてのファイルはHDFSにあります – wanghao