Hadoop HA高可用搭建

server/2024/12/22 13:27:01/

Hadoop HA高可用搭建

原理说明

在这里插入图片描述

这个步骤不用做,目前大数据虚拟机已经配置好了!

echo 'DNS1=8.8.8.8' >> /etc/sysconfig/network-scripts/ifcfg-ens33 
systemctl restart networkping www.baidu.com

安装软件

node1/node2/node3:

yum install psmisc -y  # 增加kill命令 => kill -9 进程id,可以杀死所有相关进程 => 还可以使用killall命令

hadoop_23">备份hadoop安装信息

node1/node2/node3:

cd
stop-all.sh
tar -cvf hadoop.tar /export/server/hadoop-3.3.0-cvf :打包(没有压缩),添加了-z压缩
-c:打包
-vf:显示执行进度

删除原有数据文件(搭建服务时执行)

node1/node2/node3:

rm -rf /export/data/hadoop-3.3.0

修改配置文件(重点)

以下配置只需要在node1上完成,完成后拷贝到node2/node3:

cd /export/server/hadoop-3.3.0/etc/hadoop

# 在文件最后添加下面两行
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
  • 修改core-site.xml
<configuration><!-- HA集群名称,该值要和hdfs-site.xml中的配置保持一致 --><property><name>fs.defaultFS</name><value>hdfs://cluster1</value></property><!-- hadoop本地磁盘存放数据的公共目录 --><property><name>hadoop.tmp.dir</name><value>/export/data/ha-hadoop</value></property><!-- ZooKeeper集群的地址和端口--><property><name>ha.zookeeper.quorum</name><value>node1:2181,node2:2181,node3:2181</value></property>
</configuration>

注意:在一个XML文件中,只能有一个

  • 修改hdfs-site.xml
<configuration><!--指定hdfs的nameservice为cluster1,需要和core-site.xml中的保持一致 --><property><name>dfs.nameservices</name><value>cluster1</value></property><!-- cluster1下面有两个NameNode,分别是nn1,nn2 --><property><name>dfs.ha.namenodes.cluster1</name><value>nn1,nn2</value></property><!-- nn1的RPC通信地址 --><property><name>dfs.namenode.rpc-address.cluster1.nn1</name><value>node1:8020</value></property><!-- nn1的http通信地址 --><property><name>dfs.namenode.http-address.cluster1.nn1</name><value>node1:9870</value></property><!-- nn2的RPC通信地址 --><property><name>dfs.namenode.rpc-address.cluster1.nn2</name><value>node2:8020</value></property><!-- nn2的http通信地址 --><property><name>dfs.namenode.http-address.cluster1.nn2</name><value>node2:9870</value></property><!-- 指定NameNode的edits元数据在JournalNode上的存放位置 --><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://node1:8485;node2:8485;node3:8485/cluster1</value></property><!-- 指定JournalNode在本地磁盘存放数据的位置 --><property><name>dfs.journalnode.edits.dir</name><value>/export/data/journaldata</value></property><!-- 开启NameNode故障自动切换 --><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property><!-- 指定该集群出故障时,哪个实现类负责执行故障切换 --><property><name>dfs.client.failover.proxy.provider.cluster1</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><!-- 配置隔离机制方法--><property><name>dfs.ha.fencing.methods</name><value>sshfence</value></property><!-- 使用sshfence隔离机制时需要ssh免登陆 --><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/root/.ssh/id_rsa</value></property><!-- 配置sshfence隔离机制超时时间 --><property><name>dfs.ha.fencing.ssh.connect-timeout</name><value>30000</value></property>
</configuration>
  • 修改yarn-site.xml
<configuration><!-- 开启RM高可用 --><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><!-- 指定RM的cluster id --><property><name>yarn.resourcemanager.cluster-id</name><value>yrc</value></property><!-- 指定RM的名字 --><property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value></property><!-- 分别指定RM的地址 --><property><name>yarn.resourcemanager.hostname.rm1</name><value>node1</value></property><property><name>yarn.resourcemanager.hostname.rm2</name><value>node2</value></property><!-- 指定zk集群地址 --><property><name>yarn.resourcemanager.zk-address</name><value>node1:2181,node2:2181,node3:2181</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
</configuration>

注意: 将hadoop配置信息拷贝到node2和node3

注意: 将hadoop配置信息拷贝到node2和node3

注意: 将hadoop配置信息拷贝到node2和node3

cd /export/server/hadoop-3.3.0/etc
scp -r hadoop node2:$PWD
scp -r hadoop node3:$PWD

启动(注意顺序以及启动机器)

  • 启动zk

    zkServer.sh start(配置了环境变量,直接启动,没有配置则进入Zookeeper的bin目录,手工启动)

    node1/node2/node3:

    cd /export/server/zookeeper
    bin/zkServer.sh start
    
  • 启动journalnode(node1/node2/node3)

    hdfs --daemon start journalnode
    

    注意:journalnode启动完毕后,一定要等待8485端口被java进程所占用然后在执行下方操作!!!

    netstat -naltp |grep 8485

  • 初始化namenode 注意:node1上执行

    hdfs namenode -format
    
    • 将数据文件拷贝到node2相同目录(node2上也有namenode节点)
    cd /export/data
    scp -r ha-hadoop node2:$PWD
    
  • 初始化zkfc 注意在node1上执行

    hdfs zkfc -formatZK
    
  • 启动服务

    hdfs --daemon stop journalnode     =>   node1/node2/node3
    start-all.sh   =>  node1
    

常见问题

① 如果node2中namenode角色没有启动

答:手工启动 => hdfs --daemon start namenode

注意:如果手工启动有异常,一定要进入logs目录,查看错误原因

② Web界面无法上传文件

答:修改权限即可# hadoop fs -chmod -R 777 /

③ node1:9870或者node2:9870某台机器无法阅读文件列表

答:不是错误,是因为当前你可能处于了standby备机,切换到另一个节点即可。因为对外提供服务器时,只有一个namenode处于工作状态。

若有错误与不足请指出,关注DPT一起进步吧!!!


http://www.ppmy.cn/server/152239.html

相关文章

论文解读之Chain-of-Thought Prompting Elicits Reasoning in Large Language Models(CoT)

最近以及本篇博客将记录博主最近接触的提升LLM的较新方法&#xff0c;总结其核心以备面试及其他场景回顾时所需。 一、简介 CoT的核心在于在prompt中使得模型将较大的问题输入拆解逐步的思维链的输出方案&#xff0c;属于prompt中的技巧&#xff0c;可以提升LLM在复杂问题上的…

python subplot函数应用 - 创建多个子图

subplot语法&#xff1a; plt.subplot 是 Matplotlib 库中的一个非常有用的函数&#xff0c;用于在一个图形窗口中创建多个子图 plt.subplot 函数用于在当前图形窗口中创建并激活一个子图。其基本语法如下&#xff1a; plt.subplot(nrows, ncols, index) 参数详解&#xff…

数据仓库有哪些?

数据仓库有多种类型&#xff0c;每种类型都有其特定的应用场景和优势。以下是一些常见的数据仓库类型&#xff1a; 企业数据仓库&#xff08;EDW&#xff09;&#xff1a; 是最为关键的数据仓库类型&#xff0c;提供一个集中的存储库&#xff0c;集成来自不同来源的数据&#x…

MicroPython+ESP32:五.PC远程控制LED灯

1. 整体思路 2. 代码 # 整体流程 # 1. 链接wifi # 2. 启动网络功能&#xff08;UDP&#xff09; # 3. 接收网络数据 # 4. 处理接收的数据import socket import time import network import machinedef do_connect():wlan network.WLAN(network.STA_IF)wlan.active(True)if no…

Apache SeaTunnel 增强对csv读取时分割字段的能力

概述 本次修改基于 SeaTunnel-2.3.4 版本 在产品的业务里面&#xff0c;需要一个通过 CSV 来同步数据的功能&#xff0c;但 SeaTunnel 的 CSV 读取功能&#xff0c;并没有根据 CSV 规则来分隔字符串&#xff0c;而是简单的用换行符来分隔行&#xff0c;用 String.split 方法来分…

【序】前端监控:打造高效稳定的用户体验

前端监控&#xff1a;打造高效稳定的用户体验 为什么需要前端监控&#xff1f; 在现代前端开发中&#xff0c;用户体验至关重要。无论是页面性能问题、JavaScript 报错&#xff0c;还是网络请求的失败&#xff0c;都可能影响用户的满意度。前端监控可以帮助我们&#xff1a; …

Android-相对布局RelativeLayout

相对布局在摆放子视图位置时&#xff0c;按照指定的参考系来摆放子视图的位置&#xff0c;默认以屏幕左上角(0,0)位置作为参考系摆放位置 了解一下接下来都会以代码的方式可视化出来 属性 可选值 说明 layout_alignParentTop true/false 是否让控件相对于父容器顶部对齐 …