(一)HBase基础
一、介绍

官网

1、基本概念

​ hbase是bigtable的开源java版本,是建立在hdfs之上。提供高可靠性、高性能、列存储、可伸缩、实时读写nosql 的数据库系统。它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通
过hive支持来实现多表join等复杂操作)。主要用来存储结构化和半结构化的松散数据。Hbase查询数据功能很简单,不支持join等复杂操作,不支持复杂的事务(行级的事务),Hbase中支持的数据类型:byte[]与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

2、特点
大:一个表可以有上十亿行,上百万列
面向列:面向列(族)的存储和权限控制,列(族)独立检索。
稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

二、Hbase表结构
Row Key Time Stamp ColumnFamily contents ColumnFamily anchor ColumnFamily people
“com.cnn.www” t9 anchor:cnnsi.com = “CNN”
“com.cnn.www” t8 anchor:my.look.ca = “CNN.com”
“com.cnn.www” t6 contents:html = “…”
“com.cnn.www” t5 contents:html = “…”
“com.cnn.www” t3 contents:html = “…”
“com.example.www” t5 contents:html = “…” people:author = “John Doe”

命名空间(Name Space):类似于关系型数据库的 DatabBase 概念,每个命名空间下有多个表。HBase有两个自带的命名空间,分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表,default 表是用户默认使用的命名空间。

表(table):用于存储管理数据,具有稀疏的、面向列的特点。HBase中的每一张表,就是所谓的大表
(Bigtable),可以有上亿行,上百万列。对于为值为空的列,并不占用存储空间,因此表可以设计的非常稀
疏。
行键(RowKey):类似于MySQL中的主键,HBase根据行键来快速检索数据,一个行键对应一条记录。与
MySQL主键不同的是,HBase的行键是天然固有的,每一行数据都存在行键。
列族(ColumnFamily):是列的集合。列族在表定义时需要指定,而列在插入数据时动态指定。列中的数据都
是以二进制形式存在,没有数据类型。在物理存储结构上,每个表中的每个列族单独以一个文件存储(参见图
1.2)。
时间戳(TimeStamp):是列的一个属性,是一个64位整数。由行键和列确定的单元格,可以存储多个数据,
每个数据含有时间戳属性,数据具有版本特性。可根据版本(VERSIONS)或时间戳来指定查询历史版本数据,
如果都不指定,则默认返回最新版本的数据。
区域(Region):HBase自动把表水平划分成的多个区域,划分的区域随着数据的增大而增多。

Cell由{rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元。cell 中的数
据是没有类型的,全部是字节码形式存贮。

三、架构

架构图

1、Client
①使用HBase RPC机制与HMaster和HRegionServer进行通信;
②Client与HMaster进行通信进行管理类操作;
③Client与HRegionServer进行数据读写类操作。
2、Zookeeper
①保证任何时候,集群中只有一个running master,避免单点问题;
②存贮所有Region的寻址入口,包括-ROOT-表地址、HMaster地址;
③实时监控Region Server的状态,将Region server的上线和下线信息,实时通知给Master;
④存储Hbase的schema,包括有哪些table,每个table有哪些column family。
3、HMaster
可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。角色功能
①为Region server分配region;
②负责region server的负载均衡;
③发现失效的region serve并重新分配其上的region;
④GFS上的垃圾文件回收;
⑤处理用户对标的增删改查操作。
4、HRegionServer
HBase中最核心的模块,主要负责响应用户I/O请求,向HDFS文件系统中读写数据。
作用:
①维护Master分配给它的region,处理对这些region的IO请求;
②负责切分在运行过程中变得过大的region。
此外,HRegionServer管理一些列HRegion对象,每个HRegion对应Table中一个Region,HRegion由多个 HStore组 成,每个HStore对应Table中一个Column Family的存储,Column Family就是一个集中的存储单元,故将具有相同IO特性的Column放在一个Column Family会更高效。
5、HStore
HBase存储的核心,由MemStore和StoreFile组成。用户写入数据的流程为:client写入 -> 存入MemStore,一直到MemStore满 -> Flush成一个StoreFile,直至增长到一定阈值 -> 触发Compact合并操作 -> 多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除 -> 当StoreFiles Compact后,逐步形成越来越大的StoreFile -> 单个StoreFile大小超过一定阈值后,触发Split操作,把当前Region Split成2个Region,Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上,如图所示。

6、HRegion
一个表最开始存储的时候,是一个region。
一个Region中会有个多个store,每个store用来存储一个列簇。如果只有一个column family,就只有一个store。
region会随着插入的数据越来越多,会进行拆分。默认大小是10G一个。
7、HLog
在分布式系统环境中,无法避免系统出错或者宕机,一旦HRegionServer意外退出,MemStore中的内存数据就会
丢失,引入HLog就是防止这种情况。
工作机制:每个HRegionServer中都会有一个HLog对象,HLog是一个实现Write Ahead Log的类,每次用户操作写入Memstore的同时,也会写一份数据到HLog文件,HLog文件定期会滚动出新,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知,HMaster首先处理遗留的HLog文件,将不同region的log数据拆分,分别放到相应region目录下,然后再将失效的region重新分配,领取到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。

四、读写流程

1、写流程

1)Client 先访问 zookeeper,获取 hbase:meta 表位于哪个 Region Server。
2)访问对应的 Region Server,获取 hbase:meta 表,根据读请求的 namespace:table/rowkey,查询出目标数据位于哪个 Region Server 中的哪个 Region 中。并将该 table 的 region 信息以及 meta 表的位置信息缓存在客户端metacache方便下次访问。
3)与目标 Region Server 进行通讯;
4)将数据顺序写入(追加)到 WAL;
5)将数据写入对应的 MemStore,数据会在 MemStore 进行排序;
6)向客户端发送 ack;
7)等达到 MemStore 的刷写时机后,将数据刷写到 HFile。

2、读流程

1)Client 先访问 zookeeper,获取 hbase:meta 表位于哪个 Region Server。
2)访问对应的 Region Server,获取 hbase:meta 表,根据读请求的 namespace:table/rowkey,
查询出目标数据位于哪个 Region Server 中的哪个 Region 中。并将该 table 的 region 信息以
及 meta 表的位置信息缓存在客户端的 meta cache,方便下次访问。
3)与目标 Region Server 进行通讯;
4)分别在 Block Cache(读缓存),MemStore 和 Store File(HFile)中查询目标数据,并将
查到的所有数据进行合并。此处所有数据是指同一条数据的不同版本(time stamp)或者不
同的类型(Put/Delete)。
5) 将从文件中查询到的数据块(Block,HFile 数据存储单元,默认大小为 64KB)缓存到
Block Cache。
6)将合并后的最终结果返回给客户端。

3、 MemStore Flush

MemStore 刷写时机:
当某个 memstroe 的大小达到了 hbase.hregion.memstore.flush.size (默认值 128M ),
其所在 region 的所有 memstore 都会刷写。当 memstore 的大小达到了

hbase.hregion.memstore.flush.size (默认值 128M )

hbase.hregion.memstore.block.multiplier (默认值 4 )时,会阻止继续往该 memstore 写数据。

当 region server 中 memstore 的总大小达到
java_heapsize*hbase.regionserver.global.memstore.size (默认值 0.4 )
hbase.regionserver.global.memstore.size.lower.limit (默认值 0.95 ),
region 会按照其所有 memstore 的大小顺序(由大到小)依次进行刷写。直到 region server中所有 memstore 的总大小减小到上述值以下。当 region server 中 memstore 的总大小达到
java_heapsize
hbase.regionserver.global.memstore.size (默认值 0.4 )
时,会阻止继续往所有的 memstore 写数据。

到达自动刷写的时间,也会触发 memstore flush。自动刷新的时间间隔由该属性进行
配置 hbase.regionserver.optionalcacheflushinterval (默认 1 小时)。
当 WAL 文件的数量超过 hbase.regionserver.max.logs,region 会按照时间顺序依次进
行刷写,直到 WAL 文件数量减小到 hbase.regionserver.max.log 以下(该属性名已经废弃,
现无需手动设置,最大值为 32)。

4、StoreFile Compaction
由于memstore每次刷写都会生成一个新的HFile,且同一个字段的不同版本(timestamp)和不同类型(Put/Delete)有可能会分布在不同的HFile中,因此查询时需要遍历所有的HFile。为了减少 HFile 的个数,以及清理掉过期和删除的数据,会进行 StoreFile Compaction。Compaction 分为两种,分别是 Minor Compaction 和 Major Compaction。Minor Compaction会将临近的若干个较小的 HFile 合并成一个较大的 HFile,但 不会清理过期和删除的数据。Major Compaction 会将一个 Store 下的所有的 HFile 合并成一个大 HFile,并且 会清理掉过期和删除的数据。

5、Region Split
默认情况下,每个 Table 起初只有一个 Region,随着数据的不断写入,Region 会自动进
行拆分。刚拆分时,两个子 Region 都位于当前的 Region Server,但处于负载均衡的考虑,
HMaster 有可能会将某个 Region 转移给其他的 Region Server。
Region Split 时机:
当1个region中的某个Store下所有StoreFile的总大小超过hbase.hregion.max.filesize,
该 Region 就会进行拆分(0.94 版本之前)。

​ 当 1 个 region 中 的某 个 Store 下所有 StoreFile 的总 大 小超过 Min(R^2 *
“hbase.hregion.memstore.flush.size”,hbase.hregion.max.filesize"),该 Region 就会进行拆分,其
中 R 为当前 Region Server 中属于该 Table 的个数(0.94 版本之后)。

当1个region中的某个Store下所有StoreFile的总大小超过" hbase.hregion.max.filesize " ,该region就会进行
拆分(0.94版之前)
当1个region中的某个Store下所有StoreFile的总大小超过Min(R^2 * “hbase.hregion.memstore.flush.size”,
" hbase.hregion.max.filesize ") 就会拆分,其中R为当前RegionServer中属于该table的region个数(0.94版之后)

(一)HBase基础相关推荐

  1. Hbase基础(特点、架构、应用场景、集群搭建、HA设计)这一篇就够了

    Hbase基础(特点.架构.应用场景.集群搭建.HA设计)这一篇就够了 1. Hbase特点 2. Hbase VS RDBMS 3. Hbase架构及版本选择 4. Hbase应用场景 5. Ntp ...

  2. Hbase基础介绍-2 数据模型

    Hbase基础介绍-2 数据模型 二.Hbase数据模型(数据格式:列族:列修饰符:值) 1.结构 (1)NameSpace: (2)表(table): (3)行(Row): (4)列(Column) ...

  3. [Hadoop in China 2011] Facebook Message在HBase基础上的应用

    http://tech.it168.com/a2011/1203/1283/000001283206.shtml 在今天下午进行的NoSQL系统及应用分论坛中,来自Facebook的技术经理Guoqi ...

  4. HBase—基础介绍

    原文作者:Java3 原文地址:我终于看懂了HBase,太不容易了... 目录 摘要: 前言 一.介绍HBase 二.为什么要用HBase 三.入门HBase 3.1 HBase的数据模型 3.2 H ...

  5. 你应该知道的 HBase 基础,都在这儿了

    阿里妹导读:2006 年10 月Google 发布三架马车之一的<Bigtable:A Distributed Storage System for Strctured Data>论文之后 ...

  6. Hbase系列-2、Hbase基础

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 大数据系列文章目录 Hbase的官网 目录 Hbase的基本简介 Hbase的基本介绍 Hba ...

  7. Hbase基础原理及应用(中篇)

    HBase(中) 12.HBase与MapReduce的集成 HBase当中的数据最终都是存储在HDFS上面的,HBase天生的支持MR的操作,我们可以通过MR直接处理HBase当中的数据,并且MR可 ...

  8. HBase基础入门|原理

    HBase是一个面向海量数据场景,分布式的.多版本.面向列的开源KV数据库.运行在HDFS的基础上,支持PB级别.百万列的数据存储. 基本概念 Region 数据的集合,HBase中的一个表拥有1到多 ...

  9. hbase基础命令学习

    文章目录 HBASE 入门 写在前面 一.安装与启动 二.基本命令 环境信息和权限分配 表的创建和删除以及查看 行的增删改查 列簇的增删改 查询 高级查询 结语 感谢 HBASE 入门 写在前面 大数 ...

最新文章

  1. 【DIY】arduino播放音乐方案——TMRpcm
  2. 【计算摄影】计算机如何学会欣赏照片的美感?
  3. React应用渲染界面的入口
  4. pytorch: 在训练中保存模型,加载模型
  5. 理解JS中的声明式与命令式
  6. html5新增标记元素的内容类型,HTML5新标签与javaScript新方法
  7. jmeter压测、操作数据库、分布式、 linux下运行的简单介绍
  8. oracle数据库卡住了无法保存,Oracle数据库使用NFS存储,启动报错提示无法锁定文件...
  9. [2019杭电多校第四场][hdu6623]Minimal Power of Prime
  10. HoloLens开发手记 - Unity之语音输入
  11. 开发错误记录5-Failed to sync Gradle project ‘HideTitleDemo’
  12. 僵化封闭的苹果:鼠标不支持右键,键盘没有DEL键
  13. 详解 ZooKeeper 数据持久化
  14. 资料汇总更新|FPGA软件安装包、书籍、源码、技术文档…(2021.01.04更新)
  15. F28335课后习题记录
  16. 坚果云和微云哪个好?谈谈我的使用感受
  17. ARP协议和NDP协议分析
  18. 计算机组成原理静态存储器实验报告,静态随机存储器实验报告计算机组成原理...
  19. greenplum 添加mirror
  20. MySQL - 建库、建表、查询

热门文章

  1. mapreduce作业提交源码解读(创建不同模式下的runner、在工作区间生成切片规划文件和配置文件后提交)
  2. 第09章 Go语言并发,Golang并发
  3. CrashRpt使用
  4. 【HNOI2014】世界树
  5. 关于cv2.dnn.readNetFromONNX(path)就报ERROR during processing node with 3 inputs and 1 outputs的解决过程【独家发布】
  6. 启英泰伦推出基于三代AIoT芯片的离在线语音识别方案
  7. iOS修改UIImage图片尺寸大小逻辑分辨率
  8. 云服务器 ECS 建站教程:快速搭建 ThinkPHP 框架
  9. Observability:应用程序性能监控/管理(APM)实践
  10. 坑货:toFixed()