質問に対する回答の可能性。
久しぶりにflumeを使いました。彼らが助けてくれることを願っています。
- 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 に転送するのを妨げる可能性のある他の条件が関係していますが、今は思い出せません。