一、前言

1、上文中我们已经搭建好了Hadoop和Zookeeper的集群,这一文来将Hadoop集群变得高可用

2、由于Hadoop集群是主从节点的模式,如果集群中的namenode主节点挂掉,那么集群就会瘫痪,所以我们要改造成HA模式(High Avaliable,高可用性)的集群,说白了就是设置一个备用的namenode节点,当线上使用的namenode挂掉后,会切换备用节点,让集群可以继续运行

二、HA模式配置

HA模式原理:比如设置两个namenode节点,一个active,一个standby(同时只能active一个namenode),集群运行中通过JournalNode来同步两个namenode节点的数据,通过Zookeeper来做节点维护,Zookeeper与节点之间存在一个心跳机制,当Zookeeper检测不到某个节点的心跳时,则认为节点挂掉了,就会启动切换机制

1、首先配置journalnode集群 通信的超时时间,如果机器配置不好的情况下,连接时间会比较长,所以加大超时时间,生产环境尽量设置越小越好,这样检测故障也会更加及时

vim /work/soft/hadoop-2.6./etc/hadoop/hdfs-site.xml

  <property>
<name>dfs.qjournal.start-segment.timeout.ms</name>
<value></value>
</property>

2、failover配置----hdfs-site.xml配置

(1)配置集群id

(2)配置nodenode组的节点

(3、4)配置每个namenode节点的rpc地址

(5、6)配置每个namenode节点的控制台地址

(7)配置journalnode集群的访问地址,由于我这里只有两台虚拟机,所以都加上去了,生产环境下,尽量将journalnode和namenode分开在不同的机器,因为一般namenode节点挂了,很可能是因为namenode所在的物理机本身存在一些问题导致,放在一起又会导致journalnode节点也挂掉

(8)配置dfs客户端,用来判断哪个namenode是active的

(9、10)配置结束namenode的方式:当检测到namenode挂掉并进行备用节点切换时,要将之前的namenode彻底干掉,因为要防止namenode的“假死”,比如namenode所在的机器可能由于网络不好被认为挂掉而切换了备用节点,当原namenode机器网络恢复,就会造成两个namenode同时工作,导致数据混乱,这就是所谓的“脑裂现象”。为了防止这个现象,当检测到namenode挂掉,那么就直接SSH连接到这台机器上,并将namenode直接kill掉,第10条配置就要指定当初配置SSH生成的私钥目录

(11)配置journalnode的数据存放的文件夹(要记得去创建文件夹)

vim /work/soft/hadoop-2.6./etc/hadoop/hdfs-site.xml

  <property>
<name>dfs.nameservices</name>
<value>stormcluster</value>
</property>
<property>
<name>dfs.ha.namenodes.stormcluster</name>
<value>storm1,storm2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.stormcluster.storm1</name>
<value>storm1:</value>
</property>
<property>
<name>dfs.namenode.rpc-address.stormcluster.storm2</name>
<value>storm2:</value>
</property>
<property>
<name>dfs.namenode.http-address.stormcluster.storm1</name>
<value>storm1:</value>
</property>
<property>
<name>dfs.namenode.http-address.stormcluster.storm2</name>
<value>storm2:</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://storm1:8485;storm2:8485/stormcluster</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.stormcluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/work/hadoop/jn</value>
</property>

3、failover配置----core-site.xml配置

(1)将之前设置的defaultFS修改成我们刚刚配置的集群id

vim /work/soft/hadoop-2.6./etc/hadoop/core-site.xml

  <property>
<name>fs.defaultFS</name>
<value>hdfs://stormcluster</value>
</property>

4、启动/停止journalnode

$HADOOP_PREFIX/sbin/hadoop-daemon.sh start journalnode
$HADOOP_PREFIX/sbin/hadoop-daemon.sh stop journalnode

5、启动后用jps命令看看journalnode节点是否存在

6、将第一个namenode进行格式化

hdfs namenode -format

7、将第二个namenode初始化作为备份

hdfs namenode -bootstrapStandby

8、将第一个namenode的journode进行初始化

hdfs namenode -initializeSharedEdits

9、将两台机器的namenode启动

$HADOOP_PREFIX/sbin/hadoop-daemon.sh --script hdfs start namenode

10、通过50070端口访问两台机的控制台,可以发现两个namenode都处于standby状态

11、执行命令手动切换active节点,将storm1激活,storm2变成备份,刷新控制台,可以发现storm1变成了active,storm2依然是standby

hdfs haadmin -failover storm2 storm1

12、配置zkfc自动化切换

(1)首先配置Zookeeper的超时时间,生产环境尽量设置小一些,及时判断是否宕机

vim /work/soft/hadoop-2.6./etc/hadoop/core-site.xml

  <property>
<name>ha.zookeeper.session-timeout.ms</name>
<value></value>
</property>

(2)启动Zookeeper集群

$ZOOKEEPER_HOME/bin/zkServer.sh start

(3)配置自动化切换和Zookeeper集群的地址

vim /work/soft/hadoop-2.6./etc/hadoop/hdfs-site.xml

  <property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>storm1:,storm2:</value>
</property>

(4)初始化Zookeeper集群

$HADOOP_PREFIX/bin/hdfs zkfc -formatZK

(5)进入Zookeeper命令行查看目录,可以看到多了一个hadoop-ha,说明配置正确

$ZOOKEEPER_HOME/bin/zkCli.sh

ls /

(6)我们把两台机的namenode都重启一下

$HADOOP_PREFIX/sbin/hadoop-daemon.sh --script hdfs stop namenode
$HADOOP_PREFIX/sbin/hadoop-daemon.sh --script hdfs start namenode

(7)通过50070控制台可以看到两台都处于standby状态(如果namenode起不来,就格式化一下)

(8)启动zkfc

$HADOOP_PREFIX/sbin/hadoop-daemon.sh --script $HADOOP_PREFIX/bin/hdfs start zkfc

(9)用jps命令可以看到新的进程

(10)刷新50070控制台,可以发现有一台namenode已经变成了active

三、总结

1、到此我们的Hadoop集群已经搭建完毕,终于可以开始使用HBash了,要注意当前集群节点的启动顺序

zookeeper-->journalnode-->namenode-->zkfc-->datanode

2、以下是按照启动顺序的启动命令总结

$ZOOKEEPER_HOME/bin/zkServer.sh start
$HADOOP_PREFIX/sbin/hadoop-daemon.sh start journalnode
$HADOOP_PREFIX/sbin/hadoop-daemon.sh --script hdfs start namenode
$HADOOP_PREFIX/sbin/hadoop-daemon.sh --script $HADOOP_PREFIX/bin/hdfs start zkfc
$HADOOP_PREFIX/sbin/hadoop-daemon.sh --script hdfs start datanode

3、以下是按照启动顺序的停止命令总结

$ZOOKEEPER_HOME/bin/zkServer.sh stop
$HADOOP_PREFIX/sbin/hadoop-daemon.sh stop journalnode
$HADOOP_PREFIX/sbin/hadoop-daemon.sh --script hdfs stop namenode
$HADOOP_PREFIX/sbin/hadoop-daemon.sh --script $HADOOP_PREFIX/bin/hdfs stop zkfc
$HADOOP_PREFIX/sbin/hadoop-daemon.sh --script hdfs stop datanode

4、经常遇到namenode或者datanode起不来,可以删除数据目录,再执行格式化命令

rm -rf /work/hadoop/nn/*
rm -rf /work/hadoop/dn/* hdfs namenode -format

流式大数据计算实践(3)----高可用的Hadoop集群的更多相关文章

  1. 流式大数据计算实践(1)----Hadoop单机模式

    一.前言 1.从今天开始进行流式大数据计算的实践之路,需要完成一个车辆实时热力图 2.技术选型:HBase作为数据仓库,Storm作为流式计算框架,ECharts作为热力图的展示 3.计划使用两台虚拟 ...

  2. 流式大数据计算实践(4)----HBase安装

    一.前言 1.前面我们搭建好了高可用的Hadoop集群,本文正式开始搭建HBase 2.HBase简介 (1)Master节点负责管理数据,类似Hadoop里面的namenode,但是他只负责建表改表 ...

  3. 流式大数据计算实践(2)----Hadoop集群和Zookeeper

    一.前言 1.上一文搭建好了Hadoop单机模式,这一文继续搭建Hadoop集群 二.搭建Hadoop集群 1.根据上文的流程得到两台单机模式的机器,并保证两台单机模式正常启动,记得第二台机器core ...

  4. 流式大数据计算实践(6)----Storm简介&使用&安装

    一.前言 1.这一文开始进入Storm流式计算框架的学习 二.Storm简介 1.Storm与Hadoop的区别就是,Hadoop是一个离线执行的作业,执行完毕就结束了,而Storm是可以源源不断的接 ...

  5. 流式大数据计算实践(5)----HBase使用&SpringBoot集成

    一.前言 1.上文中我们搭建好了一套HBase集群环境,这一文我们学习一下HBase的基本操作和客户端API的使用 二.shell操作 先通过命令进入HBase的命令行操作 /work/soft/hb ...

  6. 流式大数据计算实践(7)----Hive安装

    一.前言 1.这一文学习使用Hive 二.Hive介绍与安装 Hive介绍:Hive是基于Hadoop的一个数据仓库工具,可以通过HQL语句(类似SQL)来操作HDFS上面的数据,其原理就是将用户写的 ...

  7. 保姆级教程,带你认识大数据,从0到1搭建 Hadoop 集群

    大数据简介,概念部分 概念部分,建议之前没有任何大数据相关知识的朋友阅读 大数据概论 什么是大数据 大数据(Big Data)是指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需 ...

  8. 1.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(上)

    公众号关注「WeiyiGeek」 设为「特别关注」,每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x00 前言简述 0x01 环境准备 主机规划 软件版本 网络规划 0x02 ...

  9. 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...

随机推荐

  1. springboot增删改查

    改https://blog.csdn.net/weixin_42338186/article/details/81561592 添加https://blog.csdn.net/weixin_42338 ...

  2. 201771010118 马昕璐 《面向对象设计 java》第十七周实验总结

    1.实验目的与要求 (1) 掌握线程同步的概念及实现技术: (2) 线程综合编程练习 2.实验内容和步骤 实验1:测试程序并进行代码注释. 测试程序1: l 在Elipse环境下调试教材651页程序1 ...

  3. node06

    1.数据库: server端:数据存在 client端:管理工具,node mysql内有两个单位: 库:类似文件夹,容纳表 表:存储数据 行:一条数据 列(字段,域):一个数据项 主键:数据的唯一标 ...

  4. pyhton中常用的基础模块

    目前在看Google的DetectionAPI源码,自己的Python功底不是很好,看到了哪些模块就随手记一下. 1.abc模块,参考https://www.cnblogs.com/wancy86/p ...

  5. 反调试——jmp到那个地址

    目录 1.前言 2.原理讲解 3.代码实现 前言 这节的反调试是通过构造代码来干扰正常的分析.反调试参考CrypMic勒索病毒 原理讲解 在逆向分析汇编代码时,一般都是通过汇编指令call或jmp跳到 ...

  6. 让webstorm里提示nodejs智能补全

    webstorm里是默认没有nodejs只能提示的, 比如,输入requ到现在还不提示出require这个函数名,非常不方便. 设置方式: file  --> setting -->edi ...

  7. Luogu P1381油滴扩展

    传送门 数据范围给的很小啊,n >= 0 && n <= 7,所以给了DFS生存的空间. 对于每一个油滴,可以说在它下一个油滴放置之前,当前的这个油滴的半径并不确定(但是对 ...

  8. SSIS - 5.优先约束

      一.优先约束和执行逻辑 任务和容器是SSIS中的可执行文件,一个优先约束连接着两个可执行文件:优先的可执行文件和约束的可执行文件,如下图. 它的执行逻辑如下图: 1)先执行优先可执行文件 2)判断 ...

  9. Java Bloom filter几种实现比较

    英文原始出处: Bloom filter for Scala, the fastest for JVM 本文介绍的是用Scala实现的Bloom filter. 源代码在github上.依照性能测试结 ...

  10. Spring Cloud 微服务架构的五脏六腑,统统晒一晒!

    Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 注:Spring Boot 简单理解就是简化 Spring 项目的搭建.配置.组 ...