虚拟机准备

修改克隆主机的IP地址以及名字

  • 我们打开克隆的3台centos7虚拟机,修改里面对应的IP地址为105,106,107

    1
    vim /etc/sysconfig/network-scripts/ifcfg-eth0



  • 修改MAC地址

    在配置IP地址的文件中添加:

    1
    MACADDR=XXXXXXXXXXXXXXXX
  • 修改主机的名字,分别为105,106,107

    1
    vim /etc/sysconfig/network



  • 修改hosts配置文件,添加对应的105,106,107的IP地址

  • 为三台虚拟机配置ssh
    分别在105,106,107上面创建ssh

    1
    ssh-keygen -t rsa

    然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
    进入到.ssh文件夹,将产生的公钥拷贝到目标机器上

    1
    2
    3
    ssh-copy-id hadoop105
    ssh-copy-id hadoop106
    ssh-copy-id hadoop107
  • 编写xsync集群分发脚本
    在~/bin目录在创建xsync创建文件,文件内容如下:

    1
    2
    touch xsync
    vim xsync
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #!/bin/bash
    #1 获取输入参数个数,如果没有参数,直接退出
    pcount=$#
    if((pcount==0)); then
    echo no args;
    exit;
    fi

    #2 获取文件名称
    p1=$1
    fname=`basename $p1`
    echo fname=$fname

    #3 获取上级目录到绝对路径
    pdir=`cd -P $(dirname $p1); pwd`
    echo pdir=$pdir

    #4 获取当前用户名称
    user=`whoami`

    #5 循环
    for((host=103; host<105; host++)); do
    echo ------------------- hadoop$host --------------
    rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
    done

    其中#5 循环部分可以改成对应的主机名称
    修改脚本 xsync 具有执行权限

    1
    chmod 777 xsync

    集群配置

  • 核心配置文件
    配置core-site.xml

    1
    2
    [root@hadoop105 ~]# cd /opt/module/hadoop-2.7.7/etc/hadoop/
    [root@hadoop105 hadoop]# vim core-site.xml

    把namenode节点改成105

  • HDFS配置文件

配置hadoop-env.sh

1
2
[root@hadoop105 hadoop]# vim hadoop-env.sh
export JAVA_HOME=/opt/module/jdk-11.0.1

配置hdfs-site.xml

1
[root@hadoop105 hadoop]# vim hdfs-site.xml

在该文件中编写如下配置
1
2
3
4
5
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop107:50090</value>
</property>

  • YARN配置文件
    配置yarn-env.sh
    1
    2
    [root@hadoop105 hadoop]# vim yarn-env.sh
    export JAVA_HOME=/opt/module/jdk-11.0.1

    配置yarn-site.xml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!-- Reducer获取数据的方式 -->
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>

    <!-- 指定YARN的ResourceManager的地址 -->
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop106</value>
    </property>

  • MapReduce配置文件
    配置mapred-env.sh
    1
    2
    [root@hadoop105 hadoop]# vim mapred-env.sh
    export JAVA_HOME=/opt/module/jdk-11.0.1
    配置mapred-site.xml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@hadoop105 hadoop]# cp mapred-site.xml.template mapred-site.xml
    [root@hadoop105 hadoop]# vim mapred-site.xml

    <!-- 指定MR运行在Yarn上 -->
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>

    接着用xsync脚本把编写的文件同步到106,107
    1
    xsync /opt/module/hadoop-2.7.7/etc/hadoop/

群起集群

  • 格式化NameNode
    格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再分别在105,106,107上删除data和log数据
    1
    2
    rm -rf data/ logs/
    bin/hdfs namenode -format
  • 配置slaves

    1
    2
    3
    4
    [root@hadoop105 hadoop-2.7.7]# vim etc/hadoop/slaves
    hadoop105
    hadoop106
    hadoop107

    接着把它分发到106,107

    1
    ~/bin/xsync /opt/module/hadoop-2.7.7/etc/hadoop/slaves

  • 启动HDFS
    在hadoop105上启动:

    1
    2
    sbin/start-dfs.sh
    #sbin/stop-dfs.sh (关闭)


    分别在105,106,107上面用jps命令查看是否启动正确:


  • 启动YARN
    在hadoop106上启动:

    1
    2
    sbin/start-yarn.sh 
    #sbin/stop-yarn.sh (关闭)


    启动之后再在105,106,107上面用jps命令查看是否启动正确:



    最后我们登录 http://hadoop105:50070/explorer.html#/

    如果能成功打开,那么我们完全分布式集群就搭建成功了!

集群基本测试

我们上传一个小文件到集群上面用作测试:

1
bin/hdfs dfs -put README.txt /