HDFS自体は、このような機能を提供しません。すべてのデータを転送するには、すぐに使える機能(パイプのあるhdfs dfs -text *
やFileUtilのコピー方法など)がクライアントサーバーを使用します。
私の経験では、私たちは常に独自の書面MapReduceジョブを使用して、HDFS内の多数の小さなファイルを分散してマージしました。
だから、2つのソリューションを持っている:
- は あなたの形式でテキストファイルを結合するために、独自のシンプルなのMapReduce /スパークジョブを作成します。
- のような種類の目的で既に実装されているソリューションを探します。
解決策2について:HDFSにテキストファイルまたはシーケンスファイルを結合するための簡単なプロジェクトFileCrushがあります。それはあなたに適しているかもしれません。使い方の
例:
hadoop jar filecrush-2.0-SNAPSHOT.jar crush.Crush -Ddfs.block.size=134217728 \
--input-format=text \
--output-format=text \
--compress=none \
/input/dir /output/dir 20161228161647
は、私は、これらのオプション(特に-Ddfs.block.sizeと出力ファイルの日付のプレフィックス20161228161647)せずにそれを実行するので、あなたはそれを正しく実行することを確認するには問題がありました。