当前位置: 首页 > news >正文

Hadoop集群的高可用(HA):NameNode和resourcemanager高可用的搭建

文章目录

  • 一、NameNode高可用的搭建
    • 1、免密配置
    • 2、三个节点都需要安装psmisc
    • 3、检查三个节点是否都安装jdk以及zk
    • 4、检查是否安装了hadoop集群
    • 5、修改hadoop-env.sh
    • 6、修改core-site.xml
    • 7、修改hdfs-site.xml
    • 8、检查workers 文件是否为三台服务
    • 9、分发给其他两个节点
    • 10、初始化ZKFC在zk中的Znode信息
    • 11、在三台服务器上启动journalnode
    • 12、对集群进行namenode的格式化
    • 13、启动hdfs
    • 14、启动第二个namenode
    • 15、第二次只需要正常启动zk和hadoop即可
  • 二、resourcemanager高可用搭建
    • 1、检查mapred-site.xml
    • 2、修改yarn-site.xml
    • 3、分发
    • 4、启动yarn
    • 5、查看是否配置成功
    • 6、遇到的问题


一、NameNode高可用的搭建

1、免密配置

2、三个节点都需要安装psmisc

yum install -y psmisc

3、检查三个节点是否都安装jdk以及zk

4、检查是否安装了hadoop集群

如果以前安装过了,则需要清空数据:

1.先停止集群:

stop-all.sh

2.清理集群中的data数据:

rm -rf /opt/installs/hadoop/tmp/ /opt/installs/hadoop/logs/

5、修改hadoop-env.sh

export JAVA_HOME=/opt/installs/jdk/ export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=rootexport HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root

6、修改core-site.xml

<!--覆盖-->
<configuration><!--hdfs入口,设置虚拟地址,具体地址后面配置--><property><name>fs.defaultFS</name><value>hdfs://hdfs-cluster</value></property><!--hdfs集群的文件位置--><property><name>hadoop.tmp.dir</name><value>/opt/installs/hadoop/tmp</value></property><!--hdfs要访问zookeeper集群--><property><name>ha.zookeeper.quorum</name><value>node01:2181,node02:2181,node03:2181</value></property>
</configuration>

7、修改hdfs-site.xml

<!--覆盖-->
<configuration><!-- 副本数 --><property><name>dfs.replication</name><value>3</value></property><!-- 定义dhfs入口的命名服务 --><property><name>dfs.nameservices</name><value>hdfs-cluster</value></property><!-- 定义hdfs入口的命名服务下虚拟ip--><property><name>dfs.ha.namenodes.hdfs-cluster</name><value>nn1,nn2</value></property><!-- 虚拟ip地址1 RPC入口 --><property><name>dfs.namenode.rpc-address.hdfs-cluster.nn1</name><value>node01:9820</value></property><!-- 虚拟ip地址1 HTTP入口 --><property><name>dfs.namenode.http-address.hdfs-cluster.nn1</name><value>node01:9870</value></property><!-- 虚拟ip地址2 PRC入口 --><property><name>dfs.namenode.rpc-address.hdfs-cluster.nn2</name><value>node02:9820</value></property><!-- 虚拟ip地址1 HTTP入口 --><property><name>dfs.namenode.http-address.hdfs-cluster.nn2</name><value>node02:9870</value></property><!-- 定义QJN在linux中保存文件磁盘目录 --><property><!-- Journal Edit Files 的存储目录:() --><name>dfs.journalnode.edits.dir</name><value>/opt/installs/journalnode/data/</value></property><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://node01:8485;node02:8485;node03:8485/hdfs-cluster</value></property><!-- 是否开启故障切换 --><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property><!-- 基于zookeeper的故障切换的代码类 --><property><name>dfs.client.failover.proxy.provider.hdfs-cluster</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><!-- 远程杀死namenode方式(防止namenode假死,导致双主出现) --><property><name>dfs.ha.fencing.methods</name><value>sshfence</value></property><!-- 指定私钥的文件目录,使用免密登录杀死NN进程 --><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/root/.ssh/id_rsa</value></property><!-- 可以在hdfs上点击结果查看--><property><name>dfs.webhdfs.enabled</name><value>true</value></property>
</configuration>

8、检查workers 文件是否为三台服务

9、分发给其他两个节点

分发脚本编写地址:脚本编写链接

cd /opt/installs/hadoop/etc/hadoopxsync.sh hadoop-env.sh core-site.xml hdfs-site.xml

10、初始化ZKFC在zk中的Znode信息

1.先启动zk

zk.sh start

2.在主节点进行即可

hdfs zkfc -formatZK

11、在三台服务器上启动journalnode

hadoop-daemon.sh start journalnode

12、对集群进行namenode的格式化

hdfs namenode -format

13、启动hdfs

14、启动第二个namenode

1.第一次需要运行如下命令,以后不需要:

hdfs namenode -bootstrapStandby

2.接着,启动第二个namenode:

hadoop-daemon.sh start namenode

15、第二次只需要正常启动zk和hadoop即可

需要先启动zk,再启动hadoop
namenode的web界面:node01:9870

二、resourcemanager高可用搭建

1、检查mapred-site.xml

里面只有yarn配置和historyServer的配置,不需要修改

2、修改yarn-site.xml

以前配置的yarn以及日志服务的配置不动,添加ha的相关配置即可:

<configuration><!--配置resourcemanager的HA--><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><!-- RM 集群标识 --><property><name>yarn.resourcemanager.cluster-id</name><value>yarn-cluster</value></property> <!-- RM 的逻辑 ID 列表 --><property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value></property> <!-- RM1 的主机地址 --><property><name>yarn.resourcemanager.hostname.rm1</name><value>node01</value></property><!-- RM1 的主机web管理界面地址 --> <property><name>yarn.resourcemanager.webapp.address.rm1</name><value>node01:8088</value></property><!-- RM2 的主机地址 --><property><name>yarn.resourcemanager.hostname.rm2</name><value>node02</value></property> <!-- RM2 的主机web管理界面地址 -->  <property><name>yarn.resourcemanager.webapp.address.rm2</name><value>node02:8088</value></property><!-- ZooKeeper 集群的地址 -->  <property><name>yarn.resourcemanager.zk-address</name><value>node01:2181,node02:2181,node03:2181</value></property> <!-- 启用自动恢复 --> <property><name>yarn.resourcemanager.recovery.enabled</name><value>true</value></property> <!-- 用于yarn故障转移持久化zk的类 --><property><name>yarn.resourcemanager.store.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property> <!-- 关闭虚拟内存检查 -->
<property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value></property></configuration>

3、分发

cd /opt/installs/hadoop/etc/hadoop/# 只需要同步一个,因为另一个根本没有修改。
xsync.sh yarn-site.xml

4、启动yarn

5、查看是否配置成功

yarn rmadmin -getAllServiceState

resourcemanager的web界面:node01:8088

6、遇到的问题

假如你在启动过程中,发现resourcemanager有两个,但是都是standby,有可能是版本兼容问题:
hadoop3.1.6 需要兼容 zookeeper 3.4.10 hadoop3.3.1 需要兼容 zookeeper 3.6.4 ,否则就会有问题。
namenode 高可用没问题,resourcemanager的高可用有问题。

相关文章:

  • 基于Springboot+Vue的基于协同过滤算法的个性化音乐推荐系统 (含源码数据库)
  • Java高效编程(7):消除过时的对象引用
  • ue4多个面重叠闪烁
  • 如何获取钉钉webhook
  • 深度学习·Argparse
  • HBase 的基本架构 详解
  • 锐捷—NAT地址映射+IPsec隧道
  • golang学习笔记26-管道(Channel)【重要】
  • CSS中的font-variation-settings:探索字体的可变性
  • 鸿蒙开发(NEXT/API 12)【请求用户授权】手机侧应用开发
  • 计算机毕业设计 二手图书交易系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • SpringAOP实现的两种方式-JDK动态代理和CGLIB动态代理
  • 【TypeScript学习】TypeScript基础学习总结一
  • 数字教学时代:构建高效在线帮助中心的重要性
  • C嘎嘎入门篇:类和对象(2)
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 2019年如何成为全栈工程师?
  • Fundebug计费标准解释:事件数是如何定义的?
  • github指令
  • Golang-长连接-状态推送
  • iOS 系统授权开发
  • Javascript Math对象和Date对象常用方法详解
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Linux gpio口使用方法
  • pdf文件如何在线转换为jpg图片
  • tensorflow学习笔记3——MNIST应用篇
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 从零开始学习部署
  • 分享几个不错的工具
  • 记一次删除Git记录中的大文件的过程
  • 深度学习中的信息论知识详解
  • 使用parted解决大于2T的磁盘分区
  • 走向全栈之MongoDB的使用
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • AI算硅基生命吗,为什么?
  • #{}和${}的区别是什么 -- java面试
  • $.ajax()参数及用法
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (利用IDEA+Maven)定制属于自己的jar包
  • (六)c52学习之旅-独立按键
  • (十八)Flink CEP 详解
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)面试需要掌握的技巧
  • (转)ORM
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .Net - 类的介绍
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net core 管理用户机密
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET MVC之AOP