前幾天寫了文章“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集群的搭建
本文分享自微信公眾號 - 性能與架構(yogoup),作者:杜亦舒