2017-11-21 13 views
0

バッチとストリーミングを処理するkafkaとsparkとの統合チャネルを開発しています。Kafka、Spark大きなcsvファイル(4Go)

バッチ処理では、巨大なCSVファイル(4 GB)を入力しました。

は、私は2つのソリューションを検討している:ファイルシステムにファイル全体を送信し、ファイルアドレスと をカフカするメッセージを送信

  1. を、そしてsaprkジョブが FSからファイルを読み込みますし、それをつける。
  2. ユニットメッセージ(apache nifi)でkafkaの前にファイルを切断し、 sendを実行して、スパークジョブでストリームをストリーミングとして扱います。

最高の解決策は何だと思いますか?

おかげ

答えて

0

あなたはファイルシステム上のファイルを配置するためにコードを書いている場合は、ジョブトラッカーにスパークジョブを送信するために、同じコードを使用することができます。ジョブトラッカーはタスクキューになり、提出されたファイルをSparkジョブとして処理します。

これは#1を実装するより単純な方法ですが、欠点があります。主な欠点は、あなたのデータセットが非常に大きい場合、あなたがケースのために割り当てられていないことを確認するためにリソースの割り当てを調整しなければならないということです。ジョブのリソースを過剰に割り当てると、タスクがリソースを待っている間にタスクキューが潜在的に大きくなります。利点は、維持してトラブルシューティングするための移動部品があまりないことです。

nifiを使用して大きなファイルをカットし、スパークをストリームとして処理すると、クラスタリソースをより効果的に利用しやすくなります。このデータ取り込みの最中にクラスタがランダムジョブを処理している場合は、これが最適な方法です。ここでの欠点は、1つのトランザクションコンテキストで1つのファイルのすべての部分を処理するために余分な作業をする必要があることかもしれませんが、Kafkaが提供するデータを失うことがないように、

これがバッチ操作の場合、方法2はおそらく過剰殺到と見なされます。 CSVファイルが潜在的に非常に大きなファイルであっても、CSVファイルを読み込むには設定がかなり複雑です。 CSVファイルの速度、CSVの絶え間なく変化するソース、または高いエラーレートに問題があった場合、NiFiは多くの意味を持ちます。

最高のソリューションを提案するのは難しいです。それが私だったら、#1のバリエーションから始めて、まずそれを動作させるでしょう。次に、入力ファイルの異常を処理する際に許容可能なレベルの精度でアプローチがどのように実行されるかに応じて、より多くのシステムパーツを導入することで、より効果的に動作させます。最大の問題は、大規模な処理中に入力ファイルのエラーを特定しようとすることです。

+0

ご連絡いただきありがとうございます。 実際には、2番目のものを選択しました。これはユースケースに対応しているためです –

関連する問題