Docker部署Hadoop集群


前幾天寫了文章“Hadoop 集群搭建”之后,一個朋友留言說希望介紹下如何使用Docker部署,這個建議很好,Docker不僅在生產環境威力巨大,對於我們在自己電腦中搭建學習實驗環境更是非常便利

搭建一個集群環境時需要多台服務器,對於我們個人,這通常是個門檻,需要使用虛擬機,安裝操作系統,然后運行起來多個虛機

安裝操作系統是個不太輕松的任務,並且運行多個虛機對個人電腦性能也有一定要求,這些門檻影響了很多小伙伴的實踐積極性

使用Docker的話就簡單了,不用安裝操作系統,直接下載一個鏡像,如centos,這樣操作系統就有了,基於這個系統鏡像運行多個容器,就相當於起了多個虛機,而且系統性能的消耗要遠小於虛擬機

假設我們有一個 centos7 鏡像,啟動多個容器,每個容器都有一個IP,都能通過SSH連接操作,這樣就可以在每個容器中安裝 JAVA Hadoop,從而搭建起集群環境了

使用Docker搭建Hadoop集群的過程包括:

  1. 安裝Docker
  2. 獲取centos鏡像
  3. 安裝SSH
  4. 為容器配置IP
  5. 安裝JAVA和Hadoop
  6. 配置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),作者:杜亦舒

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM