【あぱっちすぱーく】

Apache Spark とは?

最終更新:
💡 データの処理を分け、複数の実行役で進める

大量のデータを分散処理するオープンソースの分析エンジン。driverとexecutor、メモリとディスク、分散処理の性能条件を解説します。

📌 このページのポイント
Spark:処理を分けて実行するdriver処理を組み立てるtaskを送るworker Aexecutor実行・データ保持worker Bexecutor実行・データ保持メモリだけでなく、ディスク・通信も使う
2台のworkerは模式例で、台数や速度の保証ではありません。クラスターの資源管理等を省略し、driverからexecutorへtaskを送る関係を示しています。
ひよこ ひよこ
Apache Sparkは、何をするの?
ペンギン先生 ペンギン先生
大量のデータを分けて処理する分析エンジンだ。複数の計算機を使う構成や、手元で学ぶ構成がある。SQLによる分析、バッチ処理やストリーミングなどを扱う。
ひよこ ひよこ
処理は、誰が進める?
ペンギン先生 ペンギン先生
アプリケーションのdriverが処理を組み立て、executorへtaskを送る。executorは計算してデータを保持する。クラスターの管理役は、アプリケーションが使う資源を割り当てる役割だ。
ひよこ ひよこ
Hadoopより、必ず100倍速い?
ペンギン先生 ペンギン先生
条件なしの倍率では比較できない。処理、データの分け方、メモリ量や通信などで変わる。Hadoopは複数の仕組みを含む名前で、SparkがHadoopのストレージやYARNを利用する構成もある。
ひよこ ひよこ
Sparkは、全部メモリで処理する?
ペンギン先生 ペンギン先生
違うよ。データの再利用にメモリを使える一方、保存方法を選べるし、ディスクも使う。データを別の実行先へ配り直すシャッフルには、通信やディスクの入出力などの費用がかかる。
ひよこ ひよこ
Pythonのpandasと同じように使える?
ペンギン先生 ペンギン先生
PySparkとpandas API on Sparkがあるが、すべてのpandas処理が同じ性能や挙動になるわけではない。ソートなどのデータの再配置や、一台に処理を集める操作を確認しよう。
ひよこ ひよこ
台数を増やすだけで、速くなる?
ペンギン先生 ペンギン先生
保証はない。小さい処理では準備や通信の負担もある。データの偏り、処理計画、資源などを確認する。全件をdriverへ集めるcollect()は、その一台のメモリを使い切る原因にもなる。
もっと詳しく知りたい人へ

cacheやpersistを使えば、どの処理でも速くなる?

繰り返し使うデータには役立ちますが、保持する資源も必要です。保存レベルにはメモリ、メモリとディスク、ディスクなどがあり、収まらない場合の扱いも異なります。再利用の有無と容量を確認します。

処理計画を見ると、何が分かる?

どの操作を実行し、データを再配置するシャッフルなどがあるかを確認できます。pandas API on Sparkにも実行計画を調べる機能があります。コードの見た目が短いことと、分散処理の費用が小さいことは別です。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Apache Spark」って出てきたら「大量のデータを分散処理するオープンソースの分析エンジン」と思えばだいたいOK!
📖 おまけ:英語の意味
「Apache Spark」 = 大規模なデータ分析エンジンのプロジェクト名
💬 Sparkは英語で火花を表します。Apache Software Foundationのプロジェクトで、名称が速度や特定の性能倍率を保証するわけではありません。

参考資料

← 用語集にもどる