詳解從 0 開(kāi)始使用 Docker 快速搭建 Hadoop 集群環(huán)境
Linux
Info:
- Ubuntu 16.10 x64
Docker 本身就是基于 Linux 的,所以首先以我的一臺(tái)服務(wù)器做實(shí)驗(yàn)。雖然最后跑 wordcount 已經(jīng)由于內(nèi)存不足而崩掉,但是之前的過(guò)程還是可以參考的。
連接服務(wù)器
使用 ssh 命令連接遠(yuǎn)程服務(wù)器。
ssh root@[Your IP Address]
更新軟件列表
apt-get update
更新完成。
安裝 Docker
sudo apt-get install docker.io
當(dāng)遇到輸入是否繼續(xù)時(shí),輸入「Y/y」繼續(xù)。
安裝完成
輸入「docker」測(cè)試是否安裝成功。
拉取鏡像
鏡像,是 Docker 的核心,可以通過(guò)從遠(yuǎn)程拉取鏡像即可配置好我們所需要的環(huán)境,我們這次需要的是 Hadoop 集群的鏡像。
在本文中,我們將使用 kiwenlau 的 Hadoop 集群鏡像以及其配置。由于我的服務(wù)器本身即在國(guó)外,因此拉取鏡像的速度較快,國(guó)內(nèi)由于眾所周知的原因,可以替換為相應(yīng)的國(guó)內(nèi)源,以加快拉取速度。
sudo docker pull kiwenlau/hadoop:1.0
拉取鏡像完成。
克隆倉(cāng)庫(kù)
克隆倉(cāng)庫(kù)到當(dāng)前文件夾(可以自行創(chuàng)建并切換到相應(yīng)文件夾)。
git clone https://github.com/kiwenlau/hadoop-cluster-docker
克隆倉(cāng)庫(kù)完成
橋接網(wǎng)絡(luò)
sudo docker network create --driver=bridge hadoop
運(yùn)行容器
cd hadoop-cluster-docker ./start-container.sh
默認(rèn)是 1 個(gè)主節(jié)點(diǎn),2 個(gè)從節(jié)點(diǎn),當(dāng)然也可以根據(jù)性能調(diào)整為 N 節(jié)點(diǎn),詳見(jiàn)文末參考鏈接。
啟動(dòng) Hadoop
./start-hadoop.sh
在上一步,我們已經(jīng)運(yùn)行容器,即可直接運(yùn)行 Hadoop。啟動(dòng)時(shí)長(zhǎng)與機(jī)器性能有關(guān),也是難為了我這一臺(tái) 512 MB 內(nèi)存的服務(wù)器。
測(cè)試 Word Count
./run-wordcount.sh
Word Count 是一個(gè)測(cè)試 Hadoop 的 Shell 腳本,即計(jì)算文本中的單詞個(gè)數(shù)。不過(guò)由于我的服務(wù)器內(nèi)存不夠分配無(wú)法完成,所以后續(xù)以本機(jī)進(jìn)行測(cè)試。
網(wǎng)頁(yè)管理
我們可以通過(guò)網(wǎng)頁(yè)遠(yuǎn)程管理 Hadoop:
- Name Node: [Your IP Address]:50070/
- Resource Manager: [Your IP Address]:8088/
macOS
Info:
- macOS 10.12.4 beta (16E191a)
下載 & 安裝
打開(kāi) Docker 官方網(wǎng)站:https://www.docker.com,選擇社區(qū)版,并下載、安裝。Windows 系統(tǒng)用戶可以選擇 Windows 版本。
Docker CE
macOS or Windows
運(yùn)行 Docker
打開(kāi) Docker。為了簡(jiǎn)單,我沒(méi)有改動(dòng)配置,如需更改,可以在 Preferences 中修改。
我們可以在終端(Terminal)輸入「docker」,測(cè)試是否安裝成功。
拉取鏡像 & 克隆倉(cāng)庫(kù) & 橋接網(wǎng)絡(luò) & 運(yùn)行容器 & 啟動(dòng) Hadoop
同 Linux。
測(cè)試 Word Count
./run-wordcount.sh
同 Linux,但這次我們可以運(yùn)算出結(jié)果了。
Windows
其實(shí)最開(kāi)始就沒(méi)有打算放出 Windows 版,倒不是因?yàn)橛X(jué)得 Windows 不好,而是目前手頭沒(méi)有 Windows 的電腦,借用同學(xué)的電腦也不是很方便。如果需要安裝 Docker,需要 CPU 支持虛擬化,且安裝了 64 位 Windows 10 Pro/企業(yè)版(需要開(kāi)啟 Hyper-V)。其他版本的 Windows 可以安裝 Docker Toolbox。
Intellij IDEA
我們的 Hadoop 集群已經(jīng)在容器里安裝完成,而且已經(jīng)可以運(yùn)行。相比自己一個(gè)個(gè)建立虛擬機(jī),這樣的確十分方便、快捷。為了便于開(kāi)發(fā)調(diào)試,接下來(lái)就需要在 Intellij IDEA 下配置開(kāi)發(fā)環(huán)境,包管理工具選擇 Gradle。Maven 配合 Eclipse 的配置網(wǎng)上已經(jīng)有很多了,需要的同學(xué)可以自行搜索。
Docker 開(kāi)啟 9000 端口映射
由于我們使用的是 kiwenlau 的鏡像和開(kāi)源腳本,雖然加快了配置過(guò)程,但是也屏蔽了很多細(xì)節(jié)。比如在其腳本中只默認(rèn)開(kāi)啟了 50070 和 8088 的端口映射,我們可以通過(guò) docker ps(注意是在本機(jī),而不是在容器運(yùn)行該命令)列出所有容器,查看容器映射的端口。
cd hadoop-cluster-docker vim start-container.sh
切換到腳本文件夾,使用 Vim 編輯 start-container.sh。在圖中光標(biāo)處添加以下內(nèi)容,保存并退出。
-p 9000:9000 \
重啟容器,并查看容器狀態(tài),如圖即為映射成功。
開(kāi)啟 Web HDFS 管理*
該步非必須。為了方便在網(wǎng)頁(yè)端管理,因此開(kāi)啟 Web 端,默認(rèn)關(guān)閉。
which hadoop cd /usr/local/hadoop/etc/hadoop/ ls vi core-site.xml
找到 Hadoop 配置文件路徑,使用 Vi 編輯,若 Vi 的插入模式(Insert Mode)中,上下左右變成了 ABCD,那么可以使用以下命令即可:cp /etc/vim/vimrc ~/.vimrc
修復(fù)。
添加以下內(nèi)容。
<property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property>
啟動(dòng) Hadoop
同 Linux。
構(gòu)建依賴
使用 Intellij IDEA 新建一個(gè) Gradle 項(xiàng)目,在 Build.gradle 中加入以下依賴(對(duì)應(yīng)容器 Hadoop 版本)。
compile group: 'org.apache.hadoop', name: 'hadoop-common', version: '2.7.2' compile group: 'org.apache.hadoop', name: 'hadoop-hdfs', version: '2.7.2'
Demo
import org.apache.commons.io.IOUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org.junit.Before; import org.junit.Test; import java.io.FileInputStream; import java.io.IOException; import java.net.URI; /** * Created by kingcos on 25/03/2017. */ public class HDFSOperations { FileSystem fileSystem; @Before public void configure() throws Exception { Configuration configuration = new Configuration(); configuration.set("fs.defaultFS", "hdfs://192.168.1.120:9000"); fileSystem = FileSystem.get(URI.create("hdfs://192.168.1.120:9000"), configuration, "root"); } @Test public void listFiles() throws IOException { Path path = new Path("/"); RemoteIterator<LocatedFileStatus> iterator = fileSystem.listFiles(path, true); while (iterator.hasNext()) { LocatedFileStatus status = iterator.next(); System.out.println(status.getPath().getName()); } } @Test public void rm() throws IOException { Path path = new Path("/"); fileSystem.delete(path, true); } @Test public void mkdir() throws IOException { Path path = new Path("/demo"); fileSystem.mkdirs(path); } }
之后便可以通過(guò) IDEA 直接寫(xiě)代碼來(lái)測(cè)試,這里簡(jiǎn)單寫(xiě)了幾個(gè)方法。
總結(jié)
在寫(xiě)這篇文章之前,其實(shí)我對(duì) Docker 的概念很不了解。但是通過(guò) Learn by do it. 大致知道了其中的概念和原理。我們完全可以構(gòu)建自己的容器 Dockerfile,來(lái)部署生產(chǎn)和開(kāi)發(fā)環(huán)境,其強(qiáng)大的可移植性大大縮短配置的過(guò)程。
由于個(gè)人對(duì) Hadoop 和 Docker 的了解甚少,如有錯(cuò)誤,希望指出,我會(huì)學(xué)習(xí)、改正。
相關(guān)文章
docker 容器添加指定網(wǎng)絡(luò)地址的方法實(shí)現(xiàn)
Docker容器運(yùn)行的時(shí)候默認(rèn)會(huì)自動(dòng)分配一個(gè)默認(rèn)網(wǎng)橋所在網(wǎng)段的IP地址,本文主要介紹了docker容器添加指定網(wǎng)絡(luò)地址的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01Docker簡(jiǎn)單安裝與應(yīng)用入門(mén)教程
這篇文章主要介紹了Docker簡(jiǎn)單安裝與應(yīng)用,結(jié)合實(shí)例形式分析了Docker常見(jiàn)的安裝、應(yīng)用構(gòu)建、終端訪問(wèn)等操作相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2018-06-06docker?搭建?vulhub?靶場(chǎng)環(huán)境的詳細(xì)過(guò)程
Vulhub是一個(gè)基于docker和docker-compose的漏洞環(huán)境集合,進(jìn)入對(duì)應(yīng)目錄并執(zhí)行一條語(yǔ)句即可啟動(dòng)一個(gè)全新的漏洞環(huán)境,讓漏洞復(fù)現(xiàn)變得更加簡(jiǎn)單,讓安全研究者更加專注于漏洞原理本身,這篇文章給大家介紹docker?搭建?vulhub?靶場(chǎng)環(huán)境的過(guò)程,感興趣的朋友一起看看吧2022-08-08Docker搭建私有倉(cāng)庫(kù)(registry與Harbor)的實(shí)現(xiàn)
這篇文章主要介紹了Docker搭建私有倉(cāng)庫(kù)(registry與Harbor)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12docker學(xué)習(xí)筆記之把容器commit成鏡像的方法
本篇文章主要介紹了docker學(xué)習(xí)筆記之把容器commit成鏡像,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05Docker暴露2375端口導(dǎo)致服務(wù)器被攻擊問(wèn)題及解決方法
這篇文章主要介紹了Docker暴露2375端口導(dǎo)致服務(wù)器被攻擊問(wèn)題及解決方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04將普通用戶加入Docker組,使用docker問(wèn)題
這篇文章主要介紹了將普通用戶加入Docker組,使用docker問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06docker如何導(dǎo)出指定時(shí)間段內(nèi)日志
這篇文章主要介紹了docker如何導(dǎo)出指定時(shí)間段內(nèi)日志問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05