前期准备

准备三台服务器,内存4G,硬盘50G

  1. 安装好Linux,笔者使用Centos 6.8 操作系统

    1
    2
    3
    /boot 200M 
    /swap 2g
    / 剩余
  2. 安装VMTools(针对VM虚拟机,若直接使用云主机便不需要这个)

  3. 关闭防火墙

    1
    2
    sudo service iptables stop
    sudo chkconfig iptables off
  4. 设置静态IP,改主机名

    1
    vim /etc/sysconfig/network-scripts/ifcfg-eth0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    改成

    ​```shell
    DEVICE=eth0
    TYPE=Ethernet
    ONBOOT=yes
    BOOTPROTO=static
    NAME="eth0"
    IPADDR=192.168.5.101
    PREFIX=24
    GATEWAY=192.168.5.2
    DNS1=192.168.5.2
    1
    2
    3
    vim /etc/sysconfig/network

    HOSTNAME=hadoop101
  5. 配置/etc/hosts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1. vim /etc/hosts

192.168.1.100 hadoop100

192.168.1.110 hadoop-mother
192.168.1.111 hadoop111
192.168.1.112 hadoop112
192.168.1.113 hadoop113

192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
192.168.1.104 hadoop104
192.168.1.105 hadoop105
192.168.1.106 hadoop106
192.168.1.107 hadoop107
192.168.1.108 hadoop108
  1. 创建一个一般用户corp,给他配置密码

    1
    2
    useradd corp
    passwd corp
  2. 配置这个用户为sudoers

    1
    2
    3
    vim /etc/sudoers
    root ALL=(ALL) ALL
    corp ALL=(ALL) NOPASSWD:ALL

    保存时wq!强制保存

  3. 在/opt目录下创建两个文件夹module和software,并把所有权赋给corp

    1
    2
    mkdir /opt/module /opt/software
    chown corp:corp /opt/module /opt/software
  4. 关机,快照,克隆

​ 从这里开始要以一般用户登陆

  1. 克隆的虚拟机改IP

  2. 搞一个分发脚本

    1
    2
        cd ~
    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
    27

    ​```shell
    #!/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=101; host<104; host++)); do
    echo ------------------- hadoop$host --------------
    rsync -av $pdir/$fname $user@hadoop$host:$pdir
    done

    chmod +x xsync
    sudo cp xsync /bin
    sudo xsync /bin/xsync

  1. 配置免密登陆

    1. 生成密钥对
    ssh-keygen -t rsa 三次回车
    
    2. 发送公钥到本机
    ssh-copy-id hadoop102 输入一次密码
    
    3. 分别ssh登陆一下所有虚拟机
    ssh hadoop103
    exit
    ssh hadoop104
    exit
    
    4. 把/home/corp/.ssh 文件夹发送到集群所有服务器
    xsync /home/corp/.ssh

开始安装Hadoop集群环境

  1. 在一台机器上安装Java和Hadoop,并配置环境变量,并分发到集群其他机器

       1. 拷贝文件到`/opt/software`,两个tar包
       2. ```tar -zxf h"+tab" -C /opt/module```
       3. ```tar -zxf j"+tab" -C /opt/module ```
       4. ```sudo vim /etc/profile```
           在文件末尾添加
    1
    2
    3
    4
    5
    6
    #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_144
    export PATH=$PATH:$JAVA_HOME/bin
    #HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-2.7.2
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    保存

    1. source /etc/profile
    2. sudo xsync /etc/profile
    3. 在其他机器上分别执行 source /etc/profile

所有配置文件都在$HADOOP_HOME/etc/hadoop

  1. 首先配置hadoop-env.sh,yarn-env.sh,mapred-env.sh文件,配置Java_HOME
    在每个文件第二行添加 export JAVA_HOME=/opt/module/jdk1.8.0_144

  2. 配置Core-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!-- 指定HDFS中NameNode的地址 -->
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop102:9000</value>
    </property>

    <!-- 指定Hadoop运行时产生文件的存储目录 -->
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop-2.7.2/data/tmp</value>
    </property>
  3. 配置hdfs-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <!-- 数据的副本数量 -->
    <property>
    <name>dfs.replication</name>
    <value>3</value>
    </property>
    <!-- 指定Hadoop辅助名称节点主机配置 -->
    <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop104:50090</value>
    </property>
  4. 配置yarn-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <!-- Site specific YARN configuration properties -->
    <!-- Reducer获取数据的方式 -->
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>

    <!-- 指定YARN的ResourceManager的地址 -->
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop103</value>
    </property>
    <!-- 日志聚集功能使能 -->
    <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
    </property>

    <!-- 日志保留时间设置7天 -->
    <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
    </property>
  5. 配置mapred-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    <!-- 历史服务器端地址 -->
    <property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop104:10020</value>
    </property>
    <!-- 历史服务器web端地址 -->
    <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop104:19888</value>
    </property>
    1
    2
    3
    4
    5

    启动历史服务器:

    ```shell
    mr-jobhistory-daemon.sh start historyserver
  6. 配置Slaves

    1
    2
    3
    hadoop102
    hadoop103
    hadoop104
  7. 分发配置文件

    1
    xsync /opt/module/hadoop-2.7.2/etc
  1. 格式化Namenode 在hadoop102
1
hdfs namenode -format
  1. 启动hdfs
1
start-dfs.sh
  1. 在配置了Resourcemanager机器上执行
    在Hadoop103上启动start-yarn.sh

  2. 测试一下

    1
    2
    3
    4
    5
    mkdir input
    vim input/input
    abc
    def efg
    asd

    hadoop fs -put input /
    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output

25 关毕集群

1
2
stop-dfs.sh 
stop-yarn.sh
  1. 单个关闭
1
2
hadoop-daemon.sh start namenode或datanode
yarn-daemon.sh start resourcemanager或nodemanager

如果集群出了问题

1
2
3
4
stop-dfs.sh
stop-yarn.sh
cd $HADOOP_HOME
rm -rf data logs

​ 回到 21