Spark環境安裝教學(二)

延伸工具安裝與串接(Jupyter)

目錄

前言

資訊
本篇文章接續前篇 Spark環境安裝教學,繼續往下延伸。這次要串接的是 Jupyter,有了它,寫 Spark 邏輯的過程會輕鬆不少,尤其是互動式除錯跟資料觀察,比純終端機方便非常多。

開始之前

提示
請先確保手上已經有一套可以正常運作的虛擬機與 Spark 環境(單節點或叢集皆可),這篇會直接沿用前篇裝好的環境繼續往下走。

版號

軟體 版本
Virtual Machine 7.1.4(或以上)
Redhat ISO 9.8
Java openjdk 17.0
Spark 4.2.0
Python3 3.11

套件版本檢查與 PIP 環境安裝

  1. 升級系統預設 Python 版本(系統內建版本無法支援 4.2.0 版 Spark 的運算需求,因此必須升級):

    1
    2
    
    sudo dnf install -y python3.11 python3.11-devel
    sudo alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1

    point

  2. 檢查套件版本:

    1
    
    python3 --version   # Python 3.11.13
  3. 安裝套件管理器 pip:

    1
    
    sudo dnf install python3-pip   # 輸入 y 同意安裝

    pip

建立虛擬環境(venv)

  1. 建立虛擬環境:

    1
    
    python3 -m venv .venv   # 會在當前目錄生成隱藏資料夾 .venv
  2. 啟用虛擬環境:

    1
    
    source .venv/bin/activate

    啟用成功後,會看到終端機最新一行前方多了 (.venv) 的標記。 venv

到這裡,虛擬環境已經準備就緒,接下來就可以開始安裝 PySpark 與 Jupyter-Lab 了。

安裝 PySpark 與 Jupyter-Lab

  1. 安裝核心套件:

    1
    2
    
    pip install pyspark
    pip install jupyter-lab   # 這個版本比 jupyter 更輕量
  2. 產生 Jupyter-Lab 設定檔,供外部連線使用(注意縮排):

    1
    
    jupyter server --generate-config   # 預設會建立檔案於 ~/.jupyter/jupyter_server_config.py
  3. 打開設定檔 ~/.jupyter/jupyter_server_config.py,調整接聽來源為外部:

    1
    2
    
    c.ServerApp.ip = '0.0.0.0'            # 接聽外部連線
    c.ServerApp.allow_remote_access = True   # 允許外部連線
    警告
    這組設定等於把 Jupyter 對外網開放,如果只在內網或個人測試機使用還好,但如果機器有對外 IP,務必搭配 Jupyter 內建的 token 驗證機制(不要手動關掉),並考慮用防火牆限制來源 IP,避免任何人都能連進來執行程式碼——這在實務環境裡是很常見的資安破口。
    
  4. 設定環境變數:

    1
    2
    3
    
    vim ~/.bashrc   # 編輯完 :wq 離開
        export PYSPARK_DRIVER_PYTHON=jupyter-lab
    source ~/.bashrc   # 重新讀取
  5. 開放防火牆:

    1
    2
    
    sudo firewall-cmd --add-port=8888/tcp --permanent   # 永久參數需視情況使用
    sudo firewall-cmd --reload

啟動服務

  1. 輸入指令啟動:

    1
    
    pyspark   # 複製回傳的網址與 token

    token

  2. 把回傳網址中的 localhost(或 127.0.0.1)換成主機的實際 IP,再貼到瀏覽器打開即可。 UI

串接功能測試

在 Jupyter-Lab 輸入測試程式碼,觀察回傳結果

執行以下程式碼,若得到類似下圖的回傳,就代表安裝成功、環境可以正常運作:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
from pyspark.sql import SparkSession

# 手動初始化 SparkSession
spark = SparkSession.builder \
    .appName("JupyterPySparkTest") \
    .getOrCreate()

# 取得 SparkContext(若需要)
sc = spark.sparkContext

# 測試運算
print("Spark Version:", spark.version)

df = spark.createDataFrame([(1, "PySpark"), (2, "JupyterLab")], ["id", "name"])
df.show()

result

結語

恭喜,Spark 環境已經成功擴展成更貼近實務操作的樣貌了。之後開發時,可以直接用 Jupyter 編寫與除錯邏輯,比起純終端機作業,互動性跟效率都會提升不少,尤其是在資料探索與逐步驗證的階段,感受會特別明顯。

目錄