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






  • 相关阅读:
    Redis 锁
    Redis 持久化
    Redis 数据淘汰策略
    Redis 事务命令
    【vue禁止复制粘贴】
    tsconfig.json无法写入webpack.config.js 因为它会覆盖输入文件。
    npm 进阶命令知多少(一)
    如何将360度评估调查应用于员工发展?
    如何利用360度评估做好民主评议促进干部管理与选拔?
    手把手带你使用360度评估系统实施绩效反馈全流程(附详细图文)
  • 原文地址:https://www.cnblogs.com/linuxone/p/5574749.html
Copyright © 2020-2023  润新知