STEP 3:Spark環境構築

⚡ 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を使うには、以下のソフトウェアが必要です。

1️⃣ Python

バージョン:3.8以上推奨

・Python 3.8、3.9、3.10、3.11が対応
・Anacondaを使っている場合もOK

2️⃣ Java

バージョン: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がインストールされていない場合

【Windows】

1. Adoptium(旧AdoptOpenJDK)からJava 11をダウンロード
2. インストーラーを実行
3. 「Add to PATH」にチェックを入れる

【Mac】

Homebrewでインストール:

brew install openjdk@11
【Linux(Ubuntu)】
sudo apt update
sudo apt install openjdk-11-jdk

📦 3. PySparkのインストール

3-1. PySparkとは?

PySparkは、PythonからSparkを使うためのライブラリです。pipコマンドで簡単にインストールできます。

💡 PySparkの便利な点

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
...
Anaconda環境の場合

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との比較

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アプリケーションの実行状況をブラウザで確認できる管理画面です。

Spark Web UIで見られる情報

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. よくあるエラーと解決方法

エラー1:Java not found

エラーメッセージ:
java.lang.RuntimeException: Java gateway process exited before sending its port number

原因:Javaがインストールされていない、またはPATHが通っていない

解決方法:
1. Javaをインストール(上記参照)
2. java -versionで確認
3. Jupyter Notebookを再起動

エラー2:Port already in use

エラーメッセージ:
Address already in use: bind

原因:Sparkが既に起動している

解決方法:
1. 既存のSparkSessionを停止 spark.stop()
2. Jupyter Notebookカーネルを再起動
3. 新しいSparkSessionを作成

エラー3:Memory Error

エラーメッセージ:
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での特有の問題

Windows:winutils.exeエラー

エラーメッセージ:
Could not locate Hadoop winutils.exe

原因:Windows版のHadoopバイナリが不足

解決方法:
1. winutils.exeをダウンロード
2. C:\hadoop\bin\に配置
3. 環境変数 HADOOP_HOMEC:\hadoop に設定
4. PCを再起動

💡 代替案(Windowsユーザー向け)

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

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE