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の最適化は
参照先: 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
Stormフローコンピューティング(エスカレーター)の利点:データ遅延度が低く、StormのトランザクションメカニズムはSparkStreamingのトランザクションメカニズムよりも完備している(トランザクションメカニズムとは何か?1つのデータに対して、多く処理しなくても多くの処理があり、1つのデータに対してちょうど1回処理され、例えば金融、株などのリアルタイム性が高い場合は、Stormを選択する必要がある)
欠点:ずっと資源を持っていて、すべてのデータはすべてクラスタの中である1台のノードで処理しなければならなくて、計算するデータはネットワークの伝送を行って、スループットは小さくて、またStormは複雑な業務のロジック(要約に適していません)に適していません
SparkStreamingマイクロバッチ(エレベーターに似ている)は、純粋なバッチの利点ではありません.スループットが大きく、複雑なビジネスロジック(jobごとの処理がbatch intervalより小さいことを保証する)を行うことができます.欠点:データ遅延度が高い
会社の中でなぜSparkStreamingを選ぶのが多いのですか?1.秒レベルの遅延、通常アプリケーションは許容できる、2.机械を応用して勉强することができて、SparkSQL...拡張性に優れ、データスループットが高い
Sparkパフォーマンスの最適化
コード最適化
連合規約操作を行う場合、groupByKeyは使用しないでください.例を挙げるとrdd.groupByKey().mapValues(.sum)とrdd.reduceByKey(_ + _) 実行の結果は同じですが、前者はすべてのデータをネットワークを通じて伝える必要があります.
パラメータ調整最適化部
実践検証を経て、調整後の有効なパラメータは以下の通りである.
合理的な資源を設置する.Javaごみ回収器;不要な空間を整理する.
その他の最適化
SQLの最適化
spark.sql.autoBroadcastJoinThreshold
を開く.spark.sql.shuffle.partition
を合理的に配置する.参照先: