0

ファイル サーバーから HDFS にファイルを頻繁にロードしたいと考えています。小さなファイル (2 MB から 20 MB) は、ファイル サーバーに頻繁に読み込まれます。これらのファイルは、MR プロセス用に HDFS にロードする必要があります。これらのファイルを Map-Reduce ジョブで使用できるようにする前に、2 つの問題があります。

  1. これらのファイルが MR ジョブの実行時に選択されて HDFS にロードされると、これらのファイルを HDFS 自体にロードするのに時間がかかります。

  2. これらの小さなファイルは、MR ジョブ用にマージする必要があります。

質問

  1. Flume を使用して、ファイル サーバー内のこれらの小さなファイルをより頻繁に読み取り、HDFS に保存できますか?

  2. これらのファイルを結合して処理するための CombineFileInputFormat と SequenceFiles があることは理解していますが、これらの小さなファイルを HDFS に格納する前に連結することはできますか?

4

1 に答える 1

1

質問に対する回答の可能性。

久しぶりにflumeを使いました。彼らが助けてくれることを願っています。

  1. Flume を使用して、ファイル サーバー内のこれらの小さなファイルをより頻繁に読み取り、HDFS に保存できますか?

データ ソースはカスタマイズ可能であるため、Flume を使用して、ネットワーク トラフィック データ、ソーシャル メディアで生成されたデータ、電子メール メッセージ、および可能なほとんどすべてのデータ ソースを含むがこれらに限定されない大量のイベント データを転送できます。

tail注: Flume はソースとしてサポートしていません。tailコマンドを exec ソースにラップして、ファイルをストリーミングすることができます。

テーリングファイルについては、これをチェックできます

複数のファイルのソースとしてのディレクトリの実装は、ここで追跡できます

HDFSに書き込むことができるHDFS シンクについては、こちらを参照してください。

2 . これらのファイルを結合して処理するための CombineFileInputFormat と SequenceFiles があることは理解していますが、これらの小さなファイルを HDFS に格納する前に連結することはできますか?

Flume は基本的に Event メカニズムで動作します。ファイルは、経過時間、データのサイズ、またはイベントの数に基づいて、定期的にロール (現在のファイルを閉じて新しいファイルを作成) できます。HDFS シンクの同じリンクを確認してください。

ファイル数が多い場合は、おそらく CombineFileINputFormat を使用できます。HDFSに書き込む前にそれを行う方法についてはわかりません。

ノート:

すでに述べたように、flume はイベント ベースのメカニズムで動作しますが、私の知る限り、ファイル転送用ではありません。Eventのこのインターフェースを見ると、次のメソッドに気付くでしょう。

byte[] getBody(): このイベントに含まれるデータの未加工のバイト配列を返します。

void setBody(byte[] body): このイベントに含まれるデータの未加工のバイト配列を設定します。

そのため、イベントの最大サイズは byte[] が取ることができるものです。あなたのファイルをそこに入れることができるかどうかはわかりません。自分でテストする必要があります。さらに、ファイルを HDFS に転送するのを妨げる可能性のある他の条件が関係していますが、今は思い出せません。

于 2013-07-29T14:44:30.060 に答える