HBase sequenceId知识点略记

简介: 在HBase中,sequenceId是实现一致性的灵魂,这里的一致性有两方面意思: 顺序性,即先写的先被读到,未提交的写不能被读到; 完整性,包含如下几点; 未持久化到hfile的数据,对应的wal文件不能删除 如果由于wal文件过多需要清理,则需要先把对应的数据持久化 异常恢复过程中,需要.

在HBase中,sequenceId是实现一致性的灵魂,这里的一致性有两方面意思:

  1. 顺序性,即先写的先被读到,未提交的写不能被读到;
  2. 完整性,包含如下几点;
  • 未持久化到hfile的数据,对应的wal文件不能删除
  • 如果由于wal文件过多需要清理,则需要先把对应的数据持久化
  • 异常恢复过程中,需要能够找出wal文件中尚未持久化的部分

以下从seqId的生成、保存和使用几方面对相关知识点进行了整理;

在哪里生成

1、每个HRegion都对应了一个的MultiVersionConcurrencyControl,该类中有2个变量:readPoint和writePoint,rpcHandler处理写请求的过程中,在写wal之前,会通过将writePoint加1来得到最新的seqId,然后创建1个WriteEntry,封装了该seqId和代表是否完成的状态,最后放入到1个链表中,代码如下:

synchronized (writeQueue) {
  long nextWriteNumber = writePoint.incrementAndGet();
  WriteEntry e = new WriteEntry(nextWriteNumber);
  writeQueue.add(e);
  action.run();
  return e;
}

在哪些地方保存

  1. 写wal,walEntry的key中包含该seqId,同时会更新SequenceIdAccounting中的highestSequenceIds,其中保存了该WAL实例负责的各个region的最大seqId,值得注意的时,如果启用了multiwal,则会存在多个WAL实例并各自对应一个SequenceIdAccounting实例;
  2. 写memstore,cell中包含该seqId;
  3. 写完成时,更新readPoint为该seqId,这里会检查writeQueue中是否存在更小的未完成WriteEntry,如果有,则不会更新;
  4. flush,生成的hfile中,除了会在cell中包含该seqId之外,还会在fileInfo中保存MAX_SEQ_ID,代表hfile中的最大seqId,同时也会更新SequenceIdAccounting中的lowestUnflushedSequenceIds,其中保存了每个region下各个store的最小未持久化seqId;
  5. report,rs每隔3s会上报信息给master,其中包含了每个region及其各个store的lastFlushedSequenceIds;
  6. compact,会获取smallestReadPoint,seqId小于该值的cell会被当前及后续的所有scanner读取,因此在生成的新hfile中这些cell不需要再保存seqId;
  7. roll log,会获取SequenceIdAccounting中的highestSequenceIds,将其保存到AbstractFSWAL中的walFile2Props,然后将highestSequenceIds清空;
  8. bulkload,会先请求执行flush,其中会通过writePoint加1得到最新的seqId,并将其作为后缀放在hfile的文件名中(完整suffix:"_SeqId_" + seqNum + "_");

在哪些地方使用

  1. rpcHandler处理读请求的时候,会获取region的mvcc中最新的readpoint,以此过滤memstore和hfile中的数据;
  2. logRoller创建新wal文件时,会对AbstractFSWAL中的walFile2Props与SequenceIdAccounting中的lowestUnflushedSequenceIds进行比较,如果某个wal文件中各region的数据都已经落盘,则将其转移到oldWALs目录;
  3. log文件过多时,需要将最早那个log文件转移到oldWALs目录,此时也是对AbstractFSWAL中的walFile2Props与SequenceIdAccounting中的lowestUnflushedSequenceIds进行比较,找出存在未落盘数据的reigon进行flush;
  4. rs挂掉后执行scp,需要splitlog,将不同reigon的log放到该reigon的recovered.edits目录下,用来在open时replay,此时splitworker会从master获取seqId来过滤掉确定已落盘的数据,获取到的seqId分为region级别的lastFlushedSequenceId和store级别的storeSequenceId,分别用于读取wal文件和写入recovered.edits目录时进行过滤;
  5. openreigon的时候需要对recovered.edits目录下的数据进行replay,此时会再次根据store中各hfile的最大seqId进行过滤,这里再次过滤的原因是,splitlog时从master获取的seqId是rs定时上报的,存在一定的滞后;
  6. 另外,新引入的serial replication特性,也会使用seqId进行相关的协调控制;
相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
存储 SQL 分布式计算
一文让您全面了解清楚HBase数据库的所有知识点,值得收藏!
一文让您全面了解清楚HBase数据库的所有知识点,值得收藏!
143 0
|
存储 分布式计算 监控
好程序员大数据纪实:HBase知识点集中总结
好程序员大数据纪实: HBase知识点集中总结, HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。    与 FUJITSU Cliq等商用大数据产品不同,HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中
100 0
|
存储 分布式计算 监控
|
存储 人工智能 大数据
一文让您全面了解清楚HBase数据库的所有知识点,值得收藏!
欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯! 一、HBase基本概念:列式数据库 在Hadoop生态体系结构中,HBase位于HDFS(Hadoop分布式文件系统)的上一层,不依赖于MapReduce,那么如果没有HBase这种Nosql数据库会有什么影响呢?传统的关系型数据库由于存储数据有限,且其分布式结构由于本身的特点导致节点数量最大不会超过一百个,例如分布式的oracle数据库只能部署一百个节点等等。
1949 0
|
监控 分布式数据库 Hbase
HBase原理-要弄懂的sequenceId
好记性不如烂笔头,何况我的记性已经无药可救~ 为什么需要sequenceId? HBase数据在写入的时候首先追加写入HLog,再写入Memstore,也就是说一份数据会以两种不同的形式存在于两个地方。
2597 0
|
4月前
|
Java Shell 分布式数据库
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
82 0
|
8月前
|
SQL 分布式计算 Hadoop
Hadoop集群hbase的安装
Hadoop集群hbase的安装
140 0
|
4月前
|
分布式计算 Hadoop 关系型数据库
Hadoop任务scan Hbase 导出数据量变小分析
Hadoop任务scan Hbase 导出数据量变小分析
53 0
|
3月前
|
存储 分布式计算 Hadoop
Hadoop中的HBase是什么?请解释其作用和用途。
Hadoop中的HBase是什么?请解释其作用和用途。
40 0
|
4月前
|
SQL 分布式计算 Hadoop
Hadoop学习笔记(HDP)-Part.16 安装HBase
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
82 1
Hadoop学习笔记(HDP)-Part.16 安装HBase