hbase-数据恢复流程
引用《https://blog.csdn.net/nigeaoaojiao/article/details/54909921》
hlog介绍:

hlog构建:

从图中可以看出,对于一个hlog日志,整一个region server中的region数据都写入到同一个日志中,日志中最小单元的格式为<HLogKey,WALEdit>
hlogKey格式:
- sequenceid,自增id
- write time,写入时间,修改操作何时写入日志的时间戳
- cluster ids,集群id,满足用户多集群之间复制的需求
- region 信息
- table name,表名
hlog滚动:
region server每个一段时间就会生成一个log文件(默认1小时,可以设置),设置日志滚动机制,类似于binlog的处理机制。虽然会产生会多文件,但是考虑到删除文件时,直接将文件删除是最方便的方式。
hlog失效:
当一个日志文件的数据全部从MemStore中flush到了HFile中,该日志文件即可以被删除掉了。可以通过自增id——sequenceid判断,当一个文件中的sequenceid小于Memstore中flush记录的最大的sequenceid即可判断。当一个log被判定为失效后,会被移到oldWALs目录下
hlog删除:
hmaster后台启动一个线程每个一段时间(默认一分钟)检查文件夹OldWALs,判断下面的log是否真正的失效,确认失效即删除。
hbase日志恢复流程:
regionServer是否存活:
hbase中,master检查regionServer是否存活是通过zookeeper实现的,regionServer通过向zookeeper注册节点(/hbase/rs目录下),并且定时向zookeeper上报心跳来证明自己处于存活状态。master通过查看该目录的节点查看regionServer是否存活。
region server出问题的情况:
- regionServer出现长时间的full gc
- regionServer宕机
- zookeeper出问题
- 网络问题
- 等等

在master看来,就是在zookeeper中查看不到具体的region Server注册的节点,这时候就会进行数据恢复。
hbase的日志恢复有三种方式:
- logSplitting
- Distributed log splitting
- Distributed log replay
logSplitting:

hbase的日志分割方式,整个过程都由HMaster执行。
- 首先将日志复制一份,重命名后缀加-splitting。
- 启动一个线程依次读取log,根据hlogkey中不同的region,写入到不同的buffer中。知道全部的log读完
- 对应每个buffer启动一个线程,将每个buffer的数据写入到hdfs中
- 之后,等hmaster分配完region后,将hdfs中数据写入到对应的region中
因为是单线程恢复,在出现大量的机器宕机后,需要恢复的数据过大,耗时会变得非常长。
Distributed log splitting:
DLS是LS的分布式实现,借助了master和多个regionserver的计算能力,将hlog的splitting任务分散到不同的regionserver上。

- hmaster分别将每个log(该日志在hdfs上的路径)作为一个任务发布到zookeeper上(/hbase/splitWAL节点下),设置起始状态为TASK_UNASSIGNED。
- 所有存活的regionserver都注册这个节点上等待任务,一旦hmaster发布任务,全部regionserver开始竞争任务,即全部regionserver尝试修改任务状态为TASK_OWNED,修改成功即竞争成功。
- regionserver抢占任务成功后,分配任务给相应的线程处理。处理成功修改状态为TASK_DONE,失败修改状态为TASK_ERR。
- hmaster一直监听者该节点,一旦有状态修改就会收到通知,如果任务成功,则删除对应任务节点,如果任务失败,则从新发布任务。
- 具体regionserver处理一个任务的流程和LS处理流程一样
DLS有一个问题,生成的小文件过多,对于M个region,N个hlog日志最终会生成M*N个文件。
Distributed log replay:
DLR方式相对于DLS方式来说,流程上做了一些改动:
- DLR先分配region,在切分回放HLog,region重新分配后状态被设置为recovering,该状态只能写不能读取。而在HLog splitting分配到buffer后,不写文件,而是直接执行回放操作。
hbase-数据恢复流程的更多相关文章
- hbase读写流程
一. Hbase读流程 META表记录着表的原信息,根据rowkey查询META表,获取所在region信息 客户端去相应的regionServer查询数据,先查询memStore(memstore是 ...
- HBase Scan流程分析
HBase Scan流程分析 HBase的读流程目前看来比较复杂,主要由于: HBase的表数据分为多个层次,HRegion->HStore->[HFile,HFile,...,MemSt ...
- 8.hbase写入流程和读取流程
1 hbase写入流程 hbase中无论是新增数据还是修改已有行,其内部流程都是一样的,hbase执行写入时会写到两个地方,write-ahead log 简称wal 也叫hlog 预写式日志 和 M ...
- Mysql 数据恢复流程 基于binlog redolog undolog
注:文中有个易混淆的地方 sql事务,即每次数据库操作生成的事务,这个事务trx_id只在undolog里存储,同时undolog维护了此事务是否完成的状态. 日志持久化事务,为了保证redolog和 ...
- hbase读写流程分析
前言 最近被大佬问到一个问题,hbase查询数据在最坏的场景下需要进行几次rpc,当时就懵了..下面主要对client端代码进行分析.阅读文章和看源码更配~ 读数据 流程总览 1. 从zookeepe ...
- oracle 执行 delete user$ 误删所有用户信息后的数据恢复流程
起因: 在oracle测试过程中,不小心执行了delete user$ 命令,导致oracle当前实例所有的用户信息丢失,包括sys用户. 第一次使用DUL工具数据恢复:失败 下载ParnassusD ...
- Hbase读写流程和寻址机制
写操作流程 (1) Client通过Zookeeper的调度,向RegionServer发出写数据请求,在Region中写数据. (2) 数据被写入Region的MemStore,直到MemStore ...
- Hbase获取流程
1\\.客户端chou操作 2.服务器dauncaozuo操作 3\存储优化
- Hbase存储流程
- HBase 数据恢复
参考链接: https://community.hortonworks.com/content/supportkb/48748/hbase-master-wont-start-with-followi ...
随机推荐
- 如何将composer设置为全局变量?
全局安装是将 Composer 安装到系统环境变量 PATH 所包含的路径下面,然后就能够在命令行窗口中直接执行 composer 命令了. Mac 或 Linux 系统: 打开命令行窗口并执行如下命 ...
- redis-cli显示中文
在启动redis-cli时在其后面加上--raw参数即可启动后 再显示就正常了
- Zabbix 配置监控主机
1.新建主机: zabbix中的主机(Host)是要监控的网络实体(物理的,或者虚拟的);zabbix中,对于主机的定义非常灵活,它可以时一台物理服务器,一个网络交换机,一个虚拟机或者一些应用 zab ...
- 73.纯 CSS 创作一只卡通狐狸
原文地址:https://segmentfault.com/a/1190000015566332 学习效果地址:https://scrimba.com/c/cz6EzdSd 感想:过渡效果,圆角,定位 ...
- Jmeter之数据库性能测试
公司的**产品急待上线,但查询订单操作响应很慢,为了准确定位问题,特对几个大数据查询语句进行性能测试. 环境介绍:数据库用的MYSQL,采用分布式布置,本次单压测一台数据库服务器,查询待支付订单.待消 ...
- pyqt-QGrapicsView类
QGrapicsView类 QGraphicsView提供一个显示QGraphicsScene内容的窗口,该窗口可以滚动,可以在构造时候把场景对象作为参数,或者之后使用setScene()来设置vie ...
- 剑指offer——包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度为O(1)) 该题是自己第一次采用编程的方式来实现Java中栈的功能,故直接借鉴了大牛的代码 import ...
- [GNU] 喝一杯咖啡, 写一写 Makefile
Makefile 是 Linux 下组织程序的一个工具,它的命令是 make. (首字母M/m都可以) [Makefile] Makefile 编写的主旋律: target: [dependency] ...
- splice() 方法通过删除现有元素和/或添加新元素来更改一个数组的内容。
var myFish = ["angel", "clown", "mandarin", "surgeon"]; //从第 ...
- 【第二组】Hunter——beta版发布文档
软件测试报告 一.bug情况汇总 尚需解决以及难以解决的: 登录时会有卡顿,需要加入加载进度条(会添加的) 商城和背包功能尚未实现(需要修复) 美工水平太差,让人没有使用的欲望(大概接下来就专门做这个 ...