1. 程式人生 > >用Docker在一臺膝上型電腦上搭建一個具有10個節點7種角色的Hadoop叢集(上)-快速上手Docker

用Docker在一臺膝上型電腦上搭建一個具有10個節點7種角色的Hadoop叢集(上)-快速上手Docker

如果想在一臺電腦上搭建一個多節點的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示例會出現下面的錯誤提示:

[[email protected] ~]$ 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