Docker-Compose搭建Spark集群的實(shí)現(xiàn)方法
一、前言
在前文中,我們使用Docker-Compose完成了hdfs集群的構(gòu)建。本文將繼續(xù)使用Docker-Compose,實(shí)現(xiàn)Spark集群的搭建。
二、docker-compose.yml
對(duì)于Spark集群,我們采用一個(gè)mater節(jié)點(diǎn)和兩個(gè)worker節(jié)點(diǎn)進(jìn)行構(gòu)建。其中,所有的work節(jié)點(diǎn)均分配1一個(gè)core和 1GB的內(nèi)存。
Docker鏡像選擇了bitnami/spark的開(kāi)源鏡像,選擇的spark版本為2.4.3,docker-compose配置如下:
master:
image: bitnami/spark:2.4.3
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
ports:
- '8080:8080'
- '7077:7077'
volumes:
- ./python:/python
worker1:
image: bitnami/spark:2.4.3
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
worker2:
image: bitnami/spark:2.4.3
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在master節(jié)點(diǎn)中,也映射了一個(gè)/python目錄,用于存放pyspark代碼,方便運(yùn)行。
對(duì)于master節(jié)點(diǎn),暴露出7077端口和8080端口分別用于連接spark以及瀏覽器查看spark UI,在spark UI中,集群狀態(tài)如下圖(啟動(dòng)后):

如果有需要,可以自行添加worker節(jié)點(diǎn),其中可以修改SPARK_WORKER_MEMORY與SPARK_WORKER_CORES對(duì)節(jié)點(diǎn)分配的資源進(jìn)行修改。
對(duì)于該鏡像而言,默認(rèn)exec進(jìn)去是無(wú)用戶的,會(huì)導(dǎo)致一些安裝命令權(quán)限的不足,無(wú)法安裝。例如需要運(yùn)行pyspark,可能需要安裝numpy、pandas等庫(kù),就無(wú)法使用pip完成安裝。而通過(guò)user: root就能設(shè)置默認(rèn)用戶為root用戶,避免上述問(wèn)題。
三、啟動(dòng)集群
同上文一樣,在docker-compose.yml的目錄下執(zhí)行docker-compose up -d命令,就能一鍵構(gòu)建集群(但是如果需要用到numpy等庫(kù),還是需要自己到各節(jié)點(diǎn)內(nèi)進(jìn)行安裝)。
進(jìn)入master節(jié)點(diǎn)執(zhí)行spark-shell,成功進(jìn)入:

四、結(jié)合hdfs使用
將上文的Hadoop的docker-compose.yml與本次的結(jié)合,得到新的docker-compose.yml:
version: "1.0"
services:
namenode:
image: bde2020/hadoop-namenode:2.0.0-hadoop3.2.1-java8
container_name: namenode
ports:
- 9870:9870
- 9000:9000
volumes:
- ./hadoop/dfs/name:/hadoop/dfs/name
- ./input:/input
environment:
- CLUSTER_NAME=test
env_file:
- ./hadoop.env
datanode:
image: bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8
container_name: datanode
depends_on:
- namenode
volumes:
- ./hadoop/dfs/data:/hadoop/dfs/data
environment:
SERVICE_PRECONDITION: "namenode:9870"
env_file:
- ./hadoop.env
resourcemanager:
image: bde2020/hadoop-resourcemanager:2.0.0-hadoop3.2.1-java8
container_name: resourcemanager
environment:
SERVICE_PRECONDITION: "namenode:9000 namenode:9870 datanode:9864"
env_file:
- ./hadoop.env
nodemanager1:
image: bde2020/hadoop-nodemanager:2.0.0-hadoop3.2.1-java8
container_name: nodemanager
environment:
SERVICE_PRECONDITION: "namenode:9000 namenode:9870 datanode:9864 resourcemanager:8088"
env_file:
- ./hadoop.env
historyserver:
image: bde2020/hadoop-historyserver:2.0.0-hadoop3.2.1-java8
container_name: historyserver
environment:
SERVICE_PRECONDITION: "namenode:9000 namenode:9870 datanode:9864 resourcemanager:8088"
volumes:
- ./hadoop/yarn/timeline:/hadoop/yarn/timeline
env_file:
- ./hadoop.env
master:
image: bitnami/spark:2.4.3-debian-9-r81
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
ports:
- '8080:8080'
- '7077:7077'
volumes:
- ./python:/python
worker1:
image: bitnami/spark:2.4.3-debian-9-r81
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
worker2:
image: bitnami/spark:2.4.3-debian-9-r81
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運(yùn)行集群(還需要一個(gè)hadoop.env文件見(jiàn)上文)長(zhǎng)這樣:

通過(guò)Docker容器的映射功能,將本地文件與spark集群的master節(jié)點(diǎn)的/python進(jìn)行了文件映射,編寫(xiě)的pyspark通過(guò)映射可與容器中進(jìn)行同步,并通過(guò)docker exec指令,完成代碼執(zhí)行:

運(yùn)行了一個(gè)回歸程序,集群功能正常:


到此這篇關(guān)于Docker-Compose搭建Spark集群的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Docker-Compose搭建Spark集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker Namespace容器隔離的實(shí)現(xiàn)
Namespace是Docker容器中的一種隔離機(jī)制,通過(guò)劃分資源獨(dú)立空間,確保容器之間互不干擾,本文主要介紹一下Docker Namespace容器隔離的實(shí)現(xiàn),感興趣的可以了解一下2024-11-11
超簡(jiǎn)單實(shí)現(xiàn)Docker搭建個(gè)人博文系統(tǒng)
這篇文章主要介紹了超簡(jiǎn)單實(shí)現(xiàn)Docker搭建個(gè)人博文系統(tǒng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Mac OSX系統(tǒng) Docker啟用Docker遠(yuǎn)程API功能
這篇文章主要介紹了Mac OSX系統(tǒng) Docker啟用Docker遠(yuǎn)程API功能的相關(guān)資料,需要的朋友可以參考下2016-10-10
如何通過(guò)Jenkins定期清理為None的鏡像詳解
這篇文章主要給大家介紹了關(guān)于如何通過(guò)Jenkins定期清理為None的鏡像的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
docker Nginx PHP-FPM單機(jī)多站點(diǎn)布署的方法
這篇文章主要介紹了docker Nginx PHP-FPM單機(jī)多站點(diǎn)布署的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

