Hadoop实操-2—完全分布式运行

5.完全分布式运行模式 准备三台客户机(关闭防火墙、静态 IP、主机名称)——已完成(hadoop102、hadoop103、hadoop104) 安装 JDK——hadoop102 已完成 配置环境变量——hado

5.完全分布式运行模式

  1. 准备三台客户机(关闭防火墙、静态 IP、主机名称)——已完成(hadoop102、hadoop103、hadoop104)

  2. 安装 JDK——hadoop102 已完成

  3. 配置环境变量——hadoop102 已完成

  4. 安装 Hadoop——hadoop102 已完成

  5. 配置环境变量——hadoop102 已完成

  6. 配置集群

  7. 单点启动

  8. 配置 ssh

  9. 集群启动并测试集群

5.1 文件复制同步

1.scp 安全拷贝
  • 将 hadoop102 中的 JDK 拷贝到 hadoop103——在 hadoop102 中操作

cd /opt/module
scp -r jdk1.8.0_212/ duan@hadoop103:/opt/module
  • 将 hadoop102 中的 Hadoop 拉取到 hadoop103——在 hadoop103 中操作

cd /opt/module
scp -r duan@hadoop102:/opt/module/hadoop-3.1.3 ./
  • 在 hadoop103 上操作,将 hadoop102 中/opt/module 目录下所有目录拷贝到 hadoop104 上

scp -r duan@hadoop102:/opt/module/* duan@hadoop104:/opt/module

此时三个主机 module 中均包含 hadoop 和 java 软件包,且 hadoop102 已安装两个软件包。

2.rsync 同步工具
  • 安装 rsync

sudo yum install rsync 

5.2 xsync 集群分发

1.配置 IP 与主机名称映射
vim /etc/hosts
2.xsync 配置
cd
mkdir bin
cd bin/
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" "$host:\"$pdir\""
        else
            echo "$file does not exists!"
        fi
    done
done

给文件权限

chmod 777 xsync

测试脚本——其它主机也要安装 rsync 工具

xsync /home/duan/bin

将脚本复制到/bin 中,以便全局调用

cd
cd bin
sudo cp xsync /bin/

分发环境变量

sudo ./bin/xsync /etc/profile.d/my_env.sh

分发后在接收到的服务器中,让环境变量生效

source /etc/profile   #hadoop103
source /etc/profile   #hadoop104

测试

java
hadoop

5.3. SSH 无密登录集群配置

在 hadoop102 中进行 ssh 连接 hadoop103

ssh hadoop103

返回 hadoop102

exit
ls -al

出现.ssh 文件

密钥对生成和发送

cd .ssh/

生成密钥对

ssh-keygen -t rsa

一直回车

ll

出现公钥和私钥

image-20250423124304648.png

公钥发到需要连接的节点

ssh-copy-id hadoop102
ll

image-20250423124308716.png

依次执行

ssh-copy-id hadoop103
ssh-copy-id hadoop104

image-20250423124615433.png

分别连接 hadoop103、hadoop104 服务器执行密钥对的生成和发送:

cd .ssh/
ssh-keygen -t rsa
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

配置 hadoop102 的 root 无密访问

su
ssh hadoop103
eixt
cd .ssh
ssh-keygen -t rsa
ssh-copy-id hadoop103
ssh-copy-id hadoop104

测试无密登录

在 hadoop102 中输入

ssh hadoop103

image-20250423125448179.png

表明配置完成

6.集群配置

通过前面的操作,现在三台服务器已经配置好静态 IP、JDK、主机名映射、Hadoop,但 Hadoop 之间并没有联系,因此接下来通过配置实现集群部署。

6.1 集群部署规划

hadoop102

hadoop103

hadoop104

HDFS

NameNode DataNode

DataNode

SecondaryNameNode DataNode

TARN

NodeManager

ResourceManager NodeManager

NodeManager

  • NameNode 与 SecondaryNameNode 不要部署于同一服务器,资源占用高

  • ResourceManager、NameNode 和 SecondaryNameNode 尽量不要部署于同一服务器

6.2 配置文件说明

1.默认配置

Hadoop 四大模块对应四个配置文件

要获取的默认文件

文件存放在 Hadoop 的 jar 包中的位置

[core-default.xml]

hadoop-common-3.1.3.jar/core-default.xml

[hdfs-default.xml]

hadoop-hdfs-3.1.3.jar/hdfs-default.xml

[yarn-default.xml]

hadoop-yarn-common-3.1.3.jar/yarn-default.xml

[mapred-default.xml]

hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml

2.自定义配置

core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在$HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。

6.3 配置集群

1.核心配置——core-site.xml
#在hadoop102中执行
su duan
cd $HADOOP_HOME/etc/hadoop
vim core-site.xml

修改以下内容

<configuration>
    <!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop102:8020</value>
    </property>

    <!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
    </property>

    <!-- 配置HDFS网页登录使用的静态用户为duan -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>duan</value>
    </property>
</configuration>
2.HDFS 配置
vim hdfs-site.xml

修改以下内容:

<configuration>
        <!-- nn web端访问地址-->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop102:9870</value>
    </property>
    <!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:9868</value>
    </property>
</configuration>
3.YARN 配置
vim yarn-site.xml

修改以下内容:

<configuration>
    <!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop103</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>
4.MapReduce 配置文件
vim mapred-site.xml

修改以下内容:

<configuration>
    <!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
5.集群分发配置
xsync /opt/module/hadoop-3.1.3/etc/hadoop/
6.查看分发情况
hadoop102: cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
hadoop103: cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

7.启动集群

7.1 配置 workers

#在hadoop102中执行
cd $HADOOP_HOME/etc/hadoop
vim workers

修改以下内容: 注意一定不要有任何空格!!!

hadoop102
hadoop103
hadoop104

同步所有节点配置文件

xsync /opt/module/hadoop-3.1.3/etc

7.2 启动集群

cd ..
cd ..
pwd
#返回[duan@hadoop102 hadoop-3.1.3]$ 此路径下
1.第一次启动——初始化!

需先在 hadoop101 节点进行格式化 NamaNode

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

hdfs namenode -format
2.启动 HDFS
sbin/start-dfs.sh

Web 端查看 HDFS 的 NameNode,浏览器中输入:http://hadoop102:9870,查看 HDFS 上存储的数据信息

3.在配置了 ResourceManager 的节点(hadoop103)启动 YARN
sbin/start-yarn.sh

Web 端查看 YARN 的 ResourceManager,浏览器中输入:http://hadoop103:8088,查看 YARN 上运行的 Job 信息

集群启动完成!

Comment