hadoop的集群搭建

297 阅读2分钟

「这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战」。

hadoop分为三种搭建方式

1.第一个demo

使用hadoop的mapReduce自带的demo程序统计单词出现的次数

建立文件wcinput

echo 123 aa bb > wcinput
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount wcinput ./wcoutput

查看结果

cat wcoutput/part-r-00000

2.配置三台服务器分发脚本

  1. 分发脚本
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
        echo Not Enough Arguement!
        exit;
fi

#2. 遍历集群所有机器
for host in hadoop17 hadoop18 hadoop19
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 is not exist!
                fi
        done
done

存放至usr/local/bin下

  1. 配置ssh免密登录
#生成rsa密钥对
ssh-keygen -t rsa
#同步ssh公钥
ssh-copy-id hadoop17
ssh-copy-id hadoop18
ssh-copy-id hadoop19

需要现在/etc/hosts中配置hadoop17/18/19的ip地址

3.集群配置

3.1 集群规划

hadoop17hadoop18hadoop19
HDFSNAMENODE,DATANODEDATANODESECONDNAMENODE,DATANODE
YARNNODEMANAGERRESOURCEMANAGER,NODEMANAGERNODEMANAGER

3.2 集群配置

集群配置,参照上述规划配置:

3.2.1 根据集群规划,配置HDFS和YARN

配置HDFS的NameNode,DataNode

cd /opt/module/hadoop-3.3.1/etc/hadoop

vim core-site.xml
# 在configuration中增加如下配置
				<!-- 配置NameNode的地址 -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://hadoop17:8020</value>
        </property>
        <!-- 配置hadoop的数据存储目录 -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/opt/module/hadoop-3.3.1/data</value>
        </property>
      
vim hdfs-site.xml
				<!-- 配置nn web访问地址 -->
        <property>
                <name>dfs.namenode.http-address</name>
                <value>hadoop17:9870</value>
        </property>
        <!-- 配置2nn web访问地址 -->
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>hadoop19:9868</value>
        </property>

vim yarn-site.xml
				<!-- 指定MR走shuffle -->
        <property>
                <name>yarn.namemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <!-- 指定ResourceManager地址 -->
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>hadoop18</value>
        </property>
       
vim mapred-site.xml
				<!-- 指定MR运行在yarn上 -->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>

上述配置在hadoop17节点进行,然后分发至其他两台服务器

xsync hadoop/

3.2.2 配置workers

vim workers
#配置17/18/19
hadoop17
hadoop18
hadoop19

3.2.3 初始化HDFS

只有第一次启动时需要初始化

hdfs namenode -format

3.2.4 启动HDFS集群

sbin/start-dfs.sh

启动报错,ERROR: Attempting to operate on hdfs namenode as root

ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.

使用root用户,需要配置如下环境变量:

export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"

# 在系统变量中配置或者在 启动/停止脚本中配置  sbin/start-dfs.sh sbin/stop-dfs.sh

集群启动成功的标志:

  1. 三台服务器 jps可以看到启动的服务
  2. web访问http://192.168.164.17:9870/
    1. 记得关闭防火墙或修改防火墙策略

3.2.5 启动yarn集群

根据yarn集群规划,RM在18节点

cd /opt/module/hadoop-3.3.1/sbin/
start-yarn.sh

验证yarn集群启动成功的两种方式:

  1. 三台服务器 jps可以看到启动的服务,查看是否包含RM/NM
  2. web访问http://192.168.164.18:8088/
    1. 记得关闭18节点防火墙或者修改防火墙策略