⚡ STEP 3: Spark環境構築
ローカル環境にSparkをセットアップして、最初のコードを実行する
📋 このステップで学ぶこと
- ローカルモードのセットアップ
- PySparkのインストール
- Jupyter NotebookでSpark起動
- 初めてのSparkコード実行
- トラブルシューティング
学習時間の目安: 2時間
🎯 1. ローカルモードとは?
1-1. ローカルモードの概要
ローカルモードとは、1台のPCの中でSparkを動かすモードです。実際のクラスター環境を使わなくても、Sparkの学習や開発ができます。
✅ 簡単:特別なクラスター不要、自分のPCだけでOK
✅ 無料:クラウドサービスを使わないので費用ゼロ
✅ 学習に最適:プロトタイプ作成やテストに便利
✅ デバッグが簡単:エラーがすぐに確認できる
通常のSpark(クラスター):
Master Node → Worker Node 1、Worker Node 2、Worker Node 3
(複数台のマシンで分散処理)
ローカルモード:
1台のPC内 → Master機能(Driver)+ Worker機能(Executor)
→ 全部が1台のPC内で動作!
1-2. ローカルモードの制限
データサイズ:PCのメモリに収まる範囲のみ(数GB程度)
処理速度:1台のPCなので、本番環境より遅い
並列度:CPUコア数が上限
Part 1〜5まで:ローカルモードで学習
Part 6から:AWS EMR / GCP Dataproc(クラウド環境)
💻 2. 事前準備:必要なソフトウェア
2-1. 前提条件
Sparkを使うには、以下のソフトウェアが必要です。
バージョン:3.8以上推奨
・Python 3.8、3.9、3.10、3.11が対応
・Anacondaを使っている場合もOK
バージョン:Java 8 または Java 11
・SparkはJava上で動作します
・ただし、Javaコードを書く必要はありません
2-2. Pythonバージョンの確認
# ターミナル / コマンドプロンプトで実行 # Pythonのバージョン確認 python --version # または python3 --version
Python 3.10.5 # 3.8以上ならOK!
2-3. Javaのインストール確認
# ターミナル / コマンドプロンプトで実行 # Javaのバージョン確認 java -version
openjdk version "11.0.16" 2022-07-19 OpenJDK Runtime Environment (build 11.0.16+8) OpenJDK 64-Bit Server VM (build 11.0.16+8, mixed mode) # Java 8 または Java 11 ならOK!
2-4. Javaがインストールされていない場合
1. Adoptium(旧AdoptOpenJDK)からJava 11をダウンロード
2. インストーラーを実行
3. 「Add to PATH」にチェックを入れる
Homebrewでインストール:
brew install openjdk@11
sudo apt update sudo apt install openjdk-11-jdk
📦 3. PySparkのインストール
3-1. PySparkとは?
PySparkは、PythonからSparkを使うためのライブラリです。pipコマンドで簡単にインストールできます。
PySparkをインストールすると、Spark本体も一緒にインストールされます。
Apache Sparkを別途ダウンロードする必要はありません!
3-2. PySparkのインストール手順
# PySparkのインストール pip install pyspark # Jupyter Notebookも一緒にインストール(まだの場合) pip install jupyter # インストール完了を確認 pip show pyspark
Name: pyspark Version: 3.5.0 Summary: Apache Spark Python API ...
conda install -c conda-forge pyspark
または
pip install pyspark
3-3. バージョン指定インストール(オプション)
# 特定バージョンをインストール pip install pyspark==3.5.0 # 推奨:最新安定版を使う pip install pyspark
権限エラー:--userオプションを追加 → pip install --user pyspark
プロキシ環境:プロキシ設定が必要な場合があります
仮想環境:venvやconda環境を使うことを推奨
3-4. インストール確認
# Pythonを起動 python # PySparkをインポート >>> import pyspark >>> pyspark.__version__
'3.5.0' # エラーが出なければOK!
📓 4. Jupyter NotebookでSpark起動
4-1. Jupyter Notebookの起動
# ターミナル / コマンドプロンプトで実行 # Jupyter Notebookを起動 jupyter notebook # ブラウザが自動で開く # 開かない場合は、表示されたURLをコピーしてブラウザに貼り付け # 例: http://localhost:8888/?token=...
4-2. 新しいノートブックを作成
1. Jupyter Notebookのホーム画面で「New」→「Python 3」をクリック
2. 新しいノートブックが開く
3. ファイル名を「spark_test.ipynb」などに変更
4-3. SparkSessionの作成
SparkSessionは、Sparkを使うためのエントリーポイントです。最初に必ず作成します。
# Jupyter Notebook セル1 # PySparkをインポート from pyspark.sql import SparkSession # SparkSessionを作成 spark = SparkSession.builder \ .appName("MyFirstSparkApp") \ .master("local[*]") \ .getOrCreate() # Sparkのバージョンを確認 print(f"Spark Version: {spark.version}")
Spark Version: 3.5.0
.appName("MyFirstSparkApp"):アプリ名を設定
.master("local[*]"):ローカルモードで起動、全CPUコアを使用
.getOrCreate():SparkSessionを作成(既存があれば再利用)
4-4. masterオプションの違い
| 設定 | 説明 |
|---|---|
local |
1つのスレッドで実行(並列処理なし) |
local[2] |
2つのスレッドで実行 |
local[*] |
全CPUコアを使用(推奨) |
local[4] |
4つのスレッドで実行 |
ローカル学習ではlocal[*]を使いましょう。
PCの全CPUコアを活用して、最速で処理できます。
🚀 5. 初めてのSparkコード実行
5-1. Hello World:簡単なデータ処理
# Jupyter Notebook セル2 # リストからDataFrameを作成 data = [ ("Alice", 30, "Tokyo"), ("Bob", 25, "Osaka"), ("Charlie", 35, "Tokyo"), ("David", 28, "Fukuoka"), ("Eve", 32, "Tokyo") ] columns = ["name", "age", "city"] df = spark.createDataFrame(data, columns) # DataFrameを表示 df.show()
+-------+---+-------+ | name|age| city| +-------+---+-------+ | Alice| 30| Tokyo| | Bob| 25| Osaka| |Charlie| 35| Tokyo| | David| 28|Fukuoka| | Eve| 32| Tokyo| +-------+---+-------+
5-2. フィルター処理
# Jupyter Notebook セル3 # 30歳以上の人を抽出 df_filtered = df.filter(df.age >= 30) df_filtered.show()
+-------+---+-----+ | name|age| city| +-------+---+-----+ | Alice| 30|Tokyo| |Charlie| 35|Tokyo| | Eve| 32|Tokyo| +-------+---+-----+
5-3. 集計処理
# Jupyter Notebook セル4 # 都市別の人数をカウント df.groupBy("city").count().show()
+-------+-----+ | city|count| +-------+-----+ | Tokyo| 3| | Osaka| 1| |Fukuoka| 1| +-------+-----+
5-4. CSVファイルの読み込み(サンプル)
# Jupyter Notebook セル5 # サンプルデータをCSVとして保存 df.write.csv("sample_data.csv", header=True, mode="overwrite") # CSVファイルを読み込み df_from_csv = spark.read.csv("sample_data.csv", header=True, inferSchema=True) df_from_csv.show() # スキーマを確認 df_from_csv.printSchema()
root |-- name: string (nullable = true) |-- age: integer (nullable = true) |-- city: string (nullable = true)
Pandas:
df = pd.read_csv("data.csv")
df[df['age'] >= 30]
Spark:
df = spark.read.csv("data.csv", header=True)
df.filter(df.age >= 30)
似ていますね!Pandasの経験があれば、すぐに習得できます。
🌐 6. Spark Web UI
6-1. Spark Web UIとは?
Spark Web UIは、Sparkアプリケーションの実行状況をブラウザで確認できる管理画面です。
Jobs:実行中・完了したジョブの一覧
Stages:ジョブを構成するステージの詳細
Storage:キャッシュされたデータの情報
Environment:Sparkの設定情報
Executors:Executorの状態とリソース使用状況
6-2. Spark Web UIにアクセス
SparkSessionを作成した後、以下のURLにアクセス:
http://localhost:4040
※ 4040が使用中の場合は、4041、4042…と自動で変わります
1. Jupyter NotebookでSparkSessionを作成
2. ブラウザで localhost:4040 を開く
3. 「Jobs」タブで実行したジョブを確認
4. 「Executors」タブでリソース使用状況を確認
Spark Web UIは、パフォーマンス最適化やデバッグに非常に便利です。
Part 5(パフォーマンス最適化)で詳しく使い方を学びます。
🔧 7. トラブルシューティング
7-1. よくあるエラーと解決方法
エラーメッセージ:
java.lang.RuntimeException: Java gateway process exited before sending its port number
原因:Javaがインストールされていない、またはPATHが通っていない
解決方法:
1. Javaをインストール(上記参照)
2. java -versionで確認
3. Jupyter Notebookを再起動
エラーメッセージ:
Address already in use: bind
原因:Sparkが既に起動している
解決方法:
1. 既存のSparkSessionを停止 spark.stop()
2. Jupyter Notebookカーネルを再起動
3. 新しいSparkSessionを作成
エラーメッセージ:
OutOfMemoryError: Java heap space
原因:メモリ不足
解決方法:メモリ設定を増やす(次のコードを使用)
# メモリ設定を追加 spark = SparkSession.builder \ .appName("MyApp") \ .master("local[*]") \ .config("spark.driver.memory", "4g") \ .config("spark.executor.memory", "4g") \ .getOrCreate()
7-2. Windowsでの特有の問題
エラーメッセージ:
Could not locate Hadoop winutils.exe
原因:Windows版のHadoopバイナリが不足
解決方法:
1. winutils.exeをダウンロード
2. C:\hadoop\bin\に配置
3. 環境変数 HADOOP_HOME を C:\hadoop に設定
4. PCを再起動
winutilsエラーは、実際の処理には影響しません。
警告が表示されるだけなので、無視しても大丈夫です。
気になる場合は、上記の手順でwinutils.exeを設定してください。
✅ 8. 環境構築の確認
8-1. 全体の動作確認
以下のコードを実行して、全てエラーなく動作すればOKです。
# Jupyter Notebook 確認用セル from pyspark.sql import SparkSession from pyspark.sql.functions import col, count # SparkSessionの作成 spark = SparkSession.builder \ .appName("EnvironmentCheck") \ .master("local[*]") \ .getOrCreate() print("✅ SparkSession作成成功") print(f"Spark Version: {spark.version}") # サンプルデータの作成 data = [ ("Alice", 30, "Tokyo"), ("Bob", 25, "Osaka"), ("Charlie", 35, "Tokyo") ] df = spark.createDataFrame(data, ["name", "age", "city"]) print("✅ DataFrame作成成功") # フィルター df_filtered = df.filter(col("age") >= 30) print("✅ フィルター処理成功") # 集計 df_grouped = df.groupBy("city").count() print("✅ 集計処理成功") # 表示 df_grouped.show() # SparkSessionを停止 spark.stop() print("✅ 全ての動作確認完了!")
✅ SparkSession作成成功 Spark Version: 3.5.0 ✅ DataFrame作成成功 ✅ フィルター処理成功 ✅ 集計処理成功 +-----+-----+ | city|count| +-----+-----+ |Tokyo| 2| |Osaka| 1| +-----+-----+ ✅ 全ての動作確認完了!
📝 STEP 3 のまとめ
・ローカルモードは1台のPCでSparkを動かすモード
・PySparkをpipでインストールするだけで環境構築完了
・SparkSessionがSparkを使うためのエントリーポイント
・Jupyter Notebookで対話的にSparkを操作できる
・Spark Web UIでジョブの実行状況を監視できる
・基本的なDataFrame操作(作成、フィルター、集計)を実行
環境構築は一度だけの作業です。最初は大変かもしれませんが、
一度セットアップすれば、あとは自由にSparkを使えるようになります。
エラーが出ても焦らず、トラブルシューティングを参考に解決しましょう!
次のSTEP 4では、「SparkSessionの基礎」を詳しく学びます。
設定パラメータの使い方や、様々なデータ形式の読み込み方法をマスターしましょう!
学習メモ
ビッグデータ処理(Apache Spark) - Step 3