Docker部署Hadoop叢集
前幾天寫了文章“Hadoop 叢集搭建”之後,一個朋友留言說希望介紹下如何使用Docker部署,這個建議很好,Docker不僅在生產環境威力巨大,對於我們在自己電腦中搭建學習實驗環境更是非常便利
搭建一個叢集環境時需要多臺伺服器,對於我們個人,這通常是個門檻,需要使用虛擬機器,安裝作業系統,然後執行起來多個虛機
安裝作業系統是個不太輕鬆的任務,並且執行多個虛機對個人電腦效能也有一定要求,這些門檻影響了很多小夥伴的實踐積極性
使用Docker的話就簡單了,不用安裝作業系統,直接下載一個映象,如centos,這樣作業系統就有了,基於這個系統映象執行多個容器,就相當於起了多個虛機,而且系統性能的消耗要遠小於虛擬機器
假設我們有一個 centos7 映象,啟動多個容器,每個容器都有一個IP,都能通過SSH連線操作,這樣就可以在每個容器中安裝 JAVA Hadoop,從而搭建起叢集環境了
使用Docker搭建Hadoop叢集的過程包括:
-
安裝Docker
-
獲取centos映象
-
安裝SSH
-
為容器配置IP
-
安裝JAVA和Hadoop
-
配置Hadoop
第1步比較簡單,去Docker官網下載安裝就好,第5和第6步與在獨立伺服器中的操作是一樣的,所以這裡就介紹一下2-4步的Docker操作方式
獲取centos7映象
$ docker pull centos
大概是70多M,使用阿里雲等Docker加速器的話很快就能下載完,之後在映象列表中就可以看到
檢視映象列表的命令:
$ docker images
安裝SSH
以centos7映象為基礎,構建一個帶有SSH功能的centos
$ vi Dockerfile
內容:
FROM centos MAINTAINER dys RUN yum install -y openssh-server sudo RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config RUN yum install -y openssh-clients RUN echo "root:111111" | chpasswd RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key RUN mkdir /var/run/sshd EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
這段內容的大意是:以 centos 映象為基礎,安裝SSH的相關包,設定了root使用者的密碼為 111111,並啟動SSH服務
執行構建映象的命令,新映象命名為 centos7-ssh
$ docker build -t="centos7-ssh" .
執行完成後,可以在映象列表中看到
$ docker images
設定固定IP
需要用到 pipework,他用於給容器設定IP
先下載
$ git clone https://github.com/jpetazzo/pipework.git
$ cp pipework/pipework /usr/local/bin/
安裝bridge-utils
$ yum -y install bridge-utils
建立網路
$ brctl addbr br1
$ ip link set dev br1 up
$ ip addr add 192.168.3.1/24 dev br1
基於 centos7-ssh 這個映象啟動一個容器,名為 centos7.ssh
$ docker run -d --name=centos7.ssh centos7-ssh
設定IP
$ pipework br1 centos7.ssh 192.168.3.20/24
為名為 centos7.ssh 的容器指定了IP 192.168.3.20
分別使用 ping 與 ssh 命令進行驗證,看是否可以ping通和成功登入
$ ping 192.168.3.20
$ ssh 192.168.3.20
ssh成功登入後,就意味著已經準備好了一臺伺服器,再執行2個容器、設定好IP,那麼就相當於有了3臺伺服器
$ docker run -d --name=centos7.ssh2 centos7-ssh
$ docker run -d --name=centos7.ssh3 centos7-ssh
$ pipework br1 centos7.ssh2 192.168.3.22/24
$ pipework br1 centos7.ssh3 192.168.3.23/24
這樣就有了3個可以SSH連線的容器,可以在上面安裝和配置叢集環境了
構建Hadoop映象
上面是運行了3個centos容器,需要在每個容器中單獨安裝Hadoop環境,我們可以像構建SSH映象一樣,構建一個Hadoop映象,然後執行3個Hadoop容器,這樣就更簡單了
$ vi Dockerfile
內容:
FROM centos7-ssh
ADD jdk-8u101-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_101 /usr/local/jdk1.8
ENV JAVA_HOME /usr/local/jdk1.8
ENV PATH $JAVA_HOME/bin:$PATH
ADD hadoop-2.7.3.tar.gz /usr/local
RUN mv /usr/local/hadoop-2.7.3 /usr/local/hadoop
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH $HADOOP_HOME/bin:$PATH
RUN yum install -y which sudo
這裡是基於 centos7-ssh 這個映象,把 JAVA 和 Hadoop 的環境都配置好了
前提:在Dockerfile所在目錄下準備好 jdk-8u101-linux-x64.tar.gz 與 hadoop-2.7.3.tar.gz
執行構建命令,新映象命名為 hadoop
$ docker build -t="hadoop" .
執行3個hadoop容器,分別命名為 hadoop0,hadoop1,hadoop2,hadoop0 作為master
$ docker run --name hadoop0 --hostname hadoop0 -d -P -p 50070:50070 -p 8088:8088 hadoop
$ docker run --name hadoop1 --hostname hadoop1 -d -P hadoop
$ docker run --name hadoop2 --hostname hadoop2 -d -P hadoop
容器hadoop0啟動時,映射了埠號,50070和8088,是用來在瀏覽器中訪問hadoop WEB介面的
配置IP
$ pipework br1 hadoop0 192.168.3.30/24
$ pipework br1 hadoop1 192.168.3.31/24
$ pipework br1 hadoop2 192.168.3.32/24
配置Hadoop叢集
新開3個終端視窗,分別連線到 hadoop0,hadoop1,hadoop2,便於操作
$ docker exec -it hadoop0 /bin/bash
$ docker exec -it hadoop1 /bin/bash
$ docker exec -it hadoop2 /bin/bash
在各個容器中修改 /etc/hosts,新增:
192.168.3.30 master
192.168.3.31 slave1
192.168.3.32 slave2
接下來就是配置SSH免登入,及hadoop的配置檔案了,方法和之前“Hadoop叢集搭建”中的一樣
這樣就使用Docker實現了Hadoop叢集的搭建