2016-08-01 9 views
0

概要:私は多重化のシナリオを持ち、静的に設定された値ではなく、フィールドの可変値(日付など)に基づいて動的に多重化する方法を知りたいと考えています。Flume:HDFSEventSink - 動的に多重化する方法は?

詳細: 私は入力があり、それはentityIdで区切られています。 私が作業しているエンティティを知っているので、典型的なFlumeマルチチャンネル選択で設定できます。

agent.sources.jmsSource.channels = chan-10 chan-11 # ... 

agent.sources.jmsSource.selector.type = multiplexing 
agent.sources.jmsSource.selector.header = EntityId 
agent.sources.jmsSource.selector.mapping.10 = chan-10 
agent.sources.jmsSource.selector.mapping.11 = chan-11 
# ... 

チャネルの各々は別個HDFSEventSink、 "hdfsSink-N" に行く:

agent.sinks.hdfsSink-10.channel = chan-10 
agent.sinks.hdfsSink-10.hdfs.path = hdfs://some/path/ 
agent.sinks.hdfsSink-10.hdfs.filePrefix = entity10 
# ... 
agent.sinks.hdfsSink-11.channel = chan-11 
agent.sinks.hdfsSink-11.hdfs.path = hdfs://some/path/ 
agent.sinks.hdfsSink-11.hdfs.filePrefix = entity11 
# ... 

これは微細であるエンティティごとにファイルを生成します。 今、私はに、動的なという2番目の変数を導入したいと思います。イベントの日付に応じて、エンティティごとのファイルを作成する。 日付は動的な値なので、複数のシンクを事前に設定することはできず、それぞれが別々のファイルに送信されます。また、シンクごとにHDFS出力を1つだけ指定することもできます。

このように、「Multiple Outputs HDFSEventSink」が必要でした(HadoopのMultipleOutputsライブラリと同様の方法で)。 Flumeにこのような機能はありますか?

もしそうでない場合は、これを修正するか、これを回避するための優雅な方法はありますか?もう一つの選択肢は、HDFSEventSinkを変更することです。それは、イベントごとに "realName"(String)を別に作成することで実装できるようです。

答えて

1

実際には、hdfs sinkのパスまたはfilePrefixの変数を特定することができます。 たとえば、イベントのヘッダーで変数のキーが「日付」の場合、次のように設定できます。

agent.sinks.hdfsSink-11.hdfs.filePrefix = entity11-%{date} 
関連する問題