2017-06-08 12 views
0

私はFlumeにとって非常に新しいユーザーです。私を絶対的なnoobとして扱ってください。特定のユースケースに対してFlumeを設定する際のマイナーな問題があり、助けてくれると期待していました。私はHDFSを使用していないことに注意してください。なぜなら、この質問はあなたがフォーラムで見たかもしれない他の質問とは異なるからです。Apache Flume - 新しいファイルの内容のみを送信する

Oracle Virtual Boxの内部ネットワークを介して2台の仮想マシン(VM)を相互に接続しています。私の目標は、1つのVMに1つのファイルしか持たない特定のディレクトリを監視させることです。ファイルが変更されたら、私はFlumeが新しい行/データだけを送ることを望みます。私は、他のVMがこのデータを受信し、その上の特定のディレクトリにある単一のファイルにデータを更新/連結したいとします。

これまでのところ、私はこのプロセスを非常に作業に近づけています。 VM1で変更が行われるたびに、VM2で更新されます。ただし、VM1のファイル全体は、新しい行ではなく毎回VM2に送信されます。たとえば、私は「Test1を」を書いた後、しばらくは後で下VM1上のファイルに「Test2を」を書いた場合、VM2に出力は次のようになります。

Test1を

Test1を

Test2を

  Test1 

      Test2 

私はこれを実装する方法を確認していない、と徹底的に水路のユーザーガイドdocumentatioを調べた後、このメールを送信しています:私は何を見てみたいことはあり

nとstackoverflow/stackexchangeに関する最も関連性の高い記事あなたの参照のために、以下は現在の構成です(上記の方法で動作しています)。

VM1 configuration

VM2 configuration

私が検出され、別の解決策は、VM1の設定を維持し、VM2毎回新しい内容のファイルを上書きするだろう実現。しかし、私はこれを実装する方法も不明です。

ご協力いただければ幸いです。

+0

私のコードでコメントのいくつかを無視して、私は物事を試していた。そこにあったことを忘れてしまった: –

+0

私は今考えている、私はまた、最終的なディレクトリに定期的にファイルを削除することによってこの問題を解決することができます。 –

+0

別の解決策として、スプーリングディレクトリソースとfile_rollシンクを持つエージェントに宛先ディレクトリを添付し、file_rollの宛先を同じディレクトリにすることを考えています。このようにして、私は本質的にリフレッシュ操作をしています。スプーリングディレクトリのソースは、ファイルをチャネルに読み込んだ後で削除できるためです。 –

答えて

1

Flume.Itで提供されているTailDirソースを使用すると、エージェントクラッシュや何らかの理由で停止しても、位置ファイルに最後に保存された位置から読み込みを開始するため、ファイル。

agent1.sources.src1.type = TAILDIR 
agent1.sources.src1.channels = ch1 
agent1.sources.src1.filegroups =f1 
agent1.sources.src1.filegroups.f1= //path to log file 
agent1.sources.src1.maxBackoffSleep = 10000 

設定maxBackoffSleep値は最大時間エージェントが最後に行われた試みで、すべての変更を見つけるdidntの場合は、ログファイルの変更をポーリングする前に待つべきどのくらいの意味あなたの必要性に従って。

+0

プロジェクトが遅れてからこのスレッドをしばらくチェックしていません。私は今これを試してみようとしています。これは.json形式でのみ動作しますか? .txtまたは.csvを送信したい場合はどうすればよいですか? –

+0

これは.txt形式で動作します。ただし、ファイルに1行追加するたびに、ファイル内のすべてを送信しています。私は誤解しましたか? VM1では、TAILDIRソースとavroシンクがあります。 VM2上で私はavroソースとfile_rollシンクを持っています。 –

+0

位置がファイルに書き込まれているかどうか確認してください。\t〜/ .flume/taildir_position.json –

関連する問題