2017-07-14 11 views
0

我々はスパークにウィンドウ機能を実装しようとしています。 SparkはKafka(5つのパーティションを持つ)を介してデータを受信して​​おり、処理のためにSpark Java DStreamを使用しています。 kafkaからカンマ区切りのデータをSparkのオブジェクトにマップすると、1秒でスライドする20秒のウィンドウが作成されます。このJava DStreamでは、出力をカウントして出力します(実際には処理を増やしたいが、単純化するためにカウントが適用されます)。処理時間にスパイクが発生するまではすべて正常に機能します。処理時間は1つのタスクを処理するのに約40秒かかり、これをポストすると長いキューが発生します。 クラスタ詳細: - 3ノードクラスタ - それぞれが45個のコア(合計135コア) - 各々が256ギガバイトRAM セットアップをテストした: セットアップ1 - - 5カフカパーティション - 20秒窓、1でスライディング秒 - ノードあたり9エグゼキュータ(合計27のエグゼキュータ) - 各エグゼキュータに10ギガバイトの割り当て セットアップ2 - - 5カフカパーティション - 20秒ウィンドウ、秒 1にスライディング - ノードあたりエグゼキュータ(合計135のエグゼキュータ) - GB T を割り当てます各執行 セットアップ3 O - - 5カフカパーティション - 20秒窓、1秒で摺動 - ノードあたりエグゼキュータ(合計45のエグゼキュータ) - 各エクゼキュータ セットアップ4にギガバイトを割り当てます。 - - 5カフカパーティション - 秒窓、1秒 でスライディング - ノードあたり9つのエグゼキュータ(合計27のエグゼキュータ) - 各エグゼキュータに10ギガバイトの割り当て セットアップ5: - (これは私たちの実際のシナリオである) - カフカパーティションS - 秒ウィンドウは、1秒 でスライディング - ノードあたり9エグゼキュータ(合計27のエグゼキュータ) - 全ての設定では、各執行ウィンドウ機能

10 GBに割り当て、ある時点で、処理時間のあまりを取ります(処理の問題の大半で40秒に近い)。 それには解決策やパラメータ変更の提案がある方が良いでしょう。

答えて

0

あなたが構築するキューをしたくない場合は、背圧を可能にすることができます。これは、spark.streaming.backpressure.enabledをtrueに設定し、spark 1.5以降に使用できるように設定することによって行われます。 それ以外は、どのレートがプロデューサによって生成されるデータであるか、またデータを処理するのに十分なリソースレート。 Spark-UIはこれについていくつかの洞察を与えます。 チェックポイントの有無にかかわらず、受信者ベースのアプローチか、カフカダイレクトを使用しているかどうかなど、パフォーマンスに影響を与える要因は他にもあります。

+0

データ生成速度は10k /秒である。カフカからのメッセージ。 – kadsank

+0

受信者ベースのアプローチを使用していますか?あなたがレシーバを並列化している場合は、チェックポインティングは物事をかなり遅くするので、それを避けることができれば、私はそれをお勧めします。 Spark-UIはボトルネックについていくつかの洞察を提供します。 spark-lintは、クラスタの使用状況を表示できる別のツールです。 – sparker

+0

私たちは '.createDirectStream'アプローチを使用しています。この中で、カフカパーティションは、消費者を呼び起こすために一対一でマッピングされています。 – kadsank

関連する問題