Hadoop完全分布式配置流程

要将现有的 Hadoop 伪分布式配置升级为完全分布式环境,你需要对多个配置文件进行修改,同时在多台主机上配置相应的服务。根据你的集群配置(1 个 NameNode 和 2 个 DataNode),以下是完整的配置步骤。

1. 节点规划

机器1(主节点):192.168.91.139,主机名为 xx
机器2(从节点):192.168.91.140,主机名为 slave1
机器3(从节点):192.168.91.141,主机名为 slave2

2. 映射IP地址和主机名

vim /etc/hosts
在文件末尾添加如下内容。注意:IP地址主机名要根据实际情况填写。

192.168.91.139  xx(你的主机名)
192.168.91.140  slave1
192.168.91.141  slave2

同时也要添加到以下目录文件中:(存在权限问题,很好解决
C:\Windows\System32\drivers\etc\hosts

3. 克隆(课堂上会讲解,网上也可以查询到,很简单)

4. 更改主机名和 IP 地址

克隆后的虚拟机会保留与原始主机相同的主机名和 IP 地址,这在分布式环境中会导致冲突。你需要确保每台虚拟机有独立的主机名和 IP 地址。
步骤:
修改每台从节点的主机名。
更新每个节点的 /etc/hosts 文件,确保三台主机的 IP 地址和主机名都正确配置。

(1)修改克隆出来的第一台主机名称为 slave1ip改为规划后的ip地址
在虚拟机上打开克隆出来的第一台主机,编辑/etc/hostname文件

vim /etc/hostname

将原有内容删除,添加如下内容。

slave1

重启使之生效

reboot

(2)修改克隆出来的第二台主机名称为 slave2ip改为规划后的ip地址
在虚拟机上打开克隆出来的第二台主机,编辑/etc/hostname文件

vim /etc/hostname

将原有内容删除,添加如下内容。

slave2

重启使之生效

reboot

5. SSH 无密码登录

在完全分布式模式下,集群内任意一台主机可免密登录集群内所有主机,即实现了两两免密登录。免密登录的设置方法和伪分布式模式的免密登录设置方法一样,分别在xx(自己的主机名)、slave1、slave2主机上生成公钥/私钥密钥对,然后将公钥发送给集群内的所有主机。
下面以 主节点 免密登录集群内其他主机,其他两台主机可仿照 主节点 的步骤完成免密码登录设置。

前置准备–删除旧的密钥:切换到 root用户,然后cd ~/.ssh目录下执行rm -rf *每台主机都要做一次

1、在 主节点 生成密钥对
cd ~
ssh-keygen -t rsa(一直回车)
2、进入~/.ssh目录
cd ~/.ssh
3、将公钥id_rsa.pub 复制到 主节点、slave1、slave2:(每台主机做一次

ssh-copy-id xx(自己的主机名)
ssh-copy-id slave1
ssh-copy-id slave2

4、验证免密登录:在 主节点 输入命令验证,注意主机名称的变化三台主机上都测试一遍

ssh xx
exit
ssh slave1
exit
ssh slave2
exit

然后便可以通过FinalShell远程连接工具进行连接了。

6. Hadoop 配置同步(已经有一些配置文件在hadoop伪分布式配置过了)

  1. 设置 hdfs-site.xml(不要直接复制,只改动局部!!!)

    <configuration>
     <!-- HDFS 存储的基本目录 -->
         <property>
             <name>dfs.replication</name>
             <value>2</value>
             <description>Default block replication. The default is 1 unless overridden in the file.</description>
         </property>
    
         <!-- Secondary NameNode 目录 -->
         <property>
             <name>dfs.namenode.secondary.http-address</name>
             <value>slave2:9868</value>
             <description>The address for the secondary NameNode.</description>
         </property>
    
    </configuration>
    
  2. 设置 yarn-site.xml

     <configuration>
     
         <!-- ResourceManager 地址配置 -->
         <property>
             <name>yarn.resourcemanager.hostname</name>
             <value>localhost</value> <!-- 改为主机名或IP地址 -->
             <description>The hostname of the ResourceManager.</description>
         </property>
     
         <!-- 设置 ResourceManager 的 web 界面端口 -->
         <property>
             <name>yarn.resourcemanager.webapp.address</name>
             <value>localhost:8088</value><!-- 改为主机名或IP地址 -->
             <description>ResourceManager web interface.</description>
         </property>
     
     </configuration>
    
  3. 设置 mapred-site.xml

     <configuration>
     
         <!-- 指定 MapReduce 框架使用 YARN -->
         <property>
             <name>mapreduce.framework.name</name>
             <value>yarn</value>
             <description>MapReduce should run as a YARN application</description>
         </property>
    
     	  <!-- ResourceManager 的地址 (YARN ResourceManager 节点的主机名或 IP 地址) -->
     	  <property>
     	      <name>yarn.resourcemanager.address</name>
     	      <value>localhost:8032</value>  <!-- 替换 "namenode" 为实际 ResourceManager 的主机名或IP -->
     	      <description>Address of the ResourceManager</description>
     	  </property>
     
         <!-- MapReduce JobHistory Server 的地址,用于查看作业历史 -->
         <property>
             <name>mapreduce.jobhistory.address</name>
             <value>slave1:10020</value> <!-- 替换 "namenode" 为实际 JobHistory Server 的主机名或IP -->
             <description>Address of the JobHistory Server</description>
         </property>
     
         <!-- JobHistory Server 的 web 界面地址 -->
         <property>
             <name>mapreduce.jobhistory.webapp.address</name>
             <value>slave1:19888</value><!-- 替换 "namenode" 为实际 JobHistory Server 的主机名或IP -->
             <description>WebUI for JobHistory Server</description>
         </property>
     
     </configuration>
    
  4. 设置 workers 文件
    设置 slaves 文件就是指定哪些主机是 Slave。

    cd /export/server/hadoop/etc/hadoop
    vim workers
    

    将原有内容删除,添加以下内容(千万注意,后面不要有空格,也不要有空行

    slave1
    slave2
    
  5. 分发配置
    分发配置文件到其他节点: 现在你可以将已经配置好的 Hadoop 配置文件从 NameNode(主节点) 分发到其他节点(slave1slave2):

    # 进入 Hadoop 配置目录
    cd /export/server/hadoop/etc/hadoop/
    
    # 将配置文件分发到 slave1 和 slave2
    scp core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml hadoop-env.sh root@slave1:/export/server/hadoop/etc/hadoop/
    scp core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml hadoop-env.sh root@slave2:/export/server/hadoop/etc/hadoop/
    

    6、在主节点启动集群
    start-all.sh

    7、验证Hadoop进程
    用jps命令分别在所有主机验证

    jps
    

    主节点 包含以下进程表示启动 Hadoop 成功

    NameNode
    ResourceManager
    

    slave1slave2 主机分别执行 jps 命令,均包含以下进程表示启动 Hadoop 成功。(slave2 多一个SecondaryNameNode

    NodeManager
    DataNode
    

    8、显示有两个DataNode(slave1、slave2),成功!!!
    在这里插入图片描述

【注意事项】启动正常的不用看

在 Hadoop 集群中,格式化 NameNode 是一个非常重要且不可逆的操作,它会清除 NameNode 存储的元数据。因此,在集群已经运行时不应再次格式化 NameNode,否则会导致集群中已存在的数据节点(DataNode)丢失关联,进而无法连接到集群。

若是已经多次格式化,导致 slave1 和 slave2 没有了 DataNode,这是因为 DataNode 可能失去了与新的 NameNode 的元数据同步。你可以通过以下步骤恢复 DataNode 并重新连接它们。

修复步骤:
1、停止集群: 首先,停止整个集群,以便可以清理 DataNode 并重新配置。

/export/server/hadoop/sbin/stop-dfs.sh

2、清理 DataNode 数据目录: 格式化 NameNode 后,DataNode 的数据可能不再匹配 NameNode 的元数据。因此,你需要在每个 DataNode 上(slave1 和 slave2)清理存储 HDFS 块的目录。
slave1slave2 上,执行以下命令清理 DataNode 数据目录:

rm -rf /export/server/hadoop/dfs/data/*

注意:执行这个操作会清除 DataNode 存储的 HDFS 块数据。因为你已经格式化了 NameNode,DataNode 需要重新同步,所以这是必要的步骤。

3、重启集群: 清理完成后,你可以重新启动集群,让 DataNode 重新与 NameNode 建立连接并开始同步。
在 NameNode 上执行:

/export/server/hadoop/sbin/start-dfs.sh

4、检查 DataNode 状态: 通过以下命令检查 DataNode 是否已经成功连接并在集群中注册:

/export/server/hadoop/bin/hdfs dfsadmin -report

此命令将显示所有已经注册的 DataNode。你应该看到 slave1slave2 成功显示为 DataNode。

5、检查 Web UI: 打开 NameNode 的 Web 界面(http://ip:9870),在 “DataNodes” 部分中确认是否看到 slave1slave2 被列为正常运行的 DataNode。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值