hbase的hlog原理-如何保证数据高可靠、如何恢复数据-sequenceid原理

2023-10-30

hbase写入数据时,为了提升写入效率,先写入缓存memory store,默认为128M,缓存满了会触发flush落盘,写入hfile文件。

但这种方式并不安全,如果缓存未满之前region server挂掉,还未来得及落盘的数据就会丢失。

hbase提供的解决方案是在写入缓存之前写入hlog日志文件。

每个region server管理多个region,这些region共享一个hlog,即一个region server上只有一个hlog,准确的说,只有一个可以写入的hlog,因为hlog达到指定大小后,会滚动生成一个新的hlog接收新的日志数据。

在这里插入图片描述

结合hlog的作用,有下面两个问题,需要搞清楚:

  • 第一,随着hbase大量的写入,日志必然会越来越多,永久保存会浪费大量存储空间,hbase规定hlog超出一定数量后要删除最老的日志文件,如何确定一个文件能不能删除呢,如果最老的文件不能删除,hbase的机制是什么?

  • 第二,hlog存在的作用是为了保证数据的高可靠,防止数据丢失,那么当region server宕机之后,如果根据hlog恢复数据呢?

sequenceId就是这几个问题的答案。

记入hlog的每一条日志都有一个sequenceId,写入memory store的数据也包含sequenceId,并且是一一对应的。

sequenceId是什么呢?

sequenceId是一个hlog维护的自增id,每个region维护一个,同一个region的sequenceId不会重复。

除此之外,hlog还维护着另外一个变量oldestUnflushedSequenceId,这个变量指向一个sequenceId,这个sequenceId之前的记录已经全部落盘了。

假设某个region server上有两个region,其hlog的逻辑图如下:
在这里插入图片描述

此时有两个hlog,hlog1已经写满,注意此时oldestUnflushedSequenceId的指向:

region1的oldestUnflushedSequenceId指向sequenceId的值是3,说明3之前的数据已经落盘。

region2的oldestUnflushedSequenceId指向sequenceId的值是6,说明6之前的数据已经落盘。

从图上可以直观的看出,两个region的oldestUnflushedSequenceId指向的sequenceid都在hlog2上,说明hlog1上所有的日志对应的数据都已经落盘,此时hlog1可以被删除。

如果是下面这种情况:

在这里插入图片描述
region1的oldestUnflushedSequenceId指向了hlog1,说明hlog1上对应数据还没有落盘,假设系统设置的最大hlog文件数是2,则不能再创建新的hlog文件,必须要删除一个hlog文件,但最老的hlog1还没有全部落盘,不能直接删除。

这种情况下,hbase会强制hlog1对应的数据flush落盘,使得hlog可以删除。

搞清楚了这个机制,宕机之后的数据恢复也就比较容易理解了。

宕机之后,hbase会找到对应的hlog日志,将oldestUnflushedSequenceId之后的数据恢复出来,写入缓存,数据就得到了恢复。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hbase的hlog原理-如何保证数据高可靠、如何恢复数据-sequenceid原理 的相关文章

  • jar包class冲突:spark任务执行异常-java.lang.NoSuchMethodError: org.apache.hadoop.fs.PartialListing

    问题描述 提交到yarn集群后任务报错 报错信息如下 java lang NoSuchMethodError org apache hadoop fs PartialListing 根据报错信息 初步估计是jar包冲突或者不同jar包有同名
  • 嘴说手画Spark的存储系统

    Spark本身并不存储数据 这里所说的存储系统是指计算过程中 管理内存中数据 如读到内存的源数据 缓存的RDD数据 广播数据 Shuffle文件数据的功能模块 如果没有存储管理系统 计算是无法完成的 存储系统的主要由以下组件构成 Block
  • 手写代码-Hudi-Demo

    import org apache hudi config HoodieIndexConfig import org apache hudi index HoodieIndex import org apache hudi DataSour
  • elasticsearch之嵌套对象、父子文档

    一 嵌套对象 es并非关系型数据库 它并不擅长关系型数据库的join操作 在存储数据时 用冗余数据替代查询时的关联 如blog和comments 如果用关系型数据库 会将blog存一个表 comments存另一个表 然后将这两个表关联起来
  • 安装Apache Atlas遇到的错误

    安装apache atlas 启动atlas server报错 查看logs atlas 20220524 115239 out文件 Caused by org springframework beans factory Unsatisfi
  • hbase的hlog原理-如何保证数据高可靠、如何恢复数据-sequenceid原理

    hbase写入数据时 为了提升写入效率 先写入缓存memory store 默认为128M 缓存满了会触发flush落盘 写入hfile文件 但这种方式并不安全 如果缓存未满之前region server挂掉 还未来得及落盘的数据就会丢失
  • Spark jar包加载顺序及冲突解决

    一 spark jar包加载顺序 1 SystemClasspath Spark安装时候提供的依赖包 通常是spark home目录下的jars文件夹 SystemClassPath 2 Spark submit jars 提交的依赖包 U
  • 数据仓库理论知识

    一 数据仓库与数据集市 可以简单理解为数据仓库是面向整个企业 而数据集市是面向某个部门的 数据集市的数据来自数据仓库 当然 如果没有数据仓库 数据集市的数据也可以直接取自业务数据库 1 离线与实时 离线数仓 从业务上看 对已知范围的数据定时
  • 我读zookeeper源码系列1

    一 准备工作 1 zookeeper版本 01 zookeeper 3 4 x 企业最常用 大数据技术组件最常用 基本维持在 3 4 5 3 4 6 3 4 7 这几个版本 02 zookeeper 3 5 x 03 zookeeper 3
  • MPP架构

    MPP Massively Parallel Processing 大规模并行处理 面对海量数据和计算时 采用大事化小的思路 对数据进行分割 数据分割后单独存储 数据处理消耗的资源也是相互隔开的 对于MPP数据库来讲 整个数据库由多个完全独
  • Spark原理-SparkSql框架优化策略

    有了SparkCore为什么还要有SparkSql呢 有两大原因 一是SparkCore只能用Api 这就把很多SqlBoy拒之门外 Spark就无法发扬光大了 二是使用Api时用户编写的函数作为一个个闭包被序列化后分发到Executor执
  • 嘴说手画Spark的内存模型

    一 内存模型 Spark的内存模型如下图所示 Reserved Memory 固定为 300MB 不受开发者控制 是启动Spark框架本身所需要的内存空间 UserMemory 是用户空间 即用户定义的数据 通常是用户在代码中定义的变量 可
  • 嘴说手画一文搞懂Spark的Join

    Spark Sql的Join和关系型数据库Sql的Join有很多相同点 比如inner join left join right join full join 这是二者都有的概念 并且含义相同 但是 Spark Sql是分布式执行 面对的是
  • FlinkCDC-自定义序列化器

    package com lcy app customer import com alibaba fastjson JSONObject import com alibaba ververica cdc debezium DebeziumDe
  • 嘴说手画Spark的Bykey操作-groupByKey、reduceByKey、aggregateByKey 和 sortByKey

    之前写过一篇文章分析Spark Shuffle的原理 知道了Shuffle是性能杀手的原因 但在实际业务中 Shuffle操作通常不可避免 毕竟Spark基础的用途就是对大数据进行统计分析 由于数据分布的分散性 导致相同Key的数据汇集到一
  • 手撸算法-两数之和-牛客

    描述 给出一个整数数组 请在数组中找出两个加起来等于目标值的数 你给出的函数twoSum 需要返回这两个数字的下标 index1 index2 需要满足 index1 小于index2 注意 下标是从1开始的 假设给出的数组中只存在唯一解
  • Canal报错:Could not find first log file name in binary log index file

    解决方案 rm home admin canal server conf example meta dat 然后重启 home admin canal server bin restart sh
  • doris & StarRocks 错题本

    一 spark streaming load写入失败 Reason column count mismatch expect 25 real 1 src line demo masking 1 2018 02 17 1 B35C300672
  • IDEA编译报错:java: 未报告的异常错误X; 必须对其进行捕获或声明以便抛出

    IDEA编译Flink源码时报错 java 未报告的异常错误X 必须对其进行捕获或声明以便抛出 原因是环境变量配置的是JDK8 Flink部分代码是基于JDK11编写的 将JDK升级为JDK11 重新编译即成功
  • JAVA虚拟机灵魂之问:Xmx和Xms不一致对虚拟机性能有何影响

    使用jvisualVM查看idea进程 发现其关于堆大小的参数设置如下 并发现随着idea加载项目 其实际使用的内存会自动增大 加载项目前和加载项目后 堆大小是不一样的 有一个大幅提升的阶段 随着所需要的内存的增多 虚拟机会多次向操作系统申

随机推荐

  • Q_PROPERTY

    一 定义 Qt提供了一个成熟的属性系统 Q PROPERTY是一个宏 用来在类中声明一个属性 由于该特性是Qt所特有的 需要moc进行编译 故必须继承QObject 查看Qt助手 我们可以看到如下定义 看不懂 其实 这是一个正则表达式 我们
  • Selenium Web自动化测试框架实践

    功能实现 自动运行用例 自动生成测试报告 自动断言与截图 自动将最新测试报告发送到指定邮箱 自动生成测试报告 数据 页面元素 测试用例分离 执行日志 分布式执行 配置化文件 元素 数据 实践功能 https passport csdn ne
  • AUC,ROC我看到的最透彻的讲解

    面试的时候 一句话说明AUC的本质和计算规则 AUC 一个正例 一个负例 预测为正的概率值比预测为负的概率值还要大的可能性 所以根据定义 我们最直观的有两种计算AUC的方法 1 绘制ROC曲线 ROC曲线下面的面积就是AUC的值 2 假设总
  • 前端异步编程的进化之旅 promise generator aysnc/await

    promise generator aysnc await 1 三者都是异步编程的解决方案 不同的是 promise为较早出来的 其次generator 最后为async await 三者象征了前端进行解决异步编程的进化路程 promise
  • 接口的概念及接口的方法是怎么使用的

    接口 一个完成某些特定功能的类 是一个功能的集合 语法为 接口修饰符 interface 接口名称 成员变量和方法的声明 成员变量默认为public static final类型 类不能多继承 但可通过接口实现多层继承 接口既可以多层继承
  • Opencv-C++笔记 (11) : opencv-图像二值化与LUB查找表

    文章目录 一 概述 二 THRESH BINARY和THRESH BINARY INV 三 THRESH TRUNC 四 THRESH TOZERO和THRESH TOZERO INV 五 THRESH OTSU和THRESH TRIANG
  • Python爬虫进阶必备

    X天下密码加密分析 本次的受害者 aHR0cHM6Ly9wYXNzcG9ydC5mYW5nLmNvbS8 分析 通过输入错误密码抓包查看加密字段 图1 1 图1 1 直接通过检索pwd 定位加密位置 图1 2 图1 2 根据检索结果给对应的
  • 完美解决 IDEA plugins 插件搜索不出结果

    进入设置 勾选Auto detect proxy settings 输入URL http 127 0 0 1 1080 点击OK 最后 重启 IEDA 即可
  • 注解 @Transactional 事务类内调用不生效问题及解决办法

    Transactional 内部调用例子 在 Spring 的 AOP 代理下 只有目标方法由外部调用 目标方法才由 Spring 生成的代理对象来管理 这会造成自调用问题 若同一类中的其他没有 Transactional 注解的方法内部调
  • 基于FPGA的卷积网络加速(1)

    vivado hls是用高级语言设计硬件电路的IDE vivado sdsoc则用于软硬件协同也就是arm传数据到FPGA FPGA把结果传回到FPGA 开发人员不需要知道繁琐的接口的写法 只需要指定硬件函数和调用就可以 卷积神经网络加速
  • [记录学习]自学动力节点老杜MyBatis笔记_02

    MyBatis自学笔记 首先感谢动力节点和杜老师的教学分享 Respect 学习来源 B站 https www bilibili com video BV1JP4y1Z73S p 1 vd source 07c8a1a7d89af39fe2
  • applicationContext.xml和dispatcher-servlet.xml的区别

    Spring 官方文档介绍如下 Spring lets you define multiple contexts in a parent child hierarchy The applicationContext xml defines
  • python简单使用pyecharts库画多饼图

    from matplotlib pyplot import title from pyecharts options global options import TitleOpts from collections import named
  • JAVA集成华为推送 服务端

    一 注册成为开发者 地址 华为开发者联盟 智能终端能力开放 共建开发者生态 注册步骤参考 文档中心 二 推送的消息形式 华为Push建立了一条从应用服务器到终端App之间的通知消息传输通道 App的开发者通过华为Push平台可以方便的向华为
  • Python机器学习笔记 K-近邻算法

    K近邻 KNN k NearestNeighbor 分类算法是数据挖掘分类技术中最简单的方法之一 所谓K最近邻 就是K个最近的邻居的意思 说的是每个样本都可以用它最接近的k个邻居来代表 KNN算法的核心思想是如果一个样本在特征空间中的K个最
  • LeetCode——动态规划篇(一)

    刷题顺序及思路来源于代码随想录 网站地址 https programmercarl com 目录 509 斐波那契数 力扣 LeetCode 70 爬楼梯 力扣 LeetCode 746 使用最小花费爬楼梯 力扣 LeetCode 62 不
  • node.js安装

    1 下载 https nodejs org en download 点击如下位置 下载下来是msi文件 2 双击mis 3 验证 cmd node 出现版本号完成
  • 基于Java web的校园宿舍管理系统(功能丰富,界面友好)

    运行环境 最好是java jdk 1 8 我们在这个平台上运行的 其他版本理论上也可以 IDE环境 Eclipse Myeclipse IDEA都可以tomcat环境 Tomcat 7 x 8 x 9 x版本均可硬件环境 windows 7
  • 纠错输出码ECOC

    纠错输出码ECOC 即Error Correcting Output Codes 是一种最常用的MvM技术 many vs many多对多 而非训练完成后再去纠错 多分类学习最经典拆分策略 一对一OvO 一对其余OvR 多对多MvM 如果纠
  • hbase的hlog原理-如何保证数据高可靠、如何恢复数据-sequenceid原理

    hbase写入数据时 为了提升写入效率 先写入缓存memory store 默认为128M 缓存满了会触发flush落盘 写入hfile文件 但这种方式并不安全 如果缓存未满之前region server挂掉 还未来得及落盘的数据就会丢失