項(xiàng)目地址:https://github.com/czfshine/docker-hadoop
docker-hadoop
A dockerfile for setting up a full Hadoop cluster server
一套在ubuntu 下生成和部署Hadoop的Docker鏡像的配置文件集與示例驯嘱。
-1. 基礎(chǔ)概念
- Hadoop 一個(gè)大數(shù)據(jù)的分布式計(jì)算框架
- Docker 一個(gè)輕量級(jí)的容器服務(wù)
Hadoop 是一個(gè)分布式的計(jì)算機(jī)框架,顯然要有多臺(tái)機(jī)器(當(dāng)然可以搭偽分布式的).這時(shí)候就需要有多臺(tái)機(jī)器.可以用虛擬機(jī)模擬,但是虛擬機(jī)太重,性能損耗大.
Docker 是一個(gè)輕量級(jí)的容器服務(wù),相當(dāng)于一個(gè)虛擬機(jī),不過損耗的資源較小
- Docker 鏡像 包括運(yùn)行一個(gè)程序所需的所有文件
- Volumes 卷 一個(gè)Docker的圖層,作用于某個(gè)正在運(yùn)行的容器的鏡像上面
Docker鏡像一旦生成即不可變的,但是我們的程序要生成或獲取一些動(dòng)態(tài)的文件.Volume就是來解決這個(gè)問題的,它將Host的一個(gè)路徑與容器的一個(gè)路徑關(guān)聯(lián)起來,容器讀寫該路徑下的文件會(huì)被代理到Host關(guān)聯(lián)的路徑下.
- 端口映射 將容器的端口和主機(jī)的端口關(guān)聯(lián)起來
我們的Hadoop 的datanode和namenode什么的都會(huì)監(jiān)聽同樣的端口,我們將這些端口映射到主機(jī)的不同端口上,可以從主機(jī)訪問各個(gè)容器的狀態(tài).
- docker-compose 用來啟動(dòng)和配置多個(gè)鏡像
我們啟動(dòng)一個(gè)hadoop的docker集群,必然有多個(gè)容器要先后啟動(dòng),他們的端口和文件映射都需要獨(dú)立的進(jìn)行配置,docker-compose是一個(gè)用來的幫助我們完成這些功能的小工具
0.安裝依賴
在宿主機(jī)上需要用到的程序大概有(不完全):
docker-ce
社區(qū)版就行maven
java 的庫和項(xiàng)目管理程序idea
java的IDE
1.生成鏡像
這一步可以跳過,直接在docker hub下載我上傳的鏡像
然后在某一步出錯(cuò)或卡住,去看持續(xù)集成是怎么做的(travis-ci的腳本)
1.0 前言
其實(shí)很多人(包括我)都搭建過hadoop的鏡像,然后上傳到Docker Hub的,區(qū)別(可能)只是里面的配置文件不一樣,所以不想自己搭建的可以用搭好的,然后再改改.不過不保證可用性,下面是一些
看起來比較有用的鏡像:
1.1 參考資料
- https://github.com/docker/labs/tree/master/developer-tools/java/ 官方的docker java 示例
- https://hub.docker.com/_/openjdk openjdk的docker
1.2 鏡像繼承結(jié)構(gòu)
-
ubuntu:xenial
基礎(chǔ)的ubuntu系統(tǒng)鏡像-
hadoop-base
包括jdk,hadoop等需要用到的安裝包-
hadoop-master
主機(jī) -
hadopp-slave
計(jì)算節(jié)點(diǎn)
-
-
1.3 基礎(chǔ)鏡像搭建
我們要將運(yùn)行hadoop所需的文件,程序安裝到該鏡像
這里分成多個(gè)不同層次的鏡像構(gòu)建,還沒研究docker構(gòu)建的緩存細(xì)節(jié),所以這樣當(dāng)做手動(dòng)使用緩存,不需要每次都從零開始構(gòu)建
- 先搭個(gè)jdk8的環(huán)境
todo :這里為了省事直接apt get的,比較大,下一次改成解壓二進(jìn)制包試試大小
cd ./docker/jdk8
docker build -t czfshine/openjdk8 .
測試一下:
docker run -t -i czfshine/openjdk8:latest
java -version
- 然后是ssh
cd ./docker/ssh
docker build -t czfshine/ssh .
同樣的測試一下
docker run -t -i czfshine/ssh
ssh localhost
下面正式構(gòu)建hadoop鏡像了
首先cd到
docker/hadoop-base
文件夾下-
執(zhí)行
./download.sh
它將從清華大學(xué)鏡像站下載2.7.7版本的Hadoop這一步當(dāng)然可以寫在Dockerfile里面,可是考慮到每一次構(gòu)建鏡像都要下載一次太慢了,就算了:)
執(zhí)行
clean.sh
刪掉hadoop里面的文檔,這些我們不需要打包到鏡像的
docker build -t czfshine/hadoop-base:2.7.7 .
2.測試鏡像和啟動(dòng)
啟動(dòng)
tools
下有兩個(gè)腳本
-
start-all-containers.sh
啟動(dòng)一個(gè)hadoop集群,并attach到master -
stop-all-containers.sh
關(guān)掉并清理上一個(gè)腳本啟動(dòng)的容器
啟動(dòng)集群后,連接master,在用戶目錄下有個(gè)start-hadoop.sh腳本,執(zhí)行后會(huì)在各個(gè)節(jié)點(diǎn)啟動(dòng)對(duì)應(yīng)的hadoop服務(wù).
執(zhí)行命令和代碼
啟動(dòng)集群和服務(wù)后,在master下可以直接執(zhí)行下列類似的命令:
hadopp dfs -ls /
hadoop jar xxxx.jar xxx yyy zzz
同時(shí),掛載了宿主機(jī)的~/hadoop
到容器的/data
.需要執(zhí)行的jar包和數(shù)據(jù)可以直接放到該目錄下.
3. docker-compose 配置和啟動(dòng)
todo
4.IDEA的配置
todo :基本上開箱即用,不過可以裝幾個(gè)QOL的插件
5. 示例項(xiàng)目
在example文件夾下,具體看里面的README.MD