文章目錄
Docker搭建Hadoop環境
Hadoop集群環境配置起來相當繁瑣,並且在學習Hadoop過程中沒有一般不會去使用多台設備進行分布式集群配置。因此在一台機器上配置Hadoop分布式集群時通常采用虛擬機來模擬多台設備,但虛擬機較為占用系統資源,開多個虛擬機(模擬Hadoop集群通常使用3個,一個master,兩個slave)對內存要求比較高,因此筆者就想是否能通過Docker來配置Hadoop,並且通過Jetbrains IDEA來連接Docker容器調試MapReduce程序。經過一番折騰,成功地搭建了Docker+IDEA的Hadoop環境。在此將結合網上其他一些教程和自己的經驗講配置過程記錄下來。
注意:文中多次提到容器終端是hadoop-master這個容器的終端
Docker的安裝與使用
建議在Ubuntu上配置以下內容,因為我自己在Windows上多次嘗試配置,都出現Datanode啟動不了的情況,同樣的步驟在Ubuntu上就沒有問題。
看了一些Docker教程,筆者認為菜鳥教程里的Docker教程不錯,包含安裝過程和一些基礎命令,在這里就不贅述了,讀者自行查看 菜鳥教程- Docker,另外建議將Docker的鏡像源修改為國內鏡像源,下載速度會更快。
拉取鏡像
鏡像,是 Docker 的核心,可以通過從遠程拉取鏡像即可配置好我們所需要的環境,我們這次需要的是 Hadoop 集群的鏡像。我們使用kiwenlau/hadoop:1.0這個鏡像。
sudo docker pull kiwenlau/hadoop:1.0
顯示以下信息說明拉去鏡像成功
克隆配置腳本
這一步是從github上克隆配置腳本,腳本的內容是使用kiwenlau/hadoop:1.0配置mater、slave1、slave2三個容器,其中slave數量可以修改:
git clone https://github.com/kiwenlau/hadoop-cluster-docker
切換到合適的路徑在進行克隆,顯示以下信息說明克隆完成
創建網橋
由於Hadoop的master節點需要與slave節點通信,需要在各個主機節點配置節點IP,為了不用每次啟動都因為IP改變了而重新配置,在此配置一個Hadoop專用的網橋,配置之后各個容器的IP地址就能固定下來。
sudo docker network create --driver=bridge hadoop
出現以下信息說明網橋創建完成
執行腳本
此時可以通過前面步驟克隆下來的腳本進行容器創建了,首先看一下腳本內容
為了后續通過IDEA連接IDEA,需要修改腳本,添加一個端口映射,將容器的9000端口映射到本地的9000端口,在-p 8088:8088 \下添加一行如下圖所示
執行腳本,腳本在創建完容器之后進入了容器的終端
Docker命令補充
1、切換到本地終端而不關閉容器:快捷鍵Ctrl+P+Q,前一個步驟進入了容器的終端,如果我們想在這個窗口執行本地命令,而不想關閉當前容器,可以使用這個快捷前切換回本地終端,如下圖所示:
也可以通過新建一個終端窗口通過以下attach命令來進入容器終端,這種方式更方便一點,不需要使用命令來回切換終端
2、進入容器終端:在一個容器啟動的情況下,我們想從本地終端切換到容器終端,可以使用docker的attach命令來切換:
# sudo docker attach [container-id]
sudo docker attach hadoop-master
3、以上兩條是我們在后續步驟要多次用到的,在此提出,其他Docker命令請查看 菜鳥教程- Docker。
更換鏡像源
- 在下一步中需要安裝vim,在安裝vim前需要執行sudo apt-get update更新軟件源,這一步如果使用默認鏡像源(國外源),更新速度會很慢,因此最好在次之前配置國內鏡像源。
- 由於更換鏡像源需要復制鏡像源到文件中,而容器中只有vi(非vim)編輯器,vi的粘貼很難用(我不會用),所有采用在本機創建一個鏡像源文件,然后通過Docker命令移動到Docker容器中的方法來修改鏡像源文件。
首先新開一個本地終端,創建一個sources.list文件
gedit sources.list
- 將以下內容復制進去
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
- 在容器終端下備份一下sources.list文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.copy
- 在本地終端使用Docker命令將本地文件復制到Docker容器里
sudo docker cp sources.list hadoop-master:/etc/apt
- 最后在容器終端更新一下軟件源
sudo apt-get update
安裝vim
- 由於kiwenlau/hadoop:1.0這個鏡像是沒有安裝vim編輯器,因此我們需要先把vim裝上,方便后續查看文件,執行以下安裝命令即可
# 安裝vim sudo apt-get install vim
啟動Hadoop
在前面一個步驟的最后進入了Hadoop容器的終端(master節點),因為是已經配置好Hadoop的容器,所以可以直接使用Hadoop,在容器根目錄下有一個啟動Hadoop的腳本,腳本代碼如下,啟動了dfs和yarn:
- 通過以下命令執行:
./start-hadoop.sh
出現以下信息說明Hadoop啟動成功
測試Word Count
根目錄下還有一個測試WordCount程序的腳本,WordCount是Hadoop里“Hello World”程序,是一個用於文本字符統計的MapReduce程序,先來看一下run-wordcount.sh這個腳本的內容,腳本往hdfs里添加了數據文件,然后執行了Hadoop里的例子hadoop-mapreduce-examples-2.7.2-sources.jar:
- 執行腳本
./run-wordcount.sh
輸出結果沒有報異常,且結果如下則WordCount程序執行成功
查看Web管理頁面
- Name Node:[Your IP Address]:50070/
- 進入頁面可以看到各節點的情況,注意如果Summary下的節點信息異常(容量為0、Live Nodes為0等)可能是配置過程出現了問題。
- 在導航欄的Utilities中有兩個選項Browse the file system和Logs,前者是查看hdfs文件系統的,后者是查看Hadoop運行日志的,出現任何異常時可以在日志中查看,看能否找出異常原因。
- Resource Manager: [Your IP Address]:8088/
- 容器的IP可以在啟動容器時的輸出信息里找到,或者在開啟的本地端口映射的情況下使用本地瀏覽器,IP使用localhost
Docker配置Hadoop環境的過程到此就結束了,下一篇IDEA調試Docker上的Hadoop會介紹如何在IDEA連接Docker配置的Hadoop容器,並且調試的文章,以便於Hadoop的深入學習。
參考”從 0 開始使用 Docker 快速搭建 Hadoop 集群環境“:https://www.jianshu.com/p/b75f8bc9346d
轉載https://blog.csdn.net/qq_24342739/article/details/89420496