本文系转载,如有侵权,请联系我:likui0913@gmail.com

Compacation

HBase 在读写的过程中,难免会产生无效的数据以及过小的文件,比如:MemStore 在未达到指定大小便刷新数据以写入到磁盘;或者当已经写入 HFile 的数据被删除后,原数据被标记了墓碑,却仍然存在于 HFile 之中。在这些情况之下,我们需要清除无效的数据或者合并过小的文件来提高读的性能。这种合并的过程也被称为 compacation。

HBase 中使用的 compacation 方式主要分为以下两种:

  • Minor_compaction
  • Major_compaction

Minor_Compaction

HBase 会自动选择一些较小的 HFile,并将它们重写成更少的但更大的 HFiles 文件,这个过程被称为 minor_compaction。minor_compaction 通过将少量的相邻的 HFile 合并为单个 HFile 来达到压缩操作,但是它不会删除被标记为删除或过期的数据。

Major_Compaction

Major_Compaction 将 Region 中的所有 HFile 合并并重写成一系列由列族(Column Family)组成的 HFile 文件,并在此过程删除已被删除或已过期的数据。这会提高读取性能,但是由于 Major_compaction 会重写所有文件,所以在此过程中可能会发生大量的磁盘 I/O 和网络流量,这种现象被称为写入放大(write amplification)。

Region Split

最初,每一个 table 都会有一个 Region。随着数据的不断写入,当这个 Region 变得太大时,它就会被分裂成两个子 Regions。两个子 Regions 各种拥有原 Region 的一半,它们会在相同的 RegionServer 上并行打开,然后将分区信息报告给 HMaster。处于负载均衡的原因,HMaster 可能会将新的 Region 移动到其它服务器。

负载均衡

Split 最初发生在同一个 RegionServer 上,但是出于负载均衡的原因,HMaster 可能会将新的 Region 移动到其它服务器(移动元数据,而不是 HFile 文件)。这会导致新的 RegionServer 提供来自远程 HDFS 节点的数据,直到 Major_compaction 时将数据文件移动到区域服务器的本地节点。

故障恢复

WAL 文件和 HFile 被保存在磁盘上并被复制,但是 MemStore 还没有被保存在磁盘上,所以当 RegionServer 发生问题后,HBase 是如何恢复 MemStore 之中的数据呢?

当 RegionServer 失败时,崩溃的 Region 将不可用,直到检查并恢复之后方可继续使用。Zookeeper 会在失去 RegionServer 心跳时确定节点故障,HMaster 将会被通知 RegionServer 已经失败。

注:当 RegionServer 失败时,正在查询该节点上的数据的操作会被重试,并且不会立即丢失。

当 HMaster 检测到 RegionServer 已经崩溃时,HMaster 会将已崩溃的 RegionServer 上的 Regions 重新分配给活动的 RegionServer。为了恢复已崩溃的 RegionServer 上未刷新到磁盘的 MemStore 中的内容,HMaster 将属于崩溃的 RegionServer 的 WAL 文件拆分成单独的文件,并将这些文件存储在新的 RegionServer 的 DataNode 上。然后新的 RegionServer 根据拆分后的 WAL 文件重播 WAL,以重建丢失的 MemStore 区域。

WAL 重播

WAL 文件包含编辑列表,一个编辑表示单个操作的 put 或者 delete。编辑按照时间顺序写入,并将附加到存储在磁盘上的 WAL 文件的末尾。

如果数据仍在 MemStore 中并且未保存到 HFile 中时,将发生 WAL 重播。WAL 重播是通过读取 WAL 文件,将其包含的编辑操作添加到当前的 MemStore 并进行排序来完成的。

参考链接

HBase 架构与工作原理4 - 压缩、分裂与故障恢复的更多相关文章

  1. HBase(三)HBase架构与工作原理

    一.系统架构 注意:应该是每一个 RegionServer 就只有一个 HLog,而不是一个 Region 有一个 HLog. 从HBase的架构图上可以看出,HBase中的组件包括Client.Zo ...

  2. HBase 架构与工作原理2 - HBase 组件

    本文系转载,如有侵权,请联系我:likui0913@gmail.com 一.HBase 组件概览 Master-Slave 模式: HBase 体系结构遵循传统的 master-slave 模式,由一 ...

  3. HBase 架构与工作原理3 - HBase 读写与删除原理

    本文系转载,如有侵权,请联系我:likui0913@gmail.com 一.前言 在 HBase 中,Region 是有效性和分布的基本单位,这通常也是我们在维护时能直接操作的最小单位.比如当一个集群 ...

  4. HBase 架构与工作原理5 - Region 的部分特性

    本文系转载,如有侵权,请联系我:likui0913@gmail.com Region Region 是表格可用性和分布的基本元素,由列族(Column Family)构成的 Store 组成.对象的层 ...

  5. HBase 架构与工作原理1 - HBase 的数据模型

    本文系转载,如有侵权,请联系我:likui0913@gmail.com 一.应用场景 HBase 与 Google 的 BigTable 极为相似,可以说 HBase 就是根据 BigTable 设计 ...

  6. 转载->CPU的内部架构和工作原理

    CPU的内部架构和工作原理 本片博客转自:http://www.cnblogs.com/onepixel/p/8724526.html  感谢博主分享! 内部架构 CPU 的根本任务就是执行指令,对计 ...

  7. CPU处理器架构和工作原理浅析

    CPU处理器架构和工作原理浅析 http://c.biancheng.net/view/3456.html 汇编语言是学习计算机如何工作的很好的工具,它需要我们具备计算机硬件的工作知识. 基本微机设计 ...

  8. 1、cpu架构和工作原理

    cpu架构和工作原理 计算机有5大基本组成部分,运算器,控制器,存储器,输入和输出.运算器和控制器封装到一起,加上寄存器组和cpu内部总线构成中央处理器(CPU).cpu的根本任务,就是执行指令,对计 ...

  9. CPU的内部架构和工作原理 (转,相当不错)

    http://blog.chinaunix.net/uid-23069658-id-3563960.html 一直以来,总以为CPU内部真是如当年学习<计算机组成原理>时书上所介绍的那样, ...

随机推荐

  1. 查询红帽linux/Oracle Linux的发行版本的方法

    [root@localhost ~]# lsb_release -aLSB Version:    :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:grap ...

  2. c++ 文件位置相关操作

    教学内容:  l  文件定位操作 l  fgetpos定位 l  fsetpos设定位置 l  文件结束判断函数feof   一.文件定位操作 在C语言标准库里 获取文件位置的函数有ftell和fge ...

  3. lxml etree xpath

    from lxml import etree #####################基本用法: ##################### html = ''' <h1 class=&quo ...

  4. 【JLOI2013】卡牌游戏

    题面 题解 概率$dp$ 设$f[i][j]$表示还剩$i$个人时,第$j$个人获胜的概率. 边界$f[1][1] = 1$ 转移: 枚举庄家抽到的卡牌$k$,得到这一轮被淘汰的位置$c$. 可以知道 ...

  5. 【bzoj1066】【luogu2472】[SCOI2007]蜥蜴

    1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec  Memory Limit: 162 MB Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上 ...

  6. Storm 第二章 Storm安装

    1 strom集群规划 Nimbus:hadoop1 zookeeper:hadoop2,hadoop3,hadoop4 supervisor:hadoop5,hadoop6,hadoop7 安装文件 ...

  7. 【Python Learning第一篇】Linux命令学习及Vim命令的使用

    学了两天,终于把基本命令学完了,掌握以后可以当半个程序员了♪(^∇^*) 此文是一篇备忘录或者查询笔记,如果哪位大佬看上了并且非常嫌弃的话,还请大佬不吝赐教,多多包涵 以下是我上课做的一些笔记,非常的 ...

  8. 在WebGL场景中进行棋盘操作的实验

    这篇文章讨论如何在基于Babylon.js的WebGL场景中,建立棋盘状的地块和多个可选择的棋子对象,在点选棋子时显示棋子的移动范围,并且在点击移动范围内的空白地块时向目标地块移动棋子.在这一过程中要 ...

  9. Web APi 入门例子

    http://www.cnblogs.com/guyun/p/4589115.html#what

  10. Netty源码分析第8章(高性能工具类FastThreadLocal和Recycler)---->第6节: 异线程回收对象

    Netty源码分析第八章: 高性能工具类FastThreadLocal和Recycler 第六节: 异线程回收对象 异线程回收对象, 就是创建对象和回收对象不在同一条线程的情况下, 对象回收的逻辑 我 ...