如何把 Spark run 在 local 端的 Hadoop + YARN 集群上 – 1

我們在 如何在 local 端跑 spark cluster 中的 Spark application 是用 Standalone 模式 來跑的,Standalone 模式是 Spark 內建的集群模式,能讓我們快速的搭建可以啟動 Spark 集群起來,其實除了這個以外,Spark 還有支持:

  • Apache Mesos – 一個通用的叢集管理器,也可以運行 Hadoop MapReduce 和服務應用程式(已棄用)。
  • Hadoop YARN – Hadoop 3 的資源管理者。
  • Kubernetes – 一套能完成自動化部署、擴充和管理的 open-source 容器化工具。

所以接下來 2 篇文章,我們就來看看如何把 Spark application run 在 local 端用 docker 建置的 Hadoop + Yarn cluster 上,第 1 篇先把所有步驟列出來,下一篇在來好好說明為什麼要做這些事。

啟動 Hadoop Cluster

1. clone git 然後 cd 到 cluster/hadoop 底下

git clone https://github.com/tshine73/docker-spark-cluster.git
cd docker-spark-cluster/cluster/hadoop

2. build image

第一次 build 會有點久請耐心等待。

docker build -t hadoop-cluster:3.4.1 .

若不幸 Hadoop 或 Spark 下載連結失效導致建立 image 失敗,可直接使用我在 Docker hub 上的 image 來使用。

docker push shinest/hadoop-cluster:3.4.1

3. 用 docker compose 啟動 Hadoop cluster

docker compose -p data up -d

驗證一下

好啦!一切順利的話應該會看到你的 hadoop cluster 成功 run 起來了,總共有 3 台,1 台 master (為 hadoop 的 namenode) 還有 2 台 worker (為 hadoop 的 datanode),

首先我們可以連到 hadoop UI 來看一下我們的 hadoop 有沒有正常啟動,有的話你會看到類似下面這張圖,

在來我們可以嘗試往 hadoop 丟資料,然後看能否在另一台節點下載的資料,首先先使用以下指令連進去 master conatiner,

docker exec -it data-hadoop-master-1 /bin/bash

然後放個資料來到 hadoop 裡,

hdfs dfs -put /opt/workspace/apps/main.py /main.py

接下來開另一個 CLI 連到任一 worker container 中並執行 get 指令看是否能取到檔案。

docker exec -it data-hadoop-worker-a-1 /bin/bash
hdfs dfs -ls /
hdfs dfs -get /main.py .
ls -alh

在 YARN 上跑個 spark applicatoin 吧

接下來我們可以在不改 code 的情況下,把 第一個 SPARK APPLICATION 中的 spark application 執行在 Hadoop 的 YARN 上面,但執行前你需要參考 第一個 SPARK APPLICATION 文章中的 data 段落,把資料準備好,然後在把資料都放在 Hadoop 裡,

首先一樣先連到 master container ,

docker exec -it data-hadoop-master-1 /bin/bash

然後執行下面指令,

hdfs dfs -mkdir -p /opt/workspace
hdfs dfs -put /opt/workspace/* /opt/workspace

確認一下有沒有放好,

hdfs dfs -ls /opt/workspace
hdfs dfs -ls /opt/workspace/data/input/

然後執行 spark 程式,

spark-submit --master yarn \
--deploy-mode client \
--driver-memory 512M \
--executor-memory 512M \
/opt/workspace/apps/main.py

執行過程中我們可以到 YARN UI 上看執行狀況,

完成後,看一下 hadoop 的 output 資料夾下有沒有結果。

hdfs dfs -ls /opt/workspace/data/output/movie_rating_count/

最後可用以下指令 shutdown Hadoop cluster。

docker compose -p data down

應該成功了吧

有的話我們就成功在 local 端用 docker 啟動 hadoop 集群起來啦!也能把 第一個 Spark Application 中的 spark 程式 run 在這個集群的 YARN 上!

下篇文就來說明一下相關程式的細節。

tshine73
tshine73
文章: 62

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *