自学内容网 自学内容网

Hadoop集群搭建

1. 安装并配置虚拟机

这里基于VmWare来去构建三台虚拟机

我已经有了一台模板虚拟机,所以基于该模板虚拟机进行完整克隆得到三台机器,分别是hadoop1、hadoop2、hadoop3

在这里插入图片描述

  1. 修改主机名称

    # hadoop1的主机名称修改为hadoop1,以此类推
    vim /etc/hostname
    
  2. 修改静态IP

    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    # 从DHCP动态分配IP修改为static静态IP
    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=92e7a2e8-e78a-4f67-a5ed-7763b6e3d56a
    DEVICE=ens33
    # 开启
    ONBOOT=yes
    # 设置要修改的IP地址,三台机器的IP地址要互不相同
    # 我这里配置的是hadoop1:192.168.75.111、hadoop2:192.168.75.112、hadoop3:192.168.75.113
    IPADDR=192.168.75.112
    # 参考VmWare的vm-net8的虚拟网络配置
    NETMASK=255.255.255.0
    # 参考VmWare的vm-net8的虚拟网络配置
    GATEWAY=192.168.75.2
    # 公网的域名解析地址,默认写成这样就行
    DNS1=8.8.8.8
    
    # 修改之后重启网络
    systemctl restart network
    

    验证是否修改成功:

    # 查看IP地址
    ip addr
    

    在这里插入图片描述

  3. 修改hosts文件

    vim /etc/hosts
    

    将三台主机的IP地址添加到文件末尾

    192.168.75.111 hadoop1
    192.168.75.112 hadoop2
    192.168.75.113 hadoop3
    
  4. 创建用户,并授予root权限

    # 新增用户
    useradd hadoop
    # 设置密码
    passwd hadoop
    # 授予root权限
    vim /etc/sudoers
    # 在文件末尾添加如下内容
    hadoop  ALL=(ALL)  NOPASSWD:ALL
    

    在这里插入图片描述

注意:后续的步骤都使用hadoop用户进行操作

2. 安装JDK

安装JDK8,具体的步骤这里就不赘述了,我这里已经提前安装好了JDK8

可以参考我的这篇文章,里面有讲述如何安装JDK:https://blog.csdn.net/weixin_66400215/article/details/145066470

在这里插入图片描述

3. Hadoop集群搭建

3.1 设置三台机器SSH免密登录

下面以hadoop1机器为例子,其余两台机器也要执行类似的操作

  1. 生成公钥和私钥

    ssh-keygen -t rsa
    

    在这里插入图片描述

  2. 将公钥拷贝到要免密登录的目标机器上

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

    在这里插入图片描述

3.2 配置文件同步脚本

由于后续的搭建过程中往往涉及到很多文件的拷贝,并且要求三台集群的文件保持一致,这里使用文件同步脚本可以极大提高我们的开发效率。

首先,需要明白一点的是我们的PATH环境变量,默认是包含我们的用户家目录下的bin目录的,如下图所示

在这里插入图片描述

所以,我们可以将文件同步脚本放置到/home/hadoop/bin目录下

# 默认bin目录是不存在的,需要创建一下
mkdir -p /home/hadoop/bin
# 创建xsync脚本
vim /home/hadoop/bin/xsync
# 创建可执行权限
chmod +x /home/hadoop/bin/xsync

脚本的使用方式就是:xync 文件或者目录

脚本的内容如下:

#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi

#2. 遍历集群所有机器,如果你的机器host不是这样命名的,可以进行修改
for host in hadoop1 hadoop2 hadoop3
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 $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done

接着,我们可以将xsync脚本从hadoop1节点分发到hadoop2和hadoop3,如图所示:
在这里插入图片描述

如果在执行过程中报错:rsync: command not found,可以执行如下命令,进行安装:

sudo yum install -y rsync 

3.3 安装Hadoop

本次集群的搭建目标:

hadoop1hadoop2hadoop3
HDFSNameNode
DataNode
DataNodeSecondaryNameNode
DataNode
YARNNodeManagerResourceManager
NodeManager
NodeManager

这里安装的Hadoop的3.1.3版本,下载链接:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz

我这里是下载到了/home/hadoop/hadoop-3.1.3.tar.gz目录下

  1. 解压缩

    tar -zxvf hadoop-3.1.3.tar.gz
    
  2. 修改etc/hadoop/hadoop-env.sh,配置环境变量

    # 在文件开头部分新增如下配置
    # JDK安装路径
    export JAVA_HOME=/usr/local/jdk1.8.0_431
    # Hadoop安装路径
    export HADOOP_HOME=/home/hadoop/hadoop-3.1.3
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export HADOOP_LOG_DIR=$HADOOP_HOME/logs
    
  3. 修改/etc/hadoop/core-site.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
        <!-- 指定NameNode的地址 -->
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://hadoop1:8020</value>
        </property>
    
        <!-- 指定hadoop数据的存储目录 -->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/home/hadoop/hadoop-3.1.3/data</value>
        </property>
    
        <!-- 配置HDFS网页登录使用的静态用户为hadoop -->
        <property>
            <name>hadoop.http.staticuser.user</name>
            <value>hadoop</value>
        </property>
    </configuration>
    
  4. 修改/etc/hadoop/hdfs-site.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
    <!-- nn web端访问地址-->
    <property>
            <name>dfs.namenode.http-address</name>
            <value>hadoop1:9870</value>
        </property>
    <!-- 2nn web端访问地址-->
        <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>hadoop3:9868</value>
        </property>
    </configuration>
    
  5. 修改/etc/hadoop/yarn-site.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
        <!-- 指定MR走shuffle -->
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
    
        <!-- 指定ResourceManager的地址-->
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>hadoop2</value>
        </property>
    
        <!-- 环境变量的继承 -->
        <property>
            <name>yarn.nodemanager.env-whitelist</name>
            <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
        </property>
    </configuration>
    
  6. 修改/etc/hadoop/mapred-site.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
    <!-- 指定MapReduce程序运行在Yarn上 -->
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>
    
  7. 配置workers

    vim /home/hadoop/hadoop-3.1.3/etc/hadoop/workers
    # 添加如下内容
    hadoop1
    hadoop2
    hadoop3
    
  8. 将Hadoop从hadoop1分发到hadoop2、hadoop3

    xsync hadoop-3.1.3/
    

3.4 启动集群

  1. 初始化集群:如果集群是第一次启动,需要在hadoop1节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)

    # 在hadoop1上执行
    hdfs namenode -format
    
  2. 启动HDFS

    # 在hadoop1上执行
    sbin/start-dfs.sh
    
     ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2a71d8ea606c48de9a1163a30c6a5ac1.png)
    
  3. 启动YARN

    # 在hadoop2上执行
    sbin/start-yarn.sh
    

    在这里插入图片描述

  4. Web端查看HDFS的NameNode(注意:防火墙记得关闭)

    浏览器中输入:http://192.168.75.111:9870,查看HDFS上存储的数据信息在这里插入图片描述

  5. Web端查看YARN的ResourceManager(注意:防火墙记得关闭)

    浏览器中输入:http://192.168.75.112:8088,查看YARN上运行的Job信息
    在这里插入图片描述

至此,就完成了集群的搭建

3.5 启动和停止集群脚本

为了方便停止和启动集群,这里编写了/home/hadoop/my_hadoop.sh脚本,便于一键启动/停止hadoop集群:

#!/bin/bash

if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi

case $1 in
"start")
        echo " =================== 启动 hadoop集群 ==================="
        
        echo " --------------- 启动 hdfs ---------------"
        ssh hadoop1 "/home/hadoop/hadoop-3.1.3/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh hadoop2 "/home/hadoop/hadoop-3.1.3/sbin/start-yarn.sh"
;;
"stop")
        echo " =================== 关闭 hadoop集群 ==================="

        echo " --------------- 关闭 yarn ---------------"
        ssh hadoop2 "/home/hadoop/hadoop-3.1.3/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hadoop1 "/home/hadoop/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac

使用方式:

# 启动集群
bash my_hadoop.sh start
# 停止集群
bash my_hadoop.sh stop

原文地址:https://blog.csdn.net/weixin_66400215/article/details/145290554

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!