若是想在一臺電腦上搭建一個多節點的Hadoop集羣,傳統的方式是使用多個虛擬機。但這種方式佔用的資源比較多,一臺筆記本能同時運行的虛擬機的數量是頗有限的。這個時候咱們可使用Docker。Docker能夠看作是一種輕量級的虛擬機,佔用資源少,用起來和傳統的虛擬機很像,使用的時候能夠類比VMware或VirtualBox。
本文不能讓你精通Docker,但能讓你快速上手,並搭建好這個集羣,前提是你對Hadoop和Linux有所瞭解。html
1.準備Docker宿主機
目前Docker只能運行在內核版本爲3.10或以上的64位Linux上。安裝Docker的Linux系統稱爲Docker的宿主機。若是你的系統不符合,能夠先安裝一臺符合要求的虛擬機,而後再在這個虛擬機上使用Docker。個人筆記本是Windows系統,裝了一臺64位CentOS7.3虛擬機作演示。因爲要將10個節點都跑在一臺虛擬機上,因此給這臺虛擬機分配的資源不能太少,不然會有問題。雖然Docker比虛擬機省了很多資源,但Hadoop須要的資源省不了啊。我給分配了2個核,4G內存,這比用10臺虛擬機須要的資源仍是小不少的。另外由於只須要一臺Linux,因此在筆記本上裝雙系統也是能夠的。
2.準備相關軟件
JDK使用jdk-7u80-linux-x64
Hadoop使用hadoop-2.7.3
將JDK和Hadoop提早下載並減壓,放到Docker宿主機上備用。linux
如今Docker分爲社區版Docker CE和企業版Docker EE。Docker CE免費,Docker EE收費。Docker CE又分爲Docker CE Edge和Docker CE Stable。Docker CE Edge每1個月發佈一個版本,Docker CE Stable每3個月發佈一個版本。Stable表示穩定版,因此下面只介紹Docker CE Stable。
1.安裝yum-utilsdocker
$ sudo yum install -y yum-utils
2.添加Docker CE的yum源shell
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.更新yum包索引ubuntu
$ sudo yum makecache fast
4.安裝Docker CEcentos
$ sudo yum install docker-ce
安裝過程當中若有相似Is this ok [y/N]的提問,都輸入y,而後回車便可。直到最後顯示「Complete!」表示安裝成功!bash
1.啓動Docker服務器
$ sudo systemctl start docker
2.查看Docker版本app
$ sudo docker -v
默認安裝的是最新版本,咱們能夠看到當前最新版本是Docker version 17.03.1-ce, build c6d412e。socket
3.運行hello world示例
$ sudo docker run hello-world
官方給提供了一個hello-world示例,用來測試Docker是否正常工做。第一次運行時,Docker須要從官網下載該示例,不過很小,下載很快。只要能輸出下面的英文,就說明hello-world示例運行成功了!
Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://cloud.docker.com/ For more examples and ideas, visit: https://docs.docker.com/engine/userguide/
4.去掉sudo
對於非root用戶,不少Docker命令都必須用sudo才能正常執行。好比不用sudo運行剛纔的hello-world示例會出現下面的錯誤提示:
[chengyujia@localhost ~]$ docker run hello-world docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.27/containers/create: dial unix /var/run/docker.sock: connect: permission denied. See 'docker run --help'.
老用sudo挺麻煩的,下面介紹解決的辦法。Docker在安裝的時候會生成一個叫docker的用戶組,只要把你使用的用戶加到這個組裏就能免sudo了。
下面咱們來加入docker組
$ sudo usermod -aG docker chengyujia
而後退出當前shell,從新登陸一下,之後就不用sudo了。
1.鏡像image和容器container
若是將Docker比做是VMware,鏡像能夠比做是ISO文件,容器能夠比做是安裝好的虛擬機。鏡像不能直接使用,經過鏡像能夠建立容器,而後咱們使用容器。在使用上,容器和虛擬機很像,咱們在容器裏能夠隨便折騰,折騰壞了也不要緊,只要相應的鏡像在,隨時能夠建立一個新的容器。並且不管是建立容器仍是啓動容器都比虛擬機快不少。
2.查看本機上的鏡像
$ sudo docker images
先介紹一下相關的詞義:
REPOSITORY 能夠理解爲鏡像的名稱。
TAG 能夠理解爲鏡像的版本。
IMAGE ID 鏡像的編號。在建立鏡像時自動生成。
CREATED 鏡像的建立時間。
SIZE 鏡像的大小。
從截圖上能夠看到,如今只有一個叫hello-world的鏡像,就是剛纔咱們運行hello-world示例自動下載的。默認會下載最新版,也就是TAG爲latest的版本,鏡像編號爲48b5124b2768,建立於4個月前,大小爲1.84kB。
3.查看本機上的容器
$ sudo docker ps -a
命令中的-a參數表示顯示全部容器,不然只顯示正在運行的容器。
一樣先介紹一下相關的詞義:
CONTAINER ID 容器的編號。在建立容器時自動生成。
IMAGE 鏡像名稱或鏡像編號。用來指明該容器是用哪一個鏡像建立的。
COMMAND 容器啓動後執行的命令。
CREATED 容器建立的時間。
STATUS 容器的當前狀態。Exited表示容器處於退出狀態,相似於電腦「已關機」;Up表示容器正在運行。
PORTS 端口映射。若是有的話也只能在運行狀態才能看到。具體狀況後面搭集羣時再介紹。
NAMES 容器名稱。這個能夠本身指定或修改,但不能和其它容器的名稱相同。若是不指定,Docker會自動生成。
從截圖上能夠看到,當前只有一個容器,就是剛纔的hello-world示例,容器編號爲42989ad0874a,使用hello-world鏡像建立,啓動後執行一個叫hello的命令,建立於12分鐘前,如今處於退出狀態,docker自動給起了個名字elegant_mccarthy。
4.剛纔hello-world示例中生成的容器是否是就能像虛擬機同樣用了呢?
不能。咱們使用類比來解釋,ISO文件經常使用來裝系統,但ISO文件不是隻能裝系統,裏面能夠聽任何文件。一樣,docker鏡像裏也未必帶操做系統功能,官網的hello-world鏡像就不帶。用它來生成的容器,只能輸出一段話,沒有其它功能,畢竟只是一個1k多東西。下面來介紹咱們真正要用的東西。
Docker的服務器上有不少鏡像,分爲兩類,一類是Docker官方的,另外一類是普通用戶上傳的。Docker把他們放鏡像的地方叫作Docker Hub。
1.搜索鏡像
下面以centos爲例
$ docker search centos
在搜索結果列表中OFFICIAL列中有[OK]的表示是官方的鏡像。咱們看到第一個就是官方的。
2.下載鏡像
$ docker pull centos
默認下載最新版
3.查看鏡像
$ docker images
從上圖中能夠看到剛下載的centos鏡像已經在列表中了,大小爲193MB。須要注意的是Docker中的鏡像都是針對Docker設計的,只能在Docker中使用。好比剛下載的這個centos鏡像不能用來裝系統哦。Docker中的操做系統鏡像比用來裝系統的ISO鏡像要小的多。
1.建立並運行容器
$ docker run -it -h pseudo-distributed --name pseudo-distributed centos
說明:
docker run 表示建立一個容器並運行。
-it 表示容器運行後直接進入容器內部的命令行。此時就能夠像操做虛擬機同樣操做這個容器了。
-h 表示容器的主機名hostname,和虛擬機的hostname同樣。若是不指定,Docker會用CONTAINER ID來做爲hostname。
--name 表示容器的名稱。這個前面已經提到了,若是本身不指定,Docker會自動分配一個名稱。不過仍是本身指定的更有意義。
其中主機名和容器名一不同都行,我這裏是給了同樣的,都是pseudo-distributed。
最後一個參數centos是鏡像名稱,表示該容器用哪一個鏡像建立。
這個過程相似於用ISO文件裝系統。
2.退出當前容器並保持其繼續運行
快捷鍵Ctrl+p+q
3.進入正在運行的容器
$ docker attach pseudo-distributed
4.退出當前容器並中止其運行
# exit
5.啓動已中止運行的容器
$ docker start -i pseudo-distributed
$ docker start -i pseudo-distributed
-i 表示啓動後直接進入該容器
6.關閉正在運行的容器
$ docker stop pseudo-distributed