2016-04-15 14 views
4

Spark Streamingアプリケーションは、受信機のKafkaキューからデータを読み取り、変換を行ってHDFSに出力します。バッチ間隔は1分ですが、すでにバックプレッシャーとspark.streaming.receiver.maxRateのパラメータが調整されているため、ほとんどの場合は正常に動作します。Spark Streaming Kafka backpressure

しかし、まだ1つの問題があります。 HDFSが完全に停止すると、バッチジョブは長時間停止します(HDFSは4時間稼動していないとし、ジョブは4時間停止します)が、受信者はジョブが終了していないことを認識しません、それではまだ4時間分のデータを受信して​​います。これによりOOM例外が発生し、アプリケーション全体がダウンしてしまい、多くのデータが失われました。

私の質問は次のとおりです。レシーバにジョブが完了していないことを知らせて、データを受信しないようにしてもいいし、ジョブが終了したら追いつくためのデータを受信し始めます。 。上記の状態で、HDFSがダウンすると、受信機はカフカからのデータを少なく読み込み、次の4時間で生成されるブロックは実際には小さく、受信機とアプリケーション全体はダウンしていない、HDFSがOKの後、より多くのデータと追いつく。

答えて

6

プロパティ「spark.streaming.backpressure.enabled = true」を設定すると、背圧を有効にすることができます。これにより、バッチサイズが動的に変更され、キュー構築からOOMを取得する状況が回避されます。 (デフォルト1.0)

  • spark.streaming.backpressure.pid.integral最後のバッチサイズのエラーに対する応答信号 -

    • spark.streaming.backpressure.pid.proportional:それはいくつかのパラメータを持っています - 累積誤差に対する応答信号 - 効果的に緩衝 spark.streaming.backpressure.pid.derived
    • (デフォルト0.2) - エラーの傾向に対する応答を(、変化に迅速に反応するために有用な0.0デフォルト)
    • spark.streaming.backpressure.pid.minRate - ハイスループットの仕事にアンダーシュートを減らすためにそれを変更し、バッチ周波数によって暗示として最低レート(デフォルト100)

    デフォルトはかなり良いですが、私はシミュレートさまざまなパラメータへのアルゴリズムの応答here

  • +1

    リンクは、素晴らしい&詳細な分析.. – raksja

    関連する問題