使用docker部署hadoop集群


注意:本文不討論linux虛擬機的安裝和docker的安裝

1、環境

    1.1、宿主機

        內核版本:Linux localhost 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) x86_64 GNU/Linux

        系統版本:Debian 8

    1.2、docker

        版本:Docker version 1.9.1, build a34a1d5

        鏡像版本:crxy/centos

        

2、宿主機中創建用戶和分組

    2.1、創建docker用戶組

        sudo groupadd docker

    2.2、添加當前用戶到docker用戶組里

        sudo gpasswd -a *** docker    注:***為當前系統用戶名

    2.3、重啟docker后台監控進程

        sudo service docker restart

    2.4、重啟后,看docker服務是否生效

        docker version

    2.5、如果沒有生效,可以重試重啟系統

        sudo reboot

3、Dockerfile創建docker鏡像

    3.1創建ssh功能鏡像,並設置鏡像賬號:root密碼:root

        cd /usr/local/

        mkdir dockerfile

        cd dockerfile/

        mkdir centos-ssh-root

        cd centos-ssh-root

        vi Dockerfile    注:docker識別的dockerfile格式Dockerfile(首字母必須大寫)

 
 
 
         
  1. # 選擇一個已有的os鏡像作為基礎  
  2. FROM centos
  3. # 鏡像的作者  
  4. MAINTAINER crxy
  5. # 安裝openssh-server和sudo軟件包,並且將sshd的UsePAM參數設置成no  
  6. RUN yum install -y openssh-server sudo  
  7. RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config  
  8. #安裝openssh-clients
  9. RUN yum  install -y openssh-clients
  10. # 添加測試用戶root,密碼root,並且將此用戶添加到sudoers里  
  11. RUN echo "root:root" | chpasswd  
  12. RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers  
  13. # 下面這兩句比較特殊,在centos6上必須要有,否則創建出來的容器sshd不能登錄  
  14. RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key  
  15. RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key  
  16. # 啟動sshd服務並且暴露22端口  
  17. RUN mkdir /var/run/sshd  
  18. EXPOSE 22  
  19. CMD ["/usr/sbin/sshd", "-D"]

        創建鏡像命令:

        docker build -t=’crxy/centos-ssh-root‘ .

        創建完成后查看鏡像生成情況:

        docker images

        

    3.2、創建jdk鏡像

        注:jdk使用1.7版本及以上版本

        cd ..

        mkdir centos-ssh-root-jdk

        cd centos-ssh-root-jdk

        cp ../../jdk-7u80-linux-x64.tar.gz .

        vi Dockerfile

 
 
 
         
  1. #上一步中生成的鏡像
  2. FROM crxy/centos-ssh-root
  3. ADD jdk-7u75-linux-x64.tar.gz /usr/local/
  4. RUN mv /usr/local/jdk1.7.0_75 /usr/local/jdk1.7
  5. ENV JAVA_HOME /usr/local/jdk1.7
  6. ENV PATH $JAVA_HOME/bin:$PATH

        創建鏡像命令:

        docker build -t=’crxy/centos-ssh-root-jdk‘ .

        創建完成后查看鏡像生成情況:

        docker images

        

    3.3、根據jdk鏡像創建hadoop鏡像

        cd ..

        mkdir centos-ssh-root-jdk-hadoop

        cd centos-ssh-root-jdk-hadoop

        cp ../../hadoop-2.2.0.tar.gz  .        

        vi Dockerfile

 
 
 
         
  1. #從crxy/centos-ssh-root-jdk版本創建
  2. FROM crxy/centos-ssh-root-jdk
  3. ADD hadoop-2.2.0-src.tar.gz /usr/local
  4. #安裝which軟件包
  5. RUN yum install which
  6. #安裝net-tools軟件包
  7. RUM yum install net-tools
  8. ENV HADOOP_HOME /usr/local/hadoop-2.2.0
  9. ENV PATH $HADOOP_HOME/bin:$PATH

        創建鏡像命令:

        docker build -t=’crxy/centos-ssh-root-jdk-hadoop‘ .

        創建完成后查看鏡像生成情況:

        docker images

        

4、搭建hadoop分布式集群

    4.1、hadoop集群規划

        master:hadoop0 ip:172.17.0.10

        slave1:hadoop1 ip:172.17.0.10

        slave2:hadoop2 ip:172.17.0.10

        查看docker橋接網卡dcker0

        

    4.2、創建容器並啟動容器,hadoop0、hadoop1、hadoop2        

 
 
 
         
  1. #主節點
  2. docker run --name hadoop0 --hostname hadoop0 -d -P -p 50070:50070 -p 8088:8088 crxy/centos-ssh-root-jdk-hadoop
  3. #node
  4. docker run --name hadoop1 --hostname hadoop1 -d -P crxy/centos-ssh-root-jdk-hadoop
  5. #node
  6. docker run --name hadoop2 --hostname hadoop2 -d -P crxy/centos-ssh-root-jdk-hadoop

        查看容器:docker ps -a

        4.3、為hadoop集群設置固定ip

        4.3.1、下載pipework

        https://github.com/jpetazzo/pipework.git

        4.3.2、把下載的zip包上傳到宿主機服務器上,解壓,改名字

 
 
 
         
  1. unzip pipework-master.zip
  2. mv pipework-master pipework
  3. cp -rp pipework/pipework /usr/local/bin/

        4.3.3、安裝bridge-utils             

 
 
 
         
  1. yum -y install bridge-utils

        4.3.4、給容器設置固定ip

 
 
 
         
  1. pipework docker0 hadoop0 172.17.0.10/24
  2. pipework docker0 hadoop1 172.17.0.11/24
  3. pipework dcoker0 hadoop2 172.17.0.12/24

        4.3.5、驗證ip是否通

        

    4.4、配置hadoop0

        4.4.1、鏈接hadoop0

        docker exec -it hadoop0 /bin/bash

        4.4.2、為hadoop0添加host

        vi /etc/hosts

 
 
 
         
  1. 172.17.0.10 hadoop0
  2. 172.17.0.11 hadoop1
  3. 172.17.0.12 hadoop2

        4.4.3、hadoop0上修改hadoop的配置文件

        cd /usr/local/hadoop/etc/hadoop-2.2.0

        修改四大配置文件:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml

        1)、hadoop-env.sh

 
 
 
         
  1. #導入環境變量
  2. export JAVA_HOME=/usr/local/jdk1.7

        2)、core-site.xml

 
 
 
         
  1. <configuration>
  2.        <property>
  3.                <name>fs.defaultFS</name>
  4.                <value>hdfs://hadoop0:9000</value>
  5.        </property>
  6.        <property>
  7.                <name>hadoop.tmp.dir</name>
  8.                <value>/usr/local/hadoop/tmp</value>
  9.        </property>
  10.         <property>
  11.                 <name>fs.trash.interval</name>
  12.                 <value>1440</value>
  13.        </property>
  14. </configuration>

        3)、hdfs-site.xml

 
 
 
         
  1. <configuration>
  2.    <property>
  3.        <name>dfs.replication</name>
  4.        <value>1</value>
  5.    </property>
  6.    <property>
  7.        <name>dfs.permissions</name>
  8.        <value>false</value>
  9.    </property>
  10. </configuration>

        4)、yarn-site.xml

 
 
 
         
  1. <configuration>
  2.        <property>
  3.            <name>yarn.nodemanager.aux-services</name>
  4.            <value>mapreduce_shuffle</value>
  5.        </property>
  6.        <property>
  7.            <name>yarn.log-aggregation-enable</name>
  8.            <value>true</value>
  9.        </property>
  10. <property>
  11.            <description>The hostname of the RM.</description>
  12.            <name>yarn.resourcemanager.hostname</name>
  13.            <value>hadoop0</value>
  14.        </property>
  15. </configuration>

        5)、mapred-site.xml

        cp mapred-site.xml.template mapred-site.xml

 
 
 
         
  1. <configuration>
  2.    <property>
  3.        <name>mapreduce.framework.name</name>
  4.        <value>yarn</value>
  5.    </property>
  6. </configuration>

        4.4.4、格式化hdfs

 
 
 
         
  1. bin/hdfs namenode -format    

    4.5、配置hadoop1、hadoop2、

        4.5.1、執行4.4配置

    4.6、切回到hadoop0,執行ssh免密碼登陸

        4.6.1 、配置ssh

 
 
 
         
  1. cd  ~
  2. mkdir .ssh
  3. cd .ssh
  4. ssh-keygen -t rsa(一直按回車即可)
  5. ssh-copy-id -i localhost
  6. ssh-copy-id -i hadoop0
  7. ssh-copy-id -i hadoop1
  8. ssh-copy-id -i hadoop2
  9. hadoop1上執行下面操作
  10. cd  ~
  11. cd .ssh
  12. ssh-keygen -t rsa(一直按回車即可)
  13. ssh-copy-id -i localhost
  14. ssh-copy-id -i hadoop1
  15. hadoop2上執行下面操作
  16. cd  ~
  17. cd .ssh
  18. ssh-keygen -t rsa(一直按回車即可)
  19. ssh-copy-id -i localhost
  20. ssh-copy-id -i hadoop2

        4.6.2、配置slaves

        vi etc/hadoop/slaves

 
 
 
         
  1. hadoop1
  2. hadoop2

        4.6.3、執行遠程復制

 
 
 
         
  1. scp  -rq /usr/local/hadoop-2.2.0   hadoop1:/usr/local
  2. scp  -rq /usr/local/hadoop-2.2.0   hadoop2:/usr/local

5、啟動hadoop集群

    5.1、啟動

    

    hadoop namenode -format -clusterid clustername  

    cd /usr/local/hadoop-2.2.0

    sbin/start-all.sh

    5.2、驗證集群啟動是否正常

        5.2.1、hadoop0

        jps

        

        5.2.2、hadoop1

        jps

        

        5.2.3、hadoop2

        jps

        

    5.3、驗證hafs文件系統狀態

    bin/hdfs dfsadmin -report

6、測試hdfs、yarn是否正常

    6.1、創建普通文件在master主機上(hadoop0)

    1)、查看文件系統中是否有文件存在

    hadoop fs -ls

    

    2)、創建dfs文件夾,#默認/user/$USER

    hadoop fs -mkdir /user/data

    

    3)、創建普通文件在用戶文件夾

    

    

    4)、將文件寫入dfs文件系統中

    hadoop fs -put /home/suchao/data/1.txt /user/data     

    5)、在終端顯示

    hadoop fs -cat /user/data/1.txt    

摘自:http://blog.csdn.net/xu470438000/article/details/50512442







免責聲明!

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



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