Bootstrap

Hadoop3.3.0集群安装


环境:JDK1.8
Centos 7.8
Hadoop 3.3.0

VMware和Centos虚拟机的安装请查看这里

1.集群规划

在VMWare中构建3台运行Centos的机器作为服务器,一共3个node,一个node为namenode(master主机) ,另外两个node分别为datanode(slave1)和datanode(slave2.)。

2.关闭防火墙

永久关闭 firewalld 防火墙(centos7默认的防火墙是firewalld防火墙,不是使用iptables,因此需要关闭firewalld服务)

firewall-cmd --state	//查看防火墙状态

systemctl stop firewalld.service  // 停止firewalld服务

systemctl disable firewalld.service // 开机禁用firewalld服务

3.配置网络、设置静态IP,修改主机名,以及创建集群账号

3.1.1 查看网络IP和网关,

在这里插入图片描述

3.1.2 修改IP

在这里插入图片描述

3.1.3 查看网关

在这里插入图片描述

3.1.4 查看windows环境的中VMnet8网络配置

在这里插入图片描述
在这里插入图片描述

3.2 设置静态IP

CentOS7 默认网卡设备文件存放于 /etc/sysconfig/network-scripts/

[root@localhost~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
//修改以下内容
BOOTPROTO=static  //启用静态IP地址
ONBOOT=yes      //开启自动启用网络连接

//添加以下内容
IPADDR=192.168.1.100      
//设置IP地址
NETMASK=255.255.255.0   //子网掩码
GATEWAY=192.168.1.2   //设置网关

配置完之后

[root@hadoop102 ~]$ vim /etc/sysconfig/network-scripts/ifcfg-ens33 

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
# IP的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="2063e693-8ffd-4a1a-8a0d-cbec0b95a868"
DEVICE="ens33"
#系统启动的时候网络接口是否有效(yes/no)
ONBOOT="yes"
#IP地址
IPADDR=192.168.1.100
#网关  
GATEWAY=192.168.1.2
#域名解析器
DNS1=114.114.114.114
DNS2=8.8.8.8

修改后,执行 service network restart,如果报错,reboot now,重启虚拟机

验证网卡是否配置成功
在这里插入图片描述

3.3 修改主机名称,配置/etc/hosts

vim /etc/hosts
## =============================
192.168.1.100   hadoop100
192.168.1.101   hadoop101
192.168.1.102   hadoop102
192.168.1.103   hadoop103
192.168.1.104   hadoop104
## =============================

修改后,重启虚拟机,查看主机名,发现主机名已经修改过来
在这里插入图片描述

修改window10的主机映射文件(hosts文件)
(1)进入C:\Windows\System32\drivers\etc路径
(2)拷贝hosts文件到桌面
(3)打开桌面hosts文件并添加如下内容

192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
192.168.1.104 hadoop104

(4)将桌面hosts文件覆盖C:\Windows\System32\drivers\etc路径hosts文件

3.4 创建集群账号

创建一个一般用户datathink,给他配置密码

    [root@hadoop102 ~]$ useradd datathink
    [root@hadoop102 ~]$ passwd datathink

配置这个用户为sudoers

    vim /etc/sudoers
    在root    ALL=(ALL)       ALL
    添加datathink	ALL=(ALL)       NOPASSWD:ALL

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

 [root@hadoop102 ~]$ mkdir /opt/module /opt/software
 [root@hadoop102 ~]$ chown datathink:datathink /opt/module /opt/software

4.关机,快照,克隆

从这里开始要以一般用户登陆,克隆的虚拟机改IP。

5.编写一个分发脚本

  [datathink@hadoop102 ~]$ cd ~
  [datathink@hadoop102 ~]$ vim xsync
    内容如下:
=================================================================
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
    echo ====================    $host    ====================
    #3. 遍历所有目录,挨个发送
    for file in $@
    do
        #4 判断文件是否存在
        if [ -e $file ]
        then
            #5. 获取父目录
            pdir=$(cd -P $(dirname $file); pwd)
            
            #6. 获取当前文件的名称
            fname=$(basename $file)
            
            ssh $host "mkdir -p $pdir"
            rsync -av $pdir/$fname $USER@$host:$pdir
            
        else
            echo $file does not exists!
        fi
    done
done
==============================================================
    
   [datathink@hadoop102 ~]$ chmod +x xsync
    
   [datathink@hadoop102 ~]$ sudo cp xsync /bin
    
   [datathink@hadoop102 ~]$ sudo xsync /bin/xsync

6.配置免密登陆


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

7.安装Java和Hadoop

删除现有JDK,每台结点都执行

sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps

可以去官网下载相应版本的jar
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
在文件末尾添加

=======================================================
#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-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
========================================================
    保存
    5. source /etc/profile  	// 让文件立刻生效
    # 分发配置文件和JDK、HADOOP
    6. sudo xsync /etc/profile
    7. xsync /opt/module/jdk1.8.0_144        
    8.  xsync /opt/module/hadoop-3.3.0
    9. 在其他机器分别执行source /etc/profile

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

8.安装hadoop集群

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

  1. 配置Core-site.xml
==============================================================
        <!-- 指定HDFS中NameNode的地址 -->
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://hadoop102:9000</value>
        </property>

        <!-- 指定Hadoop运行时产生文件的存储目录 -->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/opt/module/hadoop-3.3.0/data/tmp</value>
        </property>
==============================================================
  1. 配置hdfs-site.xml
==============================================================
        <!-- 数据的副本数量 -->
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
        <!-- 指定Hadoop辅助名称节点主机配置 -->
        <property>
              <name>dfs.namenode.secondary.http-address</name>
              <value>hadoop104:50090</value>
        </property>
==============================================================
  1. 配置yarn-site.xml
==============================================================
        <!-- 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>
==============================================================
  1. 配置mapred-site.xml
==============================================================
    <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>
    
    启动历史服务器:mr-jobhistory-daemon.sh start historyserver
==============================================================
  1. 配置workers(注意hadoop3.0之前是slaver,3.0之后是workers,否则可能会无法正常启动集群
==============================================================
hadoop102
hadoop103
hadoop104
==============================================================
  1. 分发配置文件
    xsync /opt/module/hadoop-2.7.2/etc

  2. 格式化Namenode 在hadoop102
    hdfs namenode -format

  3. 启动hdfs
    start-dfs.sh
    可以通过jps查看当前进程
    在这里插入图片描述

  4. 在配置了Resourcemanagr机器上执行
    在Hadoop103上启动start-yarn.sh
    在这里插入图片描述

  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
  1. 关 stop-dfs.sh stop-yarn.sh

  2. hadoop-daemon.sh start namenode或datanode
    yarn-daemon.sh start resourcemanager或nodemanager

如果集群出了问题
stop-dfs.sh
stop-yarn.sh
#三台机器都要执行
cd $HADOOP_HOME
rm -rf data logs
回到7

9.通过网页访问hdfs集群的状态

http://hadoop102:9870
默认端口时9870,可以通过hdfs-default.xml配置文件里面的 dfs.namenode.http-address配置
在这里插入图片描述
注:hadoop3.0之前的默认端口是50070

10.通过网页访问YARN集群的状态

http://hadoop103:8088/
在这里插入图片描述

hadoop3.* 和 hadoop2.* 的端口变化如下所示:
Namenode 端口:
50470 --> 9871
50070 --> 9870
8020 --> 9820

Secondary NN 端口:
50091 --> 9869
50090 --> 9868

Datanode 端口:
50020 --> 9867
50010 --> 9866
50475 --> 9865
50075 --> 9864

寄语

你知道的越多,你知道的越少,技术的路上永远没有终点。

;