一、HBase简介

1、Apache HBase™是Hadoop数据库,是一个分布式,可扩展的大数据存储。

2、当您需要对大数据进行随机,实时读/写访问时,请使用Apache HBase™。 该项目的目标是托管非常大的表( 数十亿的行*百万的列 ) 在商品硬件集群上。 Apache HBase是一个开源的,分布式的,版本化的非关系数据库

3、利用Hadoop HDS 作为其文件存储系统,利用Hadoop MapReduce来处理HBASE中的海量数据,利用ZOOKEEPER作为其分布式协同服务

4、主要用来存储非结构化和半结构化的松散数据

二、HBASE数据模型

1、Rowkey

rowkey类似于关系型数据库的主键,是一行记录的唯一标识。

rowkey是按照字典序自动排序的

rowkey只能存储64K的字节数据

2、Column Family列族 (CF)

HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。如 create ‘test’, ‘course’;

列名以列族作为前缀,每个“列族”都可以有多个列成员(column);如course:math, course:english, 新的列族成员(列)可以随后按需、动态加入;

权限控制、存储以及调优都是在列族层面进行的;

HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。

3、Timestamp时间戳

在HBase一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。

时间戳的类型是64位整形

时间戳可以在数据写入时由HBase自动赋值也可以人员手动指定

4、cell单元格

cell单元格是由行和列的交叉坐标决定的

cell单元格是由版本的

cell单元格中的内容: 由{row keycolumn( =<family> +<qualifier>)version} 唯一确定的单元

cell中存储的数据是没有类型的,全部由字节数组组成,也就是说HBASE中的数据是没有类型的,全都是字节数组

三、HBase的预写日志(WAL)

因为HBase是实时读写的数据库,所以我们在操作数据的时候,会把数据先放在内存中,当内存中的数据达到一定量的时候才会落盘。但数据放在内存中是有一定的风险的,比如掉电之后,内存中的数据就会丢失。为了防止这种情况,HBase中加入了WAL(write ahead log)预写日志机制,每个数据的写入操作(PUT/DELETE)执行前,必须先通过WAL记账。先将数据写入Hlog文件,如果写入失败,则写入操作失败。Hlog位于RegionServer中,每个RegionServer维护一个Hlog。

WAL的作用是灾难恢复,一旦服务器崩溃,或者数据被误删,则通过log日志重放,可以恢复事故数据。

WAL如此重要,所以默认是开启的

四。HBase架构

HBase架构的角色:

1、client

包含HBase的接口并维护cache来加快对hbase的访问

2、zookeeper

保证任何时候,集群中只有一个活跃的HMaster

存储所有的Region的寻址入口

实时监控所有HRegionServer的上下线消息,并通知HMaster

3、HMaster

HMaster是没有单点故障的,因为集群中可以有多个HMaster,但是通过zookeeper的分布式协同服务保障有且只有一个活跃的HMaster对外提供服务。

HMaster负责为RegionServer分配region。

负责RegionServer的负载均衡。

发现失效的RegionServer并重新分配其上的region。

管理用户对table的增删改操作。

4、HRegionServer

RegionServer维护Region,处理对这些Region的I/O请求。

RegionServer负责切分在运行过程中逐渐变得过大的region。

HRegionServer中的组件

1、region

HBase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据。也就是说一个大表被切成很多小份,每个小份是一个region。

每个表一开始只有一个region,随着数据的不断插入,region不断增大。当region增大到某个阈值的时候,region就会等分为两个新的region(裂变)。

当table中的行不断增多,就会有越来越多的region。这样,一张完整的表就被 保存在多个RegionServer上。

region是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的region可以分布在不同的HRegionServer上。

2、store

一个region有多个store组成,每个store对应一个CF(列族)。

store中包含位于内存中的memstore和位于磁盘的storefile。

3、memstore与storefile

每当进行写操作时,写操作会先进入memstore,当memstore中的数据到达某个阈值,HRegionServer会启动flashcache进程将数据写到storefile,每次写入形成一个单独的storefile。

当storefile文件数量达到一定阈值后,系统会进行合并,在合并过程中会进行版本合并和删除工作,形成各大的storefile。

当一个region所有的storefile的大小和数量达到一定的阈值后,会把当前的region分割为两个,并有HMaster分配到不同的RegionServer服务器,实现负载均衡。

storefile以Hfile的格式存储在HDFS上。

客户端检索数据,先到memstore中找,找不到再到blockcache,再找不到去storefile

五、HBase的读写流程(0.98以后版本)

写请求

客户端在进行写请求的时候。首先会访问zookeeper,因为zookeeper中存储着HBase元数据(meta)所在节点的信息(HBase的元数据在某个RegionServer中存储,但是存储元数据的RegionServer的信息保存在zookeeper中)。客户端拿到元数据所在节点后访问相应节点的RegionServer拿到元数据。最后根据元数据找到要操作的region。但是,找到region后不是先往memstore中写。而是要先写入WAL(预写日志)的hlog中(写入hlog成功后,会有一个异步侧线程sync(),这个线程会实时检测hlog中有没有数据,如果有,直接落盘),只有往hlog中写入成功了,才能接着往memstore中写。

当memstore中的数据到达某个阈值,HRegionServer会启动flashcache进程将数据写到storefile,每次写入形成一个单独的storefile。

当storefile文件数量达到一定阈值后,系统会进行合并,在合并的时候会对数据排序,同时在合并过程中会进行版本合并和删除工作,形成各大的storefile。

合并的方式有两种,分别是minor和major。minor默认是3~10个storefile进行合并。major则是将当前目录下的所有的storefile合并。注意:在文件合并的时候是不提供服务的。

因为minor是3~10个文件进行合并,所以占用资源少,速度快。所以我们一般使用minor。而major因为熟读慢,所以我们一般不用,用也是手动进行。

当一个region所有的storefile的大小和数量达到一定的阈值后,会把当前的region分割为两个,并有HMaster分配到不同的RegionServer服务器,实现负载均衡。

读请求

客户端在进行读请求的时候。寻找region的过程几乎与写请求相同。首先在zookeeper中找元数据在哪个RegionServer中存储,然后找到RegionServer拿到元数据,然后根据元数据找相应的region。

在region中寻找数据的过程如下:首先,会在region的memstore中寻找,如果被查找的记录是刚刚通过写请求写入的,还没被写入storefile,那么查找成功。如果没有找到,则到blockcache(读缓存)中找,找到返回。找不到会继续深入到storefile中查找,注意:如果是在storefile中找到的,并不会立即返回,而是要先将数据写入blockcache中(方便下次查找),写入成功后返回数据。

但是,这样存在一个问题,那就是随着读请求的增多,blockcache会不断变大。为了防止这种情况,系统采用最近最少使用算法(LRU)来维护blockcache。

blockcache位于RegionServer中,一个RegionServer维护一个blockcache。

hbase hmaster一会就没了_浅析HBase相关推荐

  1. hbase major_compact 文件会变小吗_图解式学习:可能是最易懂的Hbase架构原理解析(二)...

    数据修改 小史:不过吕老师,我还有问题啊,我记得 HDFS 是不能随机修改文件的,只能追加,那么 HBase 里的数据是不是写了之后就不能改也不能删除呢? 吕老师:删除同样是追加一条版本最新的记录,只 ...

  2. HBase: HMaster服务自动停止,且关闭集群时HRegionserver无法关闭的问题解决

    先说废话,这是半个多月之前遇到的问题了,趁历史记录还找得到赶快记一下 背景:三台阿里云Ubuntu服务器,Hadoop(2.6.5)完全分布式搭建,Zookeeper(3.4.10),HBase(1. ...

  3. HBase hmaster无法正常启动,日志报错Operation category READ is not supported in state standby.hdfs ha hbase配置修改

    E2:HBase hmaster无法正常启动,日志报错Operation category READ is not supported in state standby. hdfs配置了ha,hbas ...

  4. 计算机语言输入不见了,win7右下角的输入法图标不见_右下角的输入法没了_右下角的语言栏不见了的解决方法...

    最近有很多同事说在工作中有时候电脑用着用着右下角的输入法图标却没有了,让人觉得很不习惯.对于这种情况要怎么把右下角的语言栏调出来呢?一般是重新启动一下电脑,但是大部分电脑重启了还是一样没有显示右下角的 ...

  5. hbase 查询_云HBase发布全文索引服务,轻松应对复杂查询

    云HBase发布了"全文索引服务"功能,自2019年01月25日后创建的云HBase实例,可以在控制台免费开启此"全文索引服务"功能.使用此功能可以让用户在HB ...

  6. 如何保证 HBase 服务的高可用?看看这份 HBase 可用性分析与高可用实践吧!

    来源 | 阿丸笔记 责编 | Carol 头图 | CSDN 下载自视觉中国 HBase作为一个分布式存储的数据库,它是如何保证可用性的呢?对于分布式系统的CAP问题,它是如何权衡的呢? 最重要的是, ...

  7. Hbase报错解决方法ERROR: KeeperErrorCode = NoNode for /hbase/master

    步骤 今天搭建Hbase环境,遇到了此bug.一开始搭建hdfs的时候还是很顺利的,参考着别人的博客,一步一的做下去,最后可以正常启动.而在搭建HBase的时候遇到了一个很大的bug.但是造成该bug ...

  8. HBase因hostname可能引起的RIT问题。HBASE的ip和hostname坑

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 HBase的RegionServer会将自己的hostname上报到zookeeper,客户端连接zookeeper时,获取的是regionserve ...

  9. 【HBase从入门到精通系列】如何避免HBase写入过快引起的各种问题

    摘要: 首先我们简单回顾下整个写入流程 client api ==> RPC ==> server IPC ==> RPC queue ==> RPC handler ==&g ...

最新文章

  1. 【Android必备】与其他碎片进行通信(10)
  2. Python进程学习笔记-进程创建fork
  3. Springmvc的helloworld实例
  4. 基于FPGA的直流电机PWM控制+毕业论文
  5. Vue学习笔记(二)—— vue项目中使用axios
  6. 微信小程序与AspNetCore SignalR聊天实例
  7. ubuntu 报错E: Unable To Locate Package Software-properties-common
  8. 陕西卫视《关中男人》观后感--女人之后是男人?
  9. 项目微管理24 - 横向
  10. python和java哪个好学-到底学python好还是学java比较好 哪个容易学习点
  11. 计算机学拼音打字,拼音打字练习
  12. LC串联和并联电路汇总
  13. 修改gitlab 去掉双重认证 Two-Factor Authentication
  14. 数据拟合之Excel篇
  15. node处理图片和PDF文件方法
  16. 世界黑客编程大赛第一名的作品
  17. android 自定义心电图,Android动态滚动波形图(心电图)的实现
  18. CPU处理器Intel Xeon Skylake 6148(2.4 GHz)性能评测
  19. 电脑显示器屏幕看不清灰色,灰色部分都几乎呈现白色状态的解决办法。
  20. 挑战程序设计竞赛:反转法

热门文章

  1. yarn下载依赖慢的解决方法
  2. Node — 第五天
  3. HTTP协议详解(转载)
  4. 第5章 IDA Pro
  5. 汇编 if else
  6. 基本java,jquery异步 的级联下拉列表
  7. win8下vs2012加wp8 sdk开发xna4.0PC游戏
  8. 输入三个数,按照由大到小的顺序输出
  9. 小程序 --- 项目小练手Ⅰ
  10. 算法 --- [队列结构]二叉树的层次遍历