如果想在一臺電腦上搭建一個多節點的Hadoop集群,傳統的方式是使用多個虛擬機。但這種方式占用的資源比較多,一臺筆記本能同時運行的虛擬機的數量是很有限的。這個時候我們可以使用Docker。Docker可以看做是一種輕量級的虛擬機,占用資源少,用起來和傳統的虛擬機很像,使用的時候可以類比VMware或 ...
如果想在一臺電腦上搭建一個多節點的Hadoop集群,傳統的方式是使用多個虛擬機。但這種方式占用的資源比較多,一臺筆記本能同時運行的虛擬機的數量是很有限的。這個時候我們可以使用Docker。Docker可以看做是一種輕量級的虛擬機,占用資源少,用起來和傳統的虛擬機很像,使用的時候可以類比VMware或VirtualBox。
本文不能讓你精通Docker,但能讓你快速上手,並搭建好這個集群,前提是你對Hadoop和Linux有所瞭解。
〇、準備工作
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宿主機上備用。
一、安裝Docker
現在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-utils
$ sudo yum install -y yum-utils
2.添加Docker CE的yum源
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.更新yum包索引
$ sudo yum makecache fast
4.安裝Docker CE
$ sudo yum install docker-ce
安裝過程中如有類似Is this ok [y/N]的提問,都輸入y,然後回車即可。直到最後顯示“Complete!”表示安裝成功!
二、Docker初體驗
1.啟動Docker
$ sudo systemctl start docker
2.查看Docker版本
$ sudo docker -v
預設安裝的是最新版本,我們可以看到當前最新版本是Docker version 17.03.1-ce, build c6d412e。
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了。
三、Docker中的一些概念
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把他們放鏡像的地方叫做Docker Hub。
1.搜索鏡像
下麵以centos為例
$ docker search centos
在搜索結果列表中OFFICIAL列中有[OK]的表示是官方的鏡像。我們看到第一個就是官方的。
2.下載鏡像
$ docker pull centos
預設下載最新版
3.查看鏡像
$ docker images
從上圖中可以看到剛下載的centos鏡像已經在列表中了,大小為193MB。需要註意的是Docker中的鏡像都是針對Docker設計的,只能在Docker中使用。比如剛下載的這個centos鏡像不能用來裝系統哦。Docker中的操作系統鏡像比用來裝系統的ISO鏡像要小的多。
五、Docker容器基本操作
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
下篇:用Docker在一臺筆記本電腦上搭建一個具有10個節點7種角色的Hadoop集群(下)-搭建Hadoop集群