Spark Streamingの使用シーンと最適化の概要

3128 ワード

SparkStreamingはシーンに適しています
Stormフローコンピューティング(エスカレーター)の利点:データ遅延度が低く、StormのトランザクションメカニズムはSparkStreamingのトランザクションメカニズムよりも完備している(トランザクションメカニズムとは何か?1つのデータに対して、多く処理しなくても多くの処理があり、1つのデータに対してちょうど1回処理され、例えば金融、株などのリアルタイム性が高い場合は、Stormを選択する必要がある)
欠点:ずっと資源を持っていて、すべてのデータはすべてクラスタの中である1台のノードで処理しなければならなくて、計算するデータはネットワークの伝送を行って、スループットは小さくて、またStormは複雑な業務のロジック(要約に適していません)に適していません
SparkStreamingマイクロバッチ(エレベーターに似ている)は、純粋なバッチの利点ではありません.スループットが大きく、複雑なビジネスロジック(jobごとの処理がbatch intervalより小さいことを保証する)を行うことができます.欠点:データ遅延度が高い
会社の中でなぜSparkStreamingを選ぶのが多いのですか?1.秒レベルの遅延、通常アプリケーションは許容できる、2.机械を応用して勉强することができて、SparkSQL...拡張性に優れ、データスループットが高い
Sparkパフォーマンスの最適化
コード最適化
  • 複数のアクション計算は、同じRDDに基づいて計算動作を行うことが好ましく、同じRDDに対してCache動作を行い、繰り返し計算を回避し、タスクの実行時間を増加させる.また、永続化レベルはMEMORY_を使用することが望ましいONLY_SERはメモリの使用を減らす.
  • joinを使用する場所でmap演算子とブロードキャスト変数を使用することができるかどうかを見る.
  • は効率的な演算子を使用し、例えば、groupByKeyの代わりにreduceByKey/aggregateByKeyを使用する.前者はcombiner操作を行い、ネットワークIOを減少させることができるからである.

  • 連合規約操作を行う場合、groupByKeyは使用しないでください.例を挙げるとrdd.groupByKey().mapValues(.sum)とrdd.reduceByKey(_ + _) 実行の結果は同じですが、前者はすべてのデータをネットワークを通じて伝える必要があります.
  • は、特にネットワーク接続が必要な場所で、Mapの代わりにMapPartitionを使用する.
  • foreachPartitionをforeach操作の代わりに使用し、データを一括処理することができる.
  • filter操作後、colease操作を使用することができ、タスク数を減らすことができる.
  • シーケンス化はできるだけKyro方式を使用し、その性能はもっと良い.
  • 複雑なデータ構造の使用を減らし、シーケンス化時間を効果的に減らすことができる.
  • は簡単な関数に対応し、閉鎖構造を使用することが好ましく、ネットワークIOを効果的に減少させることができる.
  • Repartition操作を使用すると、タスクの処理並列度を効果的に増加させることができる.

  • パラメータ調整最適化部
    実践検証を経て、調整後の有効なパラメータは以下の通りである.
    合理的な資源を設置する.Javaごみ回収器;不要な空間を整理する.
  • リソースの状況に応じる、Executorの個数を追加して有効である、パラメータはsparkである.executor.instances
  • Executor毎に使用するカーネル数を調整し、パラメータはsparkである.executor.cores
  • 各Executorのメモリを調整し、パラメータはsparkである.executor.memory
  • shuffle write taskのbufferサイズ、パラメータはspark.shuffle.file.buffer
  • shuffle read taskのbufferサイズ、パラメータはspark.reducer.maxSizeInFlight
  • 各ステージのtaskのデフォルト並列度、デフォルト200、1000程度に変更することを提案し、パラメータspark.default.parallelism
  • RDDの永続化に使用するメモリの割合、デフォルト0.6、パラメータspark.storage.memoryFraction
  • ユーザーshuffleが使用するメモリの割合、デフォルトは0.2、パラメータspark.shuffle.memoryFraction

  • その他の最適化
  • は、Kafkaのデータを読み取るなど、データ読み出しの並列度を増加させ、topicのpartition数とexecutorの個数を増加させることができる.
  • Kafkaデータの読み出し速度、パラメータsparkを制限する.streaming.kafka.maxRatePerPartition
  • データの傾きの問題がある場合、
  • の2種類がある.
  • はjoin操作を行い、skew問題を発生し、map+ブロードキャスト変数クラスを使用して処理することができる.
  • redece/aggregateなどの重合操作、パラメータskew問題は、2回の重合を行う思想で解決することができ、*コアはkeyを先に行って乱数操作を行い、データ分布が均一で、重合を行い、最後にランダムデータを除去し、実際のデータで重合操作を行う.

  • SQLの最適化
  • spark.sql.autoBroadcastJoinThresholdを開く.
  • spark.sql.shuffle.partitionを合理的に配置する.

  • 参照先:
  • http://www.jianshu.com/p/7ed12f883d42
  • http://www.cnblogs.com/sunrise88/p/7286009.html
  • https://www.iteblog.com/archives/1333.html
  • https://endymecy.gitbooks.io/spark-config-and-tuning/content/tuning.html
  • https://github.com/jaceklaskowski/mastering-apache-spark-book/blob/master/spark-sql-joins-broadcast.adoc