大數據環境搭建指南:基于 Docker 構建 Hadoop、Hive、HBase 等服務
- 說明
- 大數據環境搭建指南:基于 Docker 構建 Hadoop、Hive、HBase 等服務
- 一、引言
- 二、項目概述
- 三、搭建步驟
- 3.1 下載文件
- 3.2 構建鏡像
- 3.2.1 構建基礎層鏡像
- 3.2.2 并行構建 HBase/Hive/Spark 鏡像
- 3.3 啟動容器
- 3.4 初始化文件路徑
- 3.5 整體啟動結果
- 四、詳細服務驗證
- 4.1 第一層:基礎協調與數據庫服務
- 4.1.1 ZooKeeper
- 4.1.2 PostgreSQL
- 4.2 第二層:核心存儲 (HDFS)
- 4.2.1 NameNode
- 4.2.2 DataNode
- 4.3 第三層:資源調度 (YARN)
- 4.3.1 ResourceManager
- 4.3.2 NodeManager
- 4.3.3 HistoryServer
- 4.4 第四層及以上:應用層 (HBase, Hive, Spark)
- 4.4.1 HBase Master
- 4.4.2 Hive Metastore
- 4.4.3 HiveServer2
- 4.4.4 Spark 客戶端(spark-client)
- 五、總結
- 六、注意事項
說明
開發環境
window11 + wsl2 + docker desktop + docker compose + idea
大數據環境搭建指南:基于 Docker 構建 Hadoop、Hive、HBase 等服務
一、引言
在大數據領域,搭建一個包含 Hadoop、Hive、HBase、Spark 等服務的開發環境是進行數據處理和分析的基礎。本文將詳細介紹如何使用 Docker 和 Docker Compose 來搭建這樣一個大數據環境,同時還會提供驗證各個服務是否正常運行的方法。
二、項目概述
本項目通過 Docker Compose 來管理多個大數據服務的容器化部署,涉及的服務包括 ZooKeeper、PostgreSQL、HDFS、YARN、HBase、Hive 和 Spark 等。每個服務都有對應的 Docker 鏡像,并且可以通過配置文件進行定制化。
三、搭建步驟
3.1 下載文件
首先,我們需要下載所需的大數據組件包和 JDBC 驅動。可以使用以下命令進行下載:
wget https://archive.apache.org/dist/hadoop/core/hadoop-3.3.6/hadoop-3.3.6.tar.gz
wget https://archive.apache.org/dist/hbase/2.5.6/hbase-2.5.6-bin.tar.gz
wget https://archive.apache.org/dist/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
wget https://archive.apache.org/dist/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz
wget https://jdbc.postgresql.org/download/postgresql-42.7.1.jar
克隆項目
git clone https://github.com/gugxl/my-bigdata-stack.git
3.2 構建鏡像
3.2.1 構建基礎層鏡像
基礎層鏡像包含了所有服務的依賴,使用以下命令構建:
docker-compose --profile build build
說明:base-builder
是基礎鏡像,包含 Ubuntu、JDK 和基礎環境。
這個時間會略微久一點,耐心等待下
3.2.2 并行構建 HBase/Hive/Spark 鏡像
由于 HBase、Hive 和 Spark 鏡像之間沒有相互依賴關系,可以并行構建以節省時間:
docker-compose build --parallel hbase-builder hive-builder spark-builder
3.3 啟動容器
使用以下命令啟動所有服務的容器:
docker-compose up -d
3.4 初始化文件路徑
在啟動容器后,需要對 HDFS 進行初始化,包括創建必要的目錄和設置權限。執行以下腳本:
chmod +x init-hdfs.sh
./init-hdfs.sh
docker compose up -d historyserver
3.5 整體啟動結果
四、詳細服務驗證
為了確保每個服務都正常運行,我們需要按照服務依賴的從底層到上層的順序進行驗證。
4.1 第一層:基礎協調與數據庫服務
4.1.1 ZooKeeper
- 容器狀態:
docker-compose ps zookeeper
,狀態應為Up
。 - 日志檢查:
docker-compose logs zookeeper
,尋找binding to port 0.0.0.0/0.0.0.0:2181
,且日志中不應有任何ERROR
或Exception
。 - 端口連接:從終端執行
echo "ruok" | nc localhost 2181
,如果返回imok
,則表示 ZooKeeper 服務完全正常。
4.1.2 PostgreSQL
- 容器狀態:
docker-compose ps postgres-metastore
,狀態應為Up
。 - 日志檢查:
docker-compose logs postgres-metastore
,尋找database system is ready to accept connections
。
4.2 第二層:核心存儲 (HDFS)
4.2.1 NameNode
- 容器狀態:
docker-compose ps namenode
,狀態應為Up (healthy)
。 - 日志檢查:
docker-compose logs namenode
,首次啟動會有STARTUP_MSG: Starting NameNode
和successfully formatted
的日志;正常運行時,日志不應有ERROR
或Exception
,尋找Serving GSSAPI ...
和IPC Server handler ...
等信息。 - Web UI:在瀏覽器中訪問 http://localhost:9870,能看到 HDFS 的管理界面,在 “Datanodes” 標簽頁下應能看到活動的 DataNode。
4.2.2 DataNode
- 容器狀態:
docker-compose ps datanode
,狀態應為Up
。 - 日志檢查:
docker-compose logs datanode
,尋找STARTUP_MSG: Starting DataNode
或Block pool ... registered with namenode
。 - NameNode Web UI 確認:訪問 http://localhost:9870/dfshealth.html#tab-datanode,能看到至少一個 “Live” 的 DataNode,并且它的狀態是 “In Service”。
4.3 第三層:資源調度 (YARN)
4.3.1 ResourceManager
- 容器狀態:
docker-compose ps resourcemanager
,狀態應為Up (healthy)
。 - 日志檢查:
docker-compose logs resourcemanager
,尋找STARTUP_MSG: Starting ResourceManager
和Transitioned to active state
,日志中不應再有關于隊列初始化失敗的錯誤。 - Web UI:在瀏覽器中訪問 http://localhost:8088,能看到 YARN 的管理界面,在 “Nodes” 標簽頁下應能看到活動的 NodeManager,在 “Scheduler” 菜單下應能看到配置的
root.default
隊列。
4.3.2 NodeManager
- 容器狀態:
docker-compose ps nodemanager
,狀態應為Up
。 - 日志檢查:
docker-compose logs nodemanager
,尋找STARTUP_MSG: Starting NodeManager
和Registered with ResourceManager as nodemanager
。 - ResourceManager Web UI 確認:訪問 http://localhost:8088/cluster/nodes,能看到至少一個狀態為 “RUNNING” 的節點。
4.3.3 HistoryServer
- 容器狀態:
docker-compose ps historyserver
,狀態應為Up
。 - 日志檢查:
docker-compose logs historyserver
,尋找STARTUP_MSG: Starting JobHistoryServer
和JobHistoryServer metrics system started
。 - Web UI:在瀏覽器中訪問 http://localhost:19888,能看到 “JobHistory” 的界面,即使里面沒有任何作業記錄。
4.4 第四層及以上:應用層 (HBase, Hive, Spark)
4.4.1 HBase Master
- 容器狀態:
docker-compose ps hbase-master
,狀態應為Up
。 - 日志檢查:
docker-compose logs hbase-master
,尋找Master has completed initialization
。 - Web UI:訪問 http://localhost:16010,能看到 HBase Master 的 UI,并且在 “Region Servers” 部分能看到活動的 RegionServer。
4.4.2 Hive Metastore
- 容器狀態:
docker-compose ps hive-metastore
,狀態應為Up
。 - 日志檢查:
docker-compose logs hive-metastore
,尋找Starting Hive Metastore Server
和Opened a connection to metastore
,并且不應有連接postgres-metastore
失敗的錯誤,首次啟動會有schemaTool
相關的日志。
4.4.3 HiveServer2
- 容器狀態:
docker-compose ps hiveserver2
,狀態應為Up
。 - 日志檢查:
docker-compose logs hiveserver2
,尋找Starting HiveServer2
和HiveServer2 is started
。 - Web UI:訪問 http://localhost:10002,能看到 HiveServer2 的 Web UI。
4.4.4 Spark 客戶端(spark-client)
- 容器狀態:
docker-compose ps spark-client
,狀態應為Up
。 - 進入容器驗證:可以使用以下命令進入
spark-client
容器:
docker exec -it spark-client bash
進入容器后,可以嘗試執行一些簡單的 Spark 命令,例如啟動 Spark Shell:
spark-shell
如果能夠正常啟動 Spark Shell,則說明 spark-client
服務正常。
五、總結
通過以上步驟,我們成功地使用 Docker 和 Docker Compose 搭建了一個包含多個大數據服務的開發環境,并驗證了每個服務的正常運行。這種容器化的部署方式不僅方便快捷,而且易于管理和維護。希望本文能對大數據開發者有所幫助。
六、注意事項
- 確保你的系統已經安裝了 Docker 和 Docker Compose。
- 在構建鏡像和啟動容器時,可能需要一些時間,請耐心等待。
- 如果在驗證過程中發現某個服務出現問題,可以查看相應的日志文件進行排查。