《HBase权威指南》读书笔记8:第八章 架构

8.1 数据查找和传输

B+树:B+树比B树的改进为叶子节点也是顺序排放的

LSM(log-structured merge-tree)树

存储

系统概述

HBase主要处理两种文件: WAL (Write-Ahead Log)预写日志   和   实际的数据文件

基本流程

  1. 客户端联zookeeper查找行健
  2. 通过zookeeper获取含有 -ROOT- 的 region服务器名来完成的
  3. 通过含有 -ROOT- 的region服务器可以查询到含有 .META. 表中对应的region服务器名,其中包含请求的行键信息。这两处的主要内容都被缓存下来,并且都只查询一次
  4. 最终,通过查询 .META. 服务器来获取客户端的行键数据所在的region的服务器名

HregionServer

  • HRegionServer负责打开region,并创建对应的HRegion实例,当HRegion被打开后,它会为每个表的HColumnFamily创建一个Store实例
  • 每个Store实例包含一个或多个StoreFile实例,他们是实际数据文件HFile的轻量级封装
  • 每个store还有其对应的一个memstore
  • 一个HRegionServer分享一个HLog实例

写路径

写请求到的路径:

  1. WAL(HDFS)
  2. memstore
  3. HFile

网上有一幅特别好的图,虽然不是权威手册里面的,所以加到这篇文章里面。从图上可以明显看出 WAL是在hdfs上的

文件

  • WAL被存储在HDFS 里面 /hbase 目录下的 .log 文件夹里面
  • 由于WAL文件刚刚被创建所以显示大小是0。这是因为在hdfs里面用append来写入此文件,只有等到文件达到一个完整的块时,文件对用户才是可见的。
  • WAL 文件会等到 hbase.regionserver.logroll.period (默认是60分钟)时间之后被滚动,紧接着它的下一个新日志文件大小又从0开始了
  • 滚动之后旧日志被放到 .oldlogs 下,并等到 hbase.master.logcleaner.ttl (默认是10分钟) 后被删除。检测间隔是 hbase.master.cleaner.interval 属性设置的。

表级文件

  • 在HBase中,每张表都有自己的目录,位于HBase根目录下。每张表目录包括一个名为 .tableinfo 的顶层文件
  • 该文件对应序列化后的HTableDescription

Region级文件

  • .regioninfo 对应HRegionInfo实例
  • hbck  就是用 .regioninfo 来检查并生成元数据表中丢失的条目
  • region 如果超过了配置的最大值 hbase.hregion.max.filesize,会拆分,并创建一个 splits 目录

合并

  • 当文件的数量达到阀值,会触发合并操作。该过程会持续到这些文件中最大的一个超过最大存储大小,然后触发一次region  split
  • 合并分为 minor 和  major
  • minor 合并负责重写最后生成的几个文件到一个更大的文件中
  • minor 合并负责重写最后生成的几个文件到一个更大的文件中,具体合并几个文件靠 hbase.hstore.compaction.min 定义
  • minor 合并可以处理的最大文件数量默认为10,用户可通过 hbase.hstore.compaction.max 定义
  • major 合并把所有文件压缩成一个单独的文件

合并的触发:

  • CompactionChecker 类实现,它以一个固定的周期触发检查,这个周期由 hbase.server.thread.wakefrequency 参数控制(乘以 hbase.server.thread.wakefrequency.multiplier,设为 1000 ,这样它的执行频率不会像其他基于线程的任务这么频繁)
  • 除非使用 majorCompact() ,否则服务器将首先检查上次运行到现在是否达到 hbase.hregion.majorcompaction (默认为24小时)指定的时限。
  • 如果没有到 major 合并的执行周期,系统会选择 minor 合并执行

WAL

HLog类

  • 实现了WAL的类叫做HLog
  • WAL是可选的,如果用户在执行一个离线的大批量导入数据的MapReduce作业的时候可以获得额外的性能,但是需要注意导入的时候有可能数据丢失(强烈建议不要关闭)
  • HLog被这台机器上的所有region共享

HLogKey类

WAL使用的是 Hadoop  的 SequenceFile。这种文件格式按照 key value存储数据,HLogKey 类作为key存储了,数据的归属,region和表名,写入时间,集群ID

LogSyncer类

管道写与多路写

sync()实现的是管道写,当写入的时候修改被发送到第一个datanode,处理完成后在被发送到下一个datanode,直到3个datanode都已经确认了写操作,客户端才被允许继续进行

多路写是写入同时被发送到3台主机上,当所有主机确认了写操作之后,客户端才可以继续

区别: 管道写延迟很高,但是可以更好的利用带宽。多路写有比较低的延迟,因为客户端只需要等待最慢的Datanode确认。

延迟日志刷写

deferred log flush ,默认是false,如果为true,修改会先被缓存在region服务器中,然后服务器上有一个 logSyncer类,每隔1秒来写入一次数据(hbase.regionserver.optionallogflushinterval 设定)

LogRoller

当日志出现

2011-06-15 01:45:33,323 INFO org.apache.hadoop.hbase.region server.HLog: Too many hlogs: logs=130,maxlog=96;forcing flush of 8 region(s):.....

是因为需要保留的日志文件数超过了设置的最大日志文件数,但是仍有一些数据么有被更新。服务器会进入到一个特殊的模式来强制刷写内容中的更新数据,以减少需要保存的日志量。

其他控制日志滚动的参数有

  • hbase.regionserver.hlog.blocksize(设置为文件系统默认的块大小或者 fs.local.block.size 默认为32M)
  • hbase.regionserver.logroll.multiplier (设为0.95) 表示当日志达到块大小的95%就会滚动日志

回放

单日志

使用单日志的原因是减少磁盘寻址,提高性能,但是会为恢复带来麻烦,要先日志拆分

日志拆分

两种日志需要被回放的情况:

  • 集群启动时
  • 服务失效时

数据恢复

  • region启动的时候会先检查 recovered.edits 目录是否存在,如果存在就开始读取并恢复数据。
  • 当序列ID小于硬盘上的序列ID就会被忽略

读路径

其实Get的内部实现也是Scan

Region生命周期

region的所有可能状态

状态 描述
Offline region下线
Pending Open 打开region的请求已经发送到了服务器
Opening 服务器开始打开region
Open region已经打开,可以使用
Pending Close 关闭region的请求已经被发送到了服务端
Closing 正在关
Closed 已关
Splitting 服务器开始拆分region
Split region 已经被切分了

zookeeper

zookeeper 中存储的信息

  • /hbase/hbaseid :可以使用 get /hbase/hbaseid 查看,其他命令类似,包含clusterID
  • /hbase/master   包含服务器名
  • /hbase/replication   包含副本信息
  • /hbase/root-region-server   包含 -ROOT- region 所在region服务器的机器名,这个经常在 region 定位中使用
  • /hbase/rs   这个znode是作为所有region服务器的根节点,集群用来跟踪服务器异常,每个znode都是临时节点,并且node名是region服务器的名称
  • /hbase/shutdown  这个节点用来跟踪集群状态信息,包括集群启动的时间,以及当集群被关闭时的空状态
  • /hbase/splitlog   协调日志拆分相关的的父节点
  • /hbase/table   当表被禁用,信息会被添加到这个znode下。表名是新建的的node名,内容是 DISABLED

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-07 10:46:15

《HBase权威指南》读书笔记8:第八章 架构的相关文章

HBase权威指南读书笔记(一)

第一章HBase简介 1.  HBase即hadoop数据库,HBase是一个分布式的.持久的.强一致性的存储系统,具有近似最优的写性能和出色的读性能. 2.  HBase并不是一个列式存储的数据库,但它利用了磁盘上的列式存储格式.传统的列式存储数据库适合实时存取数据的场景,HBase适合键值对的数据存储,或者有序的数据存储. 3.  一行由若干列组成,若干列又构成了一个列族(column family).列族数量只限于几十,实际上更少.而列的数量没有限制,一个列族里面可以有数百万个列,列值也没

Hadoop权威指南读书笔记

本书中提到的Hadoop项目简述 Common:一组分布式文件系统和通用I/O的组件与接口(序列化.javaRPC和持久化数据结构). Avro:一种支持高效.跨语言的RPC以及永久存储数据的序列化系统. MapReduce:分布式数据处理模型和执行环境,运行于大型商业集群. HDFS:分布式文件系统,运行于大型商用机集群. Pig:一种数据流语言和运行环境,用以检索非常大的数据集.Pig运行在MapReduce和HDFS的集群上. Hive:一个分布式.按列存储的数据仓库.Hive管理HDFS

IDA.Pro权威指南 读书笔记

http://www.pediy.com/kssd/pediy12/142766.html 标 题:IDA.Pro权威指南 读书笔记[Made By C_lemon] 作 者:Dstlemoner 时 间:2011-11-14 11:56:17 链 接:http://bbs.pediy.com/showthread.php?t=142766    IDA为反汇编 和逆向破解的 静态分析利器 ! 虽然是利器,但是你不会用的话~那就另当别论了. →     唉.对于刚入门的新手来说,看前人走过的路程

Android编程权威指南-读书笔记(二)-第一个小程序

Android编程权威指南-读书笔记(二) -第一个小程序 第一个例子介绍 应用名为GeoQuiz.用户通过单击True或False按钮来回答屏幕上的问题,GeoQuiz可即时反馈答案正确与否. 这个例子为我们简单介绍了几个基本组件的使用,以及基本的事件监听.让我们对基本组件的使用和事件的监听有一个基本的了解. 这篇文章分为2个部分,第一部分就是创建简单的UI.第二个部分就是对这个UI增加代码来响应一些操作. (注:所有不明白或者不理解的东西其实都不重要,后面都会有更详细的介绍.) 本章的目标

css权威指南 读书笔记

网上看见推荐的书总是喜欢买回家,但是大多数时候都不会立即就看,都是在书橱里蒙上了一层灰尘.从毕业到现在,由于公司业务原因,写js多余css,所以就想系统地看看css,并且做一些练习,于是就开始看<css权威指南>,看到了第六章,初步感觉,对于工作一年的我来说,很简单,当然也有一些我不熟悉的知识点,于是整理了下来. 一.@import 1.放在style容器中,且在其他css规则之前 2.每个人@import指令的样式都会加载使用 二.选择器 1.:first-letter 用于选取指定选择器的

JS权威指南读书笔记(七)

第十七章 事件处理 1 客户端JS程序采用了异步事件驱动编程模型. 2 关于事件的重要定义 a 事件类型(event type) b 事件目标(event target) target === srcElement(IE8及之前版本) c 事件处理程序(event handler ) 当对象上注册的事件处理程序被调用时,可以说浏览器触发(fire trigger)和派发(dispatch)了事件: d 事件对象(event object) e 事件传播(event propagation)两种形

hbase权威指南学习笔记--架构--存储

HBase主要处理两种文件:预写日志(Write-Ahead Log,WAL),实际的数据文件. 一个基本的流程是客户端首先联系ZooKeeper子集群查找行健数据所在的region服务器名.(通过ZooKeeper获取含有-ROOT-的region服务器名[主机名]来完成,通过含有-ROOT-的region服务器可以查询含有.META.表中对应的region服务器名,其中含有行健信息.这两处的主要内容都被缓存下来,并且都只查询一次.最终通过查询.META.服务器来获取客户端查询的行健数据所在r

JS权威指南读书笔记(三)

第七章 数组 1 数组的实现是经过优化的,用数字索引来访问数组元素一般来说比访问常规的对象属性要快的多. 2 数组直接量的语法允许有可选的结尾的逗号,故[ ; ; ]只有两个元素而非三个. 3 调用构造函数创建数组 a 调用时没有参数 => 空数组 b 调用时有一个数值参数 => 指定长度的数组 c 显式指定两个或多个数组元素或一个非数值元素 => 参数成为新数组的元素 4 稀疏数组:包含从0开始的不连续索引(即 '索引值' in '数组' 运算返回 false)的数组.可以用Array

JavaScript权威指南读书笔记【第一章】

第一章 JavaScript概述 前端三大技能: HTML: 描述网页内容 CSS: 描述网页样式 JavaScript: 描述网页行为 特点:动态.弱类型.适合面向对象和函数式编程的风格 语法源自Java 一等函数来自Scheme 基于原型的继承来自于Self 名字和版本: JavaScript是由网景(Netscape)公司创建,“JavaScript”是Sun MicroSystem公司的注册商标,用来特指网景(Mozilla)对着门的实现. ECMAScript: 网景将这么语言作为标准