HDFS HA

1.hdfs ha架构图梳理

在这里插入图片描述
HA使用active NN, standby NN两个节点解决单点问题。两个NN节点通过JN集群,
共享状态,通过ZKFC选举active,监控状态,自动备援。
DN会同时向两个NN节点发送心跳。

HDFS 集群介绍

hdfs采用master-slave架构。集群中主要由NameNode、DataNode、Secondary NameNode、fsimage、editslog等5个部分组成。

  • NameNode:存储hdfs中的元数据信息(如:命名空间、副本数、Blok块分布、文件名,文件大小,文件位置等),接收DataNode的心跳包和块报告,管理所有的
  • DataNode节点,处理客户端提交的操作请求,对请求做安全检查。
  • DataNode:将文件内容存储内部的Blok块中,定期向NameNode发送心跳包和块报告,接受Client端的调度。
  • fsimage:存储NameNode一定时间内元数据的镜像文件(默认1小时生成一份)。
  • editslog:存储NameNode操作的日志。
  • Secondary NameNode:在指定时间点上将editslog与fsimage合并成一个新的fsimage文件。
  • JournalNode 用于主备NN之间同步元数据信息的共享存储系统
  • ZKFC(zookeeperFailoverController)是用来监控NN状态,协助实现主备NN切换的

在NameNode进程崩溃并重启时,会读取fsimage和editslog文件中的内容,用以恢复崩溃钱一刻的数据,这样就保证了数据的完整性。但是如果在崩溃时造成editslog文件损坏,或者磁盘损毁,就会造成数据丢失。因此便需要引入HA的概念了。

HA介绍

在hadoop2.x版本中,hdsf最多只能存在两个NameNode。因此在HA中是存在两个NameNode的,并且一个NameNode处于active(活跃状态),一个NameNode处于standby状态。即同一时间只有一个NameNode是处于工作状态的。

当active的NameNode出现故障时,如何启用standby的NameNode呢

  • 1.手动切换,通过hdfs haadmin -transitionToActive ,将给定NameNode的状态转换为Active
  • 2.自动切换,要使用自动切换,则需要引入一个ZKFailoverController(ZKFC)的进程和ZooKeeper的一个组件。ZKFC定期执行健康检查命令,监控NameNode状态,并与zk建立长久回话,当active状态的NameNode发生故障时,zk进行选举,并通知对应ZKFC把NameNode由standby切换为active状态。

NameNode之间是如何保持数据同步的

  • 接受到Client的请求时NameNode先将日志写入editslog中,并将日志写入JournalNodes集群,Standby
    NameNode读取JournalNode集群中的日志,并进行操作重演。并且DataNode定期想两个NameNode发送心跳和块报告。以此保证了NameNode之间的数据同步。

standbyNN和secondaryNN有什么区别

  • 在2.x版本中才引入StandbyNameNode,从journalNode上拷贝的。
    StandbyNameNode是可以做namenode的备份。
  • 在1.x版本中,SecondaryNameNode将fsimage跟edits进行合并,生成新的fsimage文件用http
    post传回NameNode节点。 SecondaryNameNode不能做NameNode的备份。

2.yarn ha架构图梳理

在这里插入图片描述
ZKFC:

  • zkfc在yarn中作为一个线程,处理RM的状态切换,并定期想zk发送心跳。
  • 一直监控lock文件,当文件不存在时,尝试写入,成功则为Active状态,失败则是Standby状态。

RMStateStore:

  • 存储NM中app的信息,在HA中默认存储在zk的 /rmstoer
    (/rmstore为默认值可通过yran.resourcemanager.zk-state-store.parent-path配置)路径下。
  • activeRM会向这个目录写APP信息
  • 当activeRM挂了,另外一个standby RM通过ZKFC选举成功为active,会从/rmstore读取相应的作业信息。重新构建作业的内存信息,启动内部的服务,开始接收NM的心跳,构建集群的资源信息,并且接收客户端的作业提交请求。

ZooKeeper:

  • 存储RMStateStore,接受ZKFC发送的心跳,存储lock文件。
  • 对ResourceManager状态进行选举,并将通知ZKFC。

ResourceManager:

  • 启动时候会向ZK的/rmstore目录写lock文件,写成功就为active,否则standby.
    rm节点zkfc会一直监控这个lock文件是否存在,假如不存在,写一个lock文件,宣布自己是active,否则为standby.
  • 接收client的请求,接收和监控NM的资源状况的汇报,负载资源的分配和调度。
  • 启动和监控APPMASTER on NM节点的container。
  • ApplicationsManager 运行在RM节点
  • ApplicationMaster 运行在NM节点 container容器里 作业的主程序

NodeManager:

  • 管理当前节点上的资源,启动容器运行task计算,并向Active状态的RM上报资源情况。

3.总结hdfs yarn ha架构区别

  • ZKFC HDFS中ZKFC作为单独的进程 Yarn中ZKFC是RM中的线程
  • 从节点 HDFS中的DataNode 会向两个NameNode同时发送心跳。Yarn中NodeManager只会向activeRM上报资源

4.hdfs dfs -ls 结果是哪个目录

(TBD)

5.双写的理解

spark–>HBase+es

hbase提供存储
es 提供快速查询与统计

6.小文件的理解 什么的小文件,危害,如何避免(产生前,产生后)

小文件危害
先说对小文件的定义,一般来说小于等于30M的文件,都叫小文件。在HDFS中,通常NN维护一个文件的名称,目录结构等大约是250字节。现实中,HDFS的小文件如果不做任何操作增长会很快,现在假设NN节点的内存为4G,差不多42亿字节,现在在HDFS上有一亿个小文件,那么需要250乘一亿大约是250亿字节,这样会将NN撑爆。小文件到达一定数目,就会将NN节点撑爆。就算NN能够存储,对于hive,spark计算时,小文件意味着需要更多的task和资源,同样也会将节点弄挂掉。

解决方案
生产上首先需要设置小文件的阈值,到达这个值对小文件进行合并。对于这个合并,一种是在HDFS存储之前就进行合并,还有一种就是计算完之后根据业务周期来进行合并。后一种需要在计算时格外对小文件进行调整,具体的会额外出文章讲。

7.主从架构的hbase读写经过master进程吗?

HBase架构图理解
在这里插入图片描述

  1. HMaster链接Zookeeper的目的:HMaster需要知道哪些HRegionServere是活的HRegionServer所在的位置,然后管理HRegionServer。
  2. HBase内部是通过DFS client把数据写到HDFS上的
  3. 每一个HRegionServer有多个HRegion,每一个HRegion有多个Store,每一个Store对应一个列簇。
  4. HFile是HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,StoreFile就是对HFile进行了封装,然后进行数据的存储。
  5. HStore由MemStore和StoreFile组成。
  6. HLog记录数据的所有变更,可以用来做数据恢复。
  7. hdfs对应的目录结构为 namespace->table->列簇->列->单元格

Hbase中HMaster的作用

  1. 管理用户对Table表的增、删、改、查操作;
  2. 管理HRegion服务器的负载均衡,调整HRegion分布;
  3. 在HRegion分裂后,负责新HRegion的分配;
  4. 在HRegion服务器停机后,负责失效HRegion服务器上的HRegion迁移

写数据流程

  1. zookeeper中存储了meta表的region信息,从meta表获取相应region信息,然后找到meta表的数据
  2. 根据namespace、表名和rowkey根据meta表的数据找到写入数据对应的region信息
  3. 找到对应的regionserver
  4. 把数据分别写到HLog和MemStore上一份
  5. MemStore达到一个阈值后则把数据刷成一个StoreFile文件。若MemStore中的数据有丢失,则可以总HLog上恢复
  6. 当多个StoreFile文件达到一定的大小后,会触发Compact合并操作,合并为一个StoreFile,这里同时进行版本的合并和数据删除。
  7. 当Compact后,逐步形成越来越大的StoreFIle后,会触发Split操作,把当前的StoreFile分成两个,这里相当于把一个大的region分割成两个region。如下图:
    在这里插入图片描述

读数据流程

  1. zookeeper中存储了meta表的region信息,所以先从zookeeper中找到meta表region的位置,然后读取meta表中的数据。meta中又存储了用户表的region信息。

  2. 根据namespace、表名和rowkey在meta表中找到对应的region信息

  3. 找到这个region对应的regionserver

  4. 查找对应的region

  5. 先从MemStore找数据,如果没有,再到StoreFile上读(为了读取的效率)。

https://blog.csdn.net/qq_38976805/article/details/89062289
Hadoop YARN HA架构

https://blog.csdn.net/qq_38976805/article/details/89053784
HDFS HA(Quorum Journal Manager) 架构解析

https://blog.csdn.net/dabokele/article/details/51686257
Hadoop-2.X HA模式下的FSImage和EditsLog合并过程

https://blog.csdn.net/Androidlushangderen/article/details/53148213
HDFS ZKFC自动切换原理分析

https://www.jianshu.com/p/e2bbf23f1ba2
HBase架构详解和数据的读写流程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值