使用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






原文地址:https://www.cnblogs.com/linuxone/p/5574749.html