zoukankan      html  css  js  c++  java
  • 使用Docker搭建Hadoop集群(伪分布式与完全分布式)

      之前用虚拟机搭建Hadoop集群(包括伪分布式和完全分布式:Hadoop之伪分布式安装),但是这样太消耗资源了,自学了Docker也来操练一把,用Docker来构建Hadoop集群,这里搭建的Hadoop主要服务于之前没有完成的项目:网站日志流量分析系统(该系统目前用虚拟机实现了离线分析模块,实时分析由于资源问题尚未完成,我想这次不担心了)考虑到阿里云ECS对于我个人来说,成本有点太高了,但是自从学了Dokcer以后,我再也不怕了,用这一台就够啦,哈哈哈哈……下面开始吧!安装过程较长,so please be patient!

    一、环境准备

      ①阿里云轻量应用服务器(学生价很实惠的~),我的配置:1C、2G、40G(足够了)

      ②CentOS7.3,内核4.4(可用uname -r 查看,自带的3.10.x可能会导致Docker运行不稳定,鄙人踩过的坑,可参考鄙人另一篇博客:从centos7镜像到搭建kubernetes集群(kubeadm方式安装)里面有关于升级内核命令)

      ③Docker版本:19.03.5(安装参考官网即可,镜像加速可参考鄙人另一篇博客:Docker配置阿里云镜像源

      ④JDK1.8:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

      ⑤Hadoop:http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.ta​​r.gz (ps:source为源码包,binary为安装包)

    二、构建ssh-centos镜像

    1、创建对应目录

    mkdir centos-ssh
    cd centos-ssh
    vim Dockerfile    #这里docker build时缺省名为Dockerfile

    2、编写Dockerfile

    FROM centos
    
    # 镜像的作者  
     MAINTAINER xiedong
    
    # 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no  
    RUN yum install -y openssh-server sudo
    RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
    #安装openssh-clients
    RUN yum  install -y openssh-clients
    
    # 添加测试用户root,密码root,并且将此用户添加到sudoers里  
    RUN echo "root:root" | 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
    # 启动sshd服务并且暴露22端口  
    RUN mkdir /var/run/sshd
    EXPOSE 22
    CMD ["/usr/sbin/sshd", "-D"]
    View Code

    3、构建镜像

    docker build -t 'xd/centos-ssh' .    #注意别忘记末尾的点

    三、构建jdk1.8镜像

    1、创建目录并上传JDK至该目录

    mkdir centos-ssh-root-jdk
    cd centos-ssh-root-jdk

    2、编辑Dockefile(docker build 缺省名为Dockerfile)

    #基于上一个ssh镜像构建
    FROM xd/centos-ssh
    #拷贝并解压jdk ADD jdk-8u231-linux-x64.tar.gz /usr/local/ RUN mv /usr/local/jdk1.8.0_231 /usr/local/jdk1.8 ENV JAVA_HOME /usr/local/jdk1.8 ENV PATH $JAVA_HOME/bin:$PATH

    3、构建jdk1.8镜像

    docker build -t 'xd/centos-jdk' .

    四、构建hadoop镜像

    1、创建目录并上传Hadoop安装包

    mkdir centos-ssh-root-jdk-hadoop
    cd centos-ssh-root-jdk-hadoop

    2、编写Dockerfile

    FROM xd/centos-jdk
    ADD hadoop-2.7.7.tar.gz /usr/local
    RUN mv /usr/local/hadoop-2.7.7 /usr/local/hadoop
    ENV HADOOP_HOME /usr/local/hadoop
    ENV PATH $HADOOP_HOME/bin:$PATH

    3、构建镜像

    docker build -t 'xd/hadoop' .

    五、启动容器并固定IP

    1、集群规划

    主节点:hadoop0 ip:192.168.2.10

    从节点1:hadoop1 ip:192.168.2.11

    从节点2:hadoop2 ip:192.168.2.12

    ps:这里Docker容器重启后IP会发生变化,所以需要给Docker设置固定IP,使用pipework给docker固定ip

    2、启动容器

      分别为hadoop0、hadoop1、hadoop2

    docker run --name hadoop0 --hostname hadoop0 -d -P -p 50070:50070 -p 8088:8088 xd/hadoop    #hadoop0对外开放端口50070和8088
    docker run --name hadoop1 --hostname hadoop1 -d -P xd/hadoop
    docker run --name hadoop2 --hostname hadoop2 -d -P xd/hadoop

    docker ps查看刚刚启动的3个容器

    3、固定IP

      docker容器重启以后ip会发生变化,所以这里通过pipework给docker固定ip,pipework下载地址:https://github.com/jpetazzo/pipework

    ①上传、解压并改名该压缩包

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

    ②安装birdge-utils

    yum -y install bridge-utils

    ③创建网络

    brctl addbr br0
    ip link set dev br0 up
    ip addr add 192.168.2.1/24 dev br0

    ④设置固定IP

    pipework br0 hadoop0 192.168.2.10/24
    pipework br0 hadoop1 192.168.2.11/24
    pipework br0 hadoop2 192.168.2.12/24

    ⑤验证

    分别ping这3个ip即可验证ip是否设定成功

    六、集群搭建

    ps:以下操作均是对hadoop0主节点配置(可参考博主之前写的虚拟机内搭建的Hadoop集群:Hadoop之伪分布式安装)----还是那条路子:配置主机名与IP映射、ssh免密登录……等。

    1、进入容器

    docker exec -it hadoop0 /bin/bash        (当然也可以用attach进入)

    2、配置主机名与IP映射(3个节点)

    192.168.2.10    hadoop0
    192.168.2.11    hadoop1
    192.168.2.12    hadoop2

    3、ssh免密登录

    ssh-keygen
    #剩下的一路回车即可
    ssh-copy-id hadoop0
    #根据提示输入yes以及主机密码,开头我们设置的是root/root

    ssh-copy-id hadoop1
    ssh-copy-id hadoop2

    4、hadoop的相关配置

    进入/usr/local/hadoop/etc/hadoop目录,涉及的配置文件有:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml

    ①配置hadoop-env.sh

    export JAVA_HOME=/usr/local/jdk1.8          #修改JAVA_HOME

    ②core-site.xml

    <configuration>
            <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://hadoop0:9000</value>
            </property>
            <property>
                    <name>hadoop.tmp.dir</name>
                    <value>/usr/local/hadoop/tmp</value>
            </property>
             <property>
                     <name>fs.trash.interval</name>
                     <value>1440</value>
            </property>
    </configuration>

    ③hdfs-site.xml

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
        <property>
            <name>dfs.permissions</name>
            <value>false</value>
        </property>
    </configuration>

    ④yarn-site.xml

    <configuration>
            <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
            </property>
            <property> 
                    <name>yarn.log-aggregation-enable</name> 
                    <value>true</value> 
            </property>
    </configuration>

    ⑤mapred-site.xml(需要修改模板:mv mapred-site.xml.template mapred-site.xml)

    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>

    5、格式化hadoop并启动伪分布式hadoop

    进入进入到/usr/local/hadoop目录下

    ①格式化(格式化操作不能重复执行。如果一定要重复格式化,带参数-force即可)

    bin/hdfs namenode -format
    注意:在执行的时候会报错,是因为缺少which命令,安装即可
    
    执行下面命令安装
    yum install -y which

     ②启动伪分布hadoop

    sbin/start-all.sh

     6、完全分布式hadoop搭建

    进入/usr/local/hadoop

    ①停止上一步的伪分布式hadoop

    sbin/stop-all.sh

    ②指定nodemanager的地址,修改文件yarn-site.xml

    <property>
        <description>The hostname of the RM.</description>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop0</value>
      </property>

    ③修改hadoop0中hadoop的一个配置文件etc/hadoop/slaves

    删除原来的所有内容,修改为如下

    hadoop1
    hadoop2

    ④拷贝至其他两个节点

     scp -rq /usr/local/hadoop/ hadoop1:/usr/local/
     scp -rq /usr/local/hadoop/ hadoop2:/usr/local/

    ⑤启动hadoop分布式集群服务

    执行sbin/start-all.sh

    ps:在执行的时候会报错,是因为两个从节点缺少which命令,安装即可(yum install -y which

    7、验证完全分布式集群是否正常

    ①hadoop0主节点需要有以下进程

     ②hadoop1从节点需要有以下进程

     ③hadoop2从节点需要有以下进程

     七、wordcount单词计数验证集群服务

    1、创建本地文件并写入任意内容

    vi a.txt
    hello hadoop
    hello spark
    hello flink

    2、上传该文件至HDFS并验证是否上传成功

    hdfs dfs -put a.txt /
    hadoop fs -ls /

      

     3、提交job程序至hadoop集群

    cd /usr/local/hadoop/share/hadoop/mapreduce
    
    hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /a.txt /out

     4、查看计算结果

    hadoop fs -ls /out
    hadoop fs -cat /out/part-r-00000

       至此、使用Docker搭建Hadoop集群成功!

    八、浏览器访问Hadoop集群服务

    1、docker ps查看主节点容器

     启动的容器的时候指定了对外开放端口:50070和8088

    2、浏览器访问:http://IP:50070/dfshealth.html#tab-overview即可看到以界面

    3、浏览器访问:http://IP:8088/cluster

     九、重启容器注意点

    1、停止3个容器

    docker stop hadoop0
    docker stop hadoop1
    docker stop hadoop2

    2、启动3个容器

    docker start hadoop0
    docker start hadoop1
    docker start hadoop2

    3、固定IP

    pipework br0 hadoop0 192.168.2.10/24
    pipework br0 hadoop1 192.168.2.11/24
    pipework br0 hadoop2 192.168.2.12/24

    4、主机名与IP映射

    ps:每次修改比较麻烦,干脆一个脚本:runhosts.sh

    #!/bin/bash
    echo 192.168.2.10       hadoop0 >> /etc/hosts
    echo 192.168.2.11       hadoop1 >> /etc/hosts
    echo 192.168.2.12       hadoop2 >> /etc/hosts
    chmod +x runhosts.sh
    scp runhosts.sh  hadoop1:~
    scp runhosts.sh  hadoop2:~
    ./runshots.sh

    5、查看是否映射成功

      有一些docker版本中不会在hosts文件中自动生成下面这些映射,所以我们才在这里手工给容器设置固定ip,并设置主机名和ip的映射关系

    6、启动hadoop集群

    sbin/start-all.sh

    参考自:https://blog.csdn.net/xu470438000/article/details/50512442(如有侵权,请联系删除)

  • 相关阅读:
    Teamviewer12完美破解版去除时间限制完美使用
    winFrom程序更新自动安装
    sql 根据指定字符截取前面几个字符
    下拉框带搜索
    easyui 展开缩起
    p1001 谁拿了最多的奖学金
    p1217 乒乓球
    p1911 珠心算问题
    p1848 记数问题
    入坑archlinux
  • 原文地址:https://www.cnblogs.com/rmxd/p/12051866.html
Copyright © 2011-2022 走看看