2

ディレクトリ内のマルチファイルの出力を監視し、データを処理してHDFSに入れるストリームがあります。これが私のストリーム作成コマンドです:

stream create --name fileHdfs --definition "file --dir=/var/log/supervisor/ --pattern=tracker.out-*.log --outputType=text/plain | logHdfsTransformer | hdfs --fsUri=hdfs://192.168.1.115:8020 --directory=/data/log/appsync --fileName=log --partitionPath=path(dateFormat('yyyy/MM/dd'))" --deploy

問題はソースです。ファイルモジュールは、ファイルから読み取ったすべてのデータを、毎ターン1行ではなくログ処理モジュールに送信します。そのため、ペイロード文字列には数百万の文字があり、処理できません。元:

--- PAYLOAD LENGTH---- 9511284

source:file モジュールを使用する場合に行単位で読む方法を教えてください、ありがとう!!!

4

4 に答える 4

3

現在サポートされていませんがsource、Spring Integration を使用してカスタムを作成inbound-channel-adapterし、一度に 1 行ずつ読み取る POJO を呼び出すのは簡単です。

新機能の JIRA の問題を開いてください。

XDで a のjob代わりに aを使用することもできます。stream

于 2014-07-31T16:02:35.707 に答える
3

これが遅れている可能性があることはわかっていますが、解決策を探しているグーグル社員のために:

これを自動的に行うモジュールやオプションはありませんが、着信メッセージを複数の発信メッセージに分割するスプリッターを追加するのと同じくらい簡単です。

\n と \r\n のどちらを使用するかを決定する必要があることに注意してください。ファイルをチェックして、ファイルが何を使用しているかを確認します。

例:

stream create --name filetest --definition "file --outputType=text/plain --dir=/tmp/examplefiles/| splitter --expression=payload.split('\\n') | log" --deploy

乾杯!

于 2015-03-03T19:33:38.217 に答える