如何使用 Docker 部署 Spark 集群
Apache Spark 是一個(gè)統(tǒng)一的分析引擎,用于大規(guī)模數(shù)據(jù)處理。使用 Docker 部署 Spark 集群是一種簡便且高效的方式。本文將詳細(xì)介紹如何通過 Docker Compose 部署一個(gè) Spark 集群,包括一個(gè) Master 節(jié)點(diǎn)和多個(gè) Worker 節(jié)點(diǎn)。
環(huán)境要求
在開始部署之前,請確保以下環(huán)境已準(zhǔn)備就緒:
- Docker Engine:安裝并運(yùn)行 Docker。
- Docker Compose:安裝 Docker Compose,用于定義和運(yùn)行多容器應(yīng)用。
- 網(wǎng)絡(luò)環(huán)境:確保主機(jī)可以連接到 Docker Hub 以下載鏡像。
Docker Compose 配置文件
以下是用于部署 Spark 集群的 docker-compose.yml
文件:
version: '3' services: master: image: bitnami/spark:3.5.4 container_name: master user: root environment: - SPARK_MODE=master - SPARK_RPC_AUTHENTICATION_ENABLED=no - SPARK_RPC_ENCRYPTION_ENABLED=no - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no - SPARK_SSL_ENABLED=no - SPARK_MASTER_WEBUI_PORT=8080 - SPARK_MASTER_PORT=7077 ports: - '8080:8080' - '7077:7077' volumes: - ./python:/python worker1: image: bitnami/spark:3.5.4 container_name: worker1 user: root environment: - SPARK_MODE=worker - SPARK_MASTER_URL=spark://master:7077 - SPARK_WORKER_MEMORY=1G - SPARK_WORKER_CORES=1 - SPARK_RPC_AUTHENTICATION_ENABLED=no - SPARK_RPC_ENCRYPTION_ENABLED=no - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no - SPARK_SSL_ENABLED=no depends_on: - master worker2: image: bitnami/spark:3.5.4 container_name: worker2 user: root environment: - SPARK_MODE=worker - SPARK_MASTER_URL=spark://master:7077 - SPARK_WORKER_MEMORY=1G - SPARK_WORKER_CORES=1 - SPARK_RPC_AUTHENTICATION_ENABLED=no - SPARK_RPC_ENCRYPTION_ENABLED=no - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no - SPARK_SSL_ENABLED=no depends_on: - master networks: default: driver: bridge
配置詳解
Master 節(jié)點(diǎn)配置
- 鏡像:使用
bitnami/spark:3.5.4
鏡像。 - 容器名稱:指定容器名稱為
master
。 - 用戶:以
root
用戶運(yùn)行容器。 - 環(huán)境變量:
SPARK_MODE=master
:指定節(jié)點(diǎn)模式為 Master。SPARK_MASTER_WEBUI_PORT=8080
:設(shè)置 Web UI 訪問端口。SPARK_MASTER_PORT=7077
:設(shè)置 Spark Master 通信端口。
- 端口映射:
8080:8080
:映射 Web UI 端口。7077:7077
:映射 Spark Master 端口。
- 卷掛載:將主機(jī)的
./python
目錄掛載到容器的/python
目錄。
Worker 節(jié)點(diǎn)配置
- 鏡像:同樣使用
bitnami/spark:3.5.4
鏡像。 - 容器名稱:分別指定為
worker1
和worker2
。 - 用戶:以
root
用戶運(yùn)行容器。 - 環(huán)境變量:
SPARK_MODE=worker
:指定節(jié)點(diǎn)模式為 Worker。SPARK_MASTER_URL=spark://master:7077
:指定 Master 節(jié)點(diǎn)的 URL。SPARK_WORKER_MEMORY=1G
:配置 Worker 節(jié)點(diǎn)的內(nèi)存。SPARK_WORKER_CORES=1
:配置 Worker 節(jié)點(diǎn)的 CPU 核數(shù)。
- 依賴:指定 Worker 節(jié)點(diǎn)依賴 Master 節(jié)點(diǎn),確保 Master 節(jié)點(diǎn)先啟動(dòng)。
網(wǎng)絡(luò)配置
- 使用橋接網(wǎng)絡(luò),將所有容器連接到同一個(gè)網(wǎng)絡(luò)中,以便它們可以互相通信。
部署 Spark 集群
步驟 1:創(chuàng)建 Docker Compose 文件
將上述配置內(nèi)容保存為 docker-compose.yml
文件。
步驟 2:構(gòu)建并啟動(dòng)容器
在終端中,進(jìn)入包含 docker-compose.yml
文件的目錄,并運(yùn)行以下命令:
docker compose up -d
up
:構(gòu)建并啟動(dòng)容器。-d
:后臺運(yùn)行。
步驟 3:驗(yàn)證集群狀態(tài)
啟動(dòng)容器后,可以通過以下方式驗(yàn)證集群狀態(tài):
查看容器狀態(tài):
docker compose ps
預(yù)期輸出:
訪問 Spark Web UI:
打開瀏覽器,訪問 http://{你的虛擬機(jī)Ip}:8080
,即可看到 Spark Master 的 Web UI,顯示所有 Worker 節(jié)點(diǎn)的連接狀態(tài)。
驗(yàn)證 Worker 節(jié)點(diǎn)連接:
在 Web UI 中,導(dǎo)航到 http://{你的虛擬機(jī)Ip}:8080
,檢查 "Workers" 標(biāo)簽頁,應(yīng)顯示 worker1
和 worker2
已連接。
步驟 4:運(yùn)行 Spark 作業(yè)
為了驗(yàn)證 Spark 集群的功能,可以運(yùn)行一個(gè)簡單的 Spark 作業(yè)。以下是一個(gè)示例:
方法一:在 Master 容器內(nèi)部運(yùn)行 Spark 作業(yè)
進(jìn)入 Master 容器
docker compose exec master bash
運(yùn)行 Spark PI 示例:
/opt/bitnami/spark/bin/spark-shell --master spark://master:7077 或者 $SPARK_HOME/bin/spark-shell --master spark://master:7077
在 Spark Shell 中運(yùn)行以下代碼:
val numSamples = 100000000 val count = sc.parallelize(1 to numSamples).count() println(s"Pi is roughly ${count * 4.0 / numSamples}")
方法二:通過 Python 提交 Spark 作業(yè)
假設(shè)你有一個(gè) Python 腳本 pi.py
,內(nèi)容如下:
from pyspark.sql import SparkSession if __name__ == "__main__": spark = SparkSession.builder.appName("Pi Calculator").getOrCreate() numSamples = 100000000 count = spark.sparkContext.parallelize(range(1, numSamples)).count() print(f"Pi is roughly {4.0 * count / numSamples}") spark.stop()
將 pi.py
放在 ./python
目錄下,然后提交作業(yè):
docker-compose exec master /opt/bitnami/spark/bin/spark-submit --master spark://master:7077 /python/pi.py
運(yùn)行結(jié)果:
步驟 5:停止和清理(注意,這個(gè)不是讓你測試的,看清楚)
完成測試后,可以停止并刪除容器:
docker compose down
總結(jié)
通過以上步驟,你已經(jīng)成功使用 Docker 部署了一個(gè) Spark 集群,包括一個(gè) Master 節(jié)點(diǎn)和兩個(gè) Worker 節(jié)點(diǎn)。這種部署方式具有以下優(yōu)勢:
- 快速部署:通過 Docker Compose 一鍵式部署,無需手動(dòng)配置每個(gè)節(jié)點(diǎn)。
- 資源隔離:每個(gè)節(jié)點(diǎn)運(yùn)行在獨(dú)立的容器中,資源分配清晰。
- 易于擴(kuò)展:可以輕松添加或刪除 Worker 節(jié)點(diǎn)以適應(yīng)不同的工作負(fù)載。
- 環(huán)境一致性:所有節(jié)點(diǎn)使用相同的 Spark 鏡像,確保環(huán)境一致。
你可以根據(jù)需要調(diào)整 docker-compose.yml
文件中的配置,例如增加 Worker 節(jié)點(diǎn)的數(shù)量、調(diào)整內(nèi)存和 CPU 核數(shù)等。希望這篇文章能幫助你快速上手 Spark 集群的 Docker 部署!
到此這篇關(guān)于如何使用 Docker 部署 Spark 集群的文章就介紹到這了,更多相關(guān)Docker 部署 Spark 集群內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker如何實(shí)現(xiàn)修改Docker0網(wǎng)橋默認(rèn)網(wǎng)段
這篇文章主要介紹了Docker如何實(shí)現(xiàn)修改Docker0網(wǎng)橋默認(rèn)網(wǎng)段,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12Docker安裝Oracle創(chuàng)建表空間并導(dǎo)入數(shù)據(jù)庫完整步驟
Docker提供了一種簡便的方式,通過容器化我們可以在任何支持Docker 的環(huán)境中快速部署Oracle數(shù)據(jù)庫,這篇文章主要介紹了Docker安裝Oracle創(chuàng)建表空間并導(dǎo)入數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下2025-04-04宿主機(jī)無法訪問docker容器中nginx服務(wù)的問題解決
在虛擬機(jī)中部署Docker并安裝Nginx后,宿主機(jī)無法訪問容器內(nèi)的Nginx服務(wù),通過檢查端口映射、防火墻狀態(tài)、進(jìn)入容器內(nèi)部啟動(dòng)Nginx以及檢查/修改內(nèi)核的IP轉(zhuǎn)發(fā)設(shè)置,解決了該問題,感興趣的可以了解一下2024-11-11Docker compose安裝部署創(chuàng)建自定義網(wǎng)絡(luò)使用舉例
這篇文章主要為大家介紹了Docker compose安裝部署創(chuàng)建自定義網(wǎng)絡(luò)使用舉例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09docker各種報(bào)錯(cuò)解決方案小結(jié)
最近在學(xué)習(xí)docker的時(shí)候遇到了不少問題,索性給大家整理下,下面這篇文章主要給大家介紹了關(guān)于docker各種報(bào)錯(cuò)解決的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05詳解利用nginx和docker實(shí)現(xiàn)一個(gè)簡易的負(fù)載均衡
本篇文章主要介紹了利用nginx和docker實(shí)現(xiàn)一個(gè)簡易的負(fù)載均衡 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06docker一鍵部署MySQL的實(shí)現(xiàn)示例
本文主要介紹了docker一鍵部署MySQL的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08