第19章 パフォーマンス・チューニング パフォーマンス・チューニング
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
第18章では、 Sparkのユーザインタフェース(UI)とSparkアプリケーションの基本的な応急処置について説明した。その章で説明したツールを使えば、ジョブを確実に実行できるはずだ。しかし、時には様々な理由で、より速く、より効率的にジョブを実行する必要がある。それがこの章である。ここでは、ジョブをより高速に実行するために利用可能な、性能に関する選択肢のいくつかを紹介する。
モニタリングと同じように、チューニングを試みることができる様々なレベルがある。例えば、非常に高速なネットワークがあれば、多くのSparkジョブを高速化できるだろう。Sparkジョブの中でシャッフルはコストのかかるステップの1つであることが多いからだ。ほとんどの場合、このようなことをコントロールする能力はあまりないだろう。そこで、コードの選択や設定によってコントロールできることについて説明する。
Sparkの仕事には最適化したいさまざまな部分があり、それを具体的に示すことは価値がある。以下はその一部である:
-
コードレベルの設計の選択(例:RDDとDataFramesの比較)
-
静止時のデータ
-
参加
-
アグリゲーション
-
飛行中のデータ
-
個々のアプリケーション特性
-
エグゼキューターのJava仮想マシン(JVM)内部
-
ワーカーノード
-
クラスタとデプロイのプロパティ
この のリストは決して網羅的なものではないが、少なくともこの章で取り上げるトピックと会話の土台にはなる。さらに、Sparkジョブの実行特性を実現するには、2つの方法がある。設定値を設定するか、実行環境を変更することで間接的に実行することができる。これらは、Sparkアプリケーション全体またはSparkジョブ全体で改善されるはずである。あるいは、個々のSparkジョブ、ステージ、タスクレベルで実行特性や設計の選択を直接変更することもできる。この種の修正は、アプリケーションの1つの領域に非常に特化しているため、全体的な影響は限定的だ。間接的なものと直接的なものの両側には多くのものがあり、それに応じて砂の中に行を引くことになる。
業績を向上させる方法を把握するためにできる最善のことの1つは、優れたモニタリングと職務履歴の追跡を実装することである。この情報がなければ、本当に職務遂行能力が向上しているかどうかを知ることは難しい。
間接的なパフォーマンス向上
説明したように、Sparkジョブを高速に実行するために、間接的にできる機能強化は数多くある。ここでは、「ハードウェアの改善」のようなわかりやすいものは省き、自分でコントロールできることに焦点を当てることにする。
デザインの選択
良い設計を選択することは、パフォーマンスを最適化するためのある程度明白な方法のように思えるが、私たちはしばしばこのプロセスのステップを優先しない。アプリケーションを設計するとき、良い設計を選択することは、より良い Spark アプリケーションを書くのに役立つだけでなく、時間の経過や外部からの変更や変化に直面しても、より安定した一貫性のある方法で実行できるようになるため、非常に重要である。これらのトピックのいくつかについては、本書の前半ですでに説明したが、ここで改めて基本的なトピックのいくつかをまとめておこう。
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access