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

Hadoop集群的高可用(HA)- (1、搭建namenode的高可用)

HA: High Availability,高可用集群,指的是集群7*24小时不间断服务

Hadoop中存在单点故障问题:NameNode ResourceManager

在搭建hadoop集群的高可用之前,先将集群进行快照。

 搭建namenode的高可用

先将三台服务器拍摄快照,便于后面的恢复!!!

第一步:bigdata01和bigdata02都能免密登录到其他三台

因为以前bigdata01 已经免密登录其他三台,不需要做。

进入到bigdata02中:

ssh-keygen -t rsa

# 发送公钥(所有NameNode节点都要发送)

ssh-copy-id bigdata01

ssh-copy-id bigdata02

ssh-copy-id bigdata03

第二步:三台电脑上都同时安装psmisc

# ZKFC远程杀死假死NN使用的killall namenode命令属于该软件中的。

# 建议所有节点都安装psmisc

以下命令是在bigdata01上运行的,因为只有01 配置了xcall命令

xcall.sh yum install -y psmisc

第三步:检查jdk以及zk 三台是否都安装完毕

第四步:检查是否安装了hadoop集群,如果以前安装过了,清空数据

先停止集群:stop-all.sh

清理集群中的data数据:

xcall.sh rm -rf /opt/installs/hadoop/tmp/ /opt/installs/hadoop/logs/

第五步:配置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=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root

修改完毕之后,记得同步给bigdata02和03

xsync.sh hadoop-env.sh

第六步:修改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>bigdata01:2181,bigdata02:2181,bigdata03:2181</value>
  </property>
</configuration>

第七步:修改hdfs-site.xml

<configuration>
    <!-- 副本数 -->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!-- 定义hdfs入口的命名服务 -->
    <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>bigdata01:9820</value>
    </property>
    <!-- 虚拟ip地址1 HTTP入口 -->
    <property>
        <name>dfs.namenode.http-address.hdfs-cluster.nn1</name>
        <value>bigdata01:9870</value>
    </property>
    <!-- 虚拟ip地址2 PRC入口 -->
    <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.nn2</name>
        <value>bigdata02:9820</value>
    </property>
    <!-- 虚拟ip地址1 HTTP入口 -->
    <property>
        <name>dfs.namenode.http-address.hdfs-cluster.nn2</name>
        <value>bigdata02: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://bigdata01:8485;bigdata02:8485;bigdata03: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>

第八步:检查workers 文件是否为三台服务

第九步:同步 core-site.xml 和 hdfs-site.xml 到剩余两台上去

xsync.sh core-site.xml hdfs-site.xml

第十步:

第一次启动

1、启动zookeeper
zk.sh start
2. 初始化ZKFC在zk中的Znode信息【第一次启动需要做】在bigdata01上进行即可
hdfs zkfc -formatZK
3、在三台服务器上启动jn【journalnode 主要用于存储namenode的元数据】
hdfs --daemon start journalnode,否则报8345
这个为什么在这个时候启动,原因是第四步格式化的时候,需要用到journalnode,否则报8485连接超时的问题,格式化会失败的。
4、对集群进行namenode的格式化
hdfs namenode -format
5、启动hdfs
start-dfs.sh
这个服务默认会启动journalnode,但是由于你之前已经单独启动过了,所以启动它会报三个警告,可以忽略,无所谓。
6、启动第二个namenode
需要在bigdata02上运行:
第一次需要运行如下命令,以后不需要:
hdfs namenode -bootstrapStandby
接着,启动第二个namenode:
hadoop-daemon.sh start namenode

本身集群是可以启动两个namenode的,但是由于第一次启动的话,bigdata02上没有格式化,所以无法启动,第二次就不需要了。

综上所述:

只要配置好了以后,以后启动高可用,命令只需要执行 start-dfs.sh 即可。当然zk还是单独管理。

第十一步:通过网页查看两个namenode的状态

查看第二个namenode:

第十二步:测试是否可以高可用

手动将第一台的namenode给关闭,第二台要自动从 standby变为active

假如第一次服务器再次启动namenode,状态应为为standby

 


http://www.kler.cn/a/387305.html

相关文章:

  • MySQL如何利用索引优化ORDER BY排序语句
  • KubeVirt入门介绍
  • SpringBoot整合Freemarker(三)
  • TCP可靠连接的建立和释放,TCP报文段的格式,UDP简单介绍
  • 大模型就业收入高吗?大模型入门到精通,收藏这篇就够了
  • 【随机种子】Random Seed是什么?
  • 算法 -选择排序
  • YOLOv8实战人脸口罩识别
  • pyspark入门基础详细讲解
  • TSMI252012PMX-3R3MT功率电感详细解析
  • Dinky中配置Flink集群
  • 大模型微调技术 --> 脉络
  • Mysql之约束与事件
  • 【网络安全】SSL/TLS协议运行机制详解
  • 数据结构-并查集专题(2)
  • Python学习------第四天
  • 【Redis】基于redis实现订阅发布
  • 算法训练(leetcode)二刷第十七天 | 235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、*450. 删除二叉搜索树中的节点
  • 停车场微信小程序的设计与实现(lw+演示+源码+运行)
  • 饱和限幅器MATLAB和CODESYS平台下的实现
  • 同步时钟装置为新能源电力赋能强基!
  • 【数据集】【YOLO】【目标检测】水面船只识别数据集 9798 张,YOLO船只识别算法实战训练教程!
  • [FBCTF 2019]rceservice 详细题解
  • O-RAN 分布式单元 (O-DU) 参考架构
  • 【SPIE出版 | ISSN: 0277-786X,EI检索稳定!】2024年计算机视觉与图像处理国际学术会议 (CVIP 2024,11月15-17日)
  • 以旅游产品为例改写一篇系统架构风格的论文