Hbase简介

1、HBase概述

HBase是建立在HDFS之上的分布式面向列的数据库
HBase是一个数据模型,可以提供快速随机访问海量结构化数据,利用Hadoop HDFS作为其文件存储系统,
利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为对应。
在这里插入图片描述

2、 Hbase存储结构

先做一个简单的总结:最基本的单位是列(column),一列或者多列组成一行(row),并且由唯一的行键(row key)来确定存储。一个表中有很多行,每一列可能有多个版本,在每一个单元格(Cell)中存储了不同的值。

HBase的行与行之间是有序的,按照row key的字典序进行排序,行键是唯一的,在一个表里只出现一次,否则就是在更新同一行,行键可以是任意的字节数组。一行由若干列组成,其中的某些列又可以构成一个列族(column family),一个列族的所有列存储在同一个底层的存储文件里,这个文件称之为HFile。

列族需要在创建表的时候就定义好,数量也不宜过多。列族名必须由可打印字符组成,创建表的时候不需要定义好列。对列的引用格式通常为family:qualifier,qualifier也可以是任意的字节数组。同一个列族里qualifier的名称应该唯一,否则就是在更新同一列,列的数量没有限制,可以有数百万个。列值也没有类型和长度限定。HBase会对row key的长度做检查,默认应该小于65536。
在这里插入图片描述
Timestamp代表时间戳,默认由系统指定,用户也可以显示设置。使用不同的时间戳来区分不同的版本。一个单元格的不同版本的值按照时间戳降序排列在一起,在读取的时候优先取最新的值。用户可以指定每个值能保存的最大版本数,HBase-0.96版本默认的最大版本数为1。

HBase的存取模式如下(表,行键,列族,列,时间戳)-> 值。即一个表中的某一行键的某一列族的某一列的某一个版本的值唯一。

行数据的存取操作是原子的,可以读取任意数目的列。目前还不支持跨行事务和跨表事务。

同一列族下的数据压缩在一起,访问控制磁盘和内存都在列族层面进行。

3、Hbase与Hadoop关系

Hbase(Hadoop Database),本质上来说就是Hadoop系统的数据库,提供存储服务,是面向列的分布式数据库。
这一点与HDFS(Hadoop Distributed File System)是不一样的,HDFS管理的是存放在多个硬盘上的数据文件,
而Hbase管理的是类似于key—value映射的表。

4、HBase的特点

HBase线性可扩展。它具有自动故障支持。它提供了一致的读取和写入。它集成了Hadoop,作为源和目的地。它提供了跨集群数据复制。

5、Hbase架构图

Hbase的体系结构是一个主从式的结构,主节点Hmaster在整个集群当中只有一个在运行,从节点HRegionServer有很多个在运行,主节点Hmaster与从节点HRegionServer实际上指的是不同的物理机器,即有一个机器上面跑的进程是Hmaster,很多机器上面跑的进程是HRegionServer,Hmaster没有单点问题,Hbase集群当中可以启动多个Hmaster,但是通过zookeeper的事件处理机制保证整个集群当中只有一个Hmaster在运行。

在这里插入图片描述

Hbase中的每张表都按照被分割成多个子表(HRegion),默认HRegion超过256M就要被分割成两个,由HRegionServer管理,管理哪些HRegion由HMaster分配,具体分配则由HMASTER决定

HBase组件以及它们起到的作用:

Client:包含访问HBase的接口,并维护cache来加快对HBase的访问。

HMaster
管理用户对Table的增、删、改、查操作;
管理HRegionServer的负载均衡,调整Region分布;
在Region Split后,负责新Region的分配;
在HRegionServer停机后,负责失效HRegionServer上的Regions迁移。

Zookeeper:Master与RegionServers启动时会向Zookeeper注册,保证任何时候,集群中只有一个master,存储所有Region的寻址入口,实时监控Region server的上线和下线信息。并实时通知给master,存储HBase的schema和table元数据

HRegionServer:维护master分配给他的region,处理对这些region的io请求;切分正在运行过程中变的过大的region。

HRegion:在行的方向上分隔为多个Region,Region是HBase中分布式存储和负载均衡的最小单元不同的region可以分别在不同的Region Server上,但同一个Region是不会拆分到多个server上。

Store:每一个Region由一个或多个Store组成,至少是一个Store,HBase会把一起访问的数据放在一个Store里面一个Store由一个memStore和0或者多个StoreFile组成,

StoreFile:memStore内存中的数据写到文件后就是StoreFile,以HFile的格式保存。

HLog:HLog记录数据的所有变更,可以用来恢复文件

6、hbase 实时性的原理

答:实时查询,可以认为是从内存中查询,一般响应时间在 1 秒内。 HBase 的机制是数据先写入到内存中,当数据量达到一定的量(如 128M),再写入磁盘中, 在内存中,是不进行数据的更新或合并操作的,只增加数据,这使得用户的写操作只要进入内存中就可以立即返回,保证了 HBase I/O 的高性能。

7、Hbase 内部是什么机制

在 HBase 中无论是增加新行还是修改已有行,其内部流程都是相同的。 HBase 接到命令后存下变化信息,或者写入失败抛出异常。默认情况下,执行写入时会写到两个地方:预写式日志(write-ahead log,也称 HLog)和 MemStore。 HBase 的默认方式是把写入动作记录在这两个地方,以保证数据持久化。只有当这两个地方的变化信息都写入并确认后,才认为写动作完成。

MemStore 是内存里的写入缓冲区, HBase 中数据在永久写入硬盘之前在这里累积。当MemStore 填满后,其中的数据会刷写到硬盘,生成一个 HFile。 HFile 是 HBase 使用的底层存储格式。 HFile 对应于列族,一个列族可以有多个 HFile,但一个 HFile 不能存储多个列族的数据。在集群的每个节点上,每个列族有一个 MemStore。

大型分布式系统中硬件故障很常见, HBase 也不例外。设想一下,如果 MemStore 还没有刷写,服务器就崩溃了,内存中没有写入硬盘的数据就会丢失。 HBase 的应对办法是在写动作完成之前先写入 WAL。 HBase 集群中每台服务器维护一个 WAL 来记录发生的变化。WAL 是底层文件系统上的一个文件。直到 WAL 新记录成功写入后,写动作才被认为成功完成。这可以保证 HBase 和支撑它的文件系统满足持久性。大多数情况下, HBase 使用Hadoop 分布式文件系统(HDFS)来作为底层文件系统。如果 HBase 服务器宕机,没有从 MemStore 里刷写到 HFile 的数据将可以通过回放WAL 来恢复。你不需要手工执行。 Hbase 的内部机制中有恢复流程部分来处理。每台HBase 服务器有一个 WAL,这台服务器上的所有表(和它们的列族)共享这个 WAL。

8、HBase 宕机如何处理

宕机分为 HMaster 宕机和 HRegisoner 宕机

如果是 HRegisoner 宕机, HMaster 会将其所管理的 region 重新分布到其他活动的 RegionServer 上,由于数据和日志都持久在 HDFS中,该操作不会导致数据丢失。所以数据的一致性和安全性是有保障的。

如果是 HMaster 宕机, HMaster 没有单点问题, HBase 中可以启动多个 HMaster,通过Zookeeper 的 Master Election 机制保证总有一个 Master 运行。即 ZooKeeper 会保证总会有一个 HMaster 在对外提供服务。

Hbase读写流程

写操作流程

(1) Client通过Zookeeper的调度,向RegionServer发出写数据请求,在Region中写数据。
(2) 数据被写入Region的MemStore,直到MemStore达到预设阈值。
(3) MemStore中的数据被Flush成一个StoreFile。
(4) 随着StoreFile文件的不断增多,当其数量增长到一定阈值后,触发Compact合并操作,将多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除。
(5) StoreFiles通过不断的Compact合并操作,逐步形成越来越大的StoreFile。
(6) 单个StoreFile大小超过一定阈值后,触发Split操作,把当前Region Split成2个新的Region。父Region会下线,新Split出的2个子Region会被HMaster分配到相应的RegionServer上,使得原先1个Region的压力得以分流到2个Region上。
可以看出HBase只有增添数据,所有的更新和删除操作都是在后续的Compact历程中举行的,使得用户的写操作只要进入内存就可以立刻返回,实现了HBase I/O的高性能。

读操作流程

(1) Client访问Zookeeper,查找-ROOT-表,获取.META.表信息。
(2) 从.META.表查找,获取存放目标数据的Region信息,从而找到对应的RegionServer。
(3) 通过RegionServer获取需要查找的数据。
(4) Regionserver的内存分为MemStore和BlockCache两部分,MemStore主要用于写数据,BlockCache主要用于读数据。读请求先到MemStore中查数据,查不到就到BlockCache中查,再查不到就会到StoreFile上读,并把读的结果放入BlockCache。
寻址过程:client–>Zookeeper–>-ROOT-表–>META表–>RegionServer–>Region–>client

9、Zookeeper中 -root表和meta表
两个表的关系
HBase的所有Region元数据被存储在.META.表中2.1,随着Region的增多,.META.表中的数据也会增大,并分裂成多个新的Region。为了定位.META.表中各个Region的位置,把.META.表中所有Region的元数据保存在-ROOT-表中,最后由Zookeeper记录-ROOT-表的位置信息。所有客户端访问用户数据前,需要首先访问Zookeeper获得-ROOT-的位置,然后访问-ROOT-表获得.META.表的位置,最后根据.META.表中的信息确定用户数据存放的位置,如下图所示。
在这里插入图片描述
-ROOT-表永远不会被分割,它只有一个Region,这样可以保证最多只需要三次跳转就可以定位任意一个Region。为了加快访问速度,.META.表的所有Region全部保存在内存中。客户端会将查询过的位置信息缓存起来,且缓存不会主动失效。如果客户端根据缓存信息还访问不到数据,则询问相关.META.表的Region服务器,试图获取数据的位置,如果还是失败,则询问-ROOT-表相关的.META.表在哪里。最后,如果前面的信息全部失效,则通过ZooKeeper重新定位Region的信息。所以如果客户端上的缓存全部是失效,则需要进行6次网络来回,才能定位到正确的Region。

9、Hbase安装

9.1、安装Java环境

参考安装链接:

https://blog.csdn.net/u010590120/article/details/94736800/

9.2、解压

$ tar xfz hbase-0.95-SNAPSHOT.tar.gz
$ cd hbase-0.95-SNAPSHOT

9.3、修改conf/hbase-env.sh文件

vim conf/hbase-env.sh
JAVA_HOME = 你自己的JAVA_HOME位置

9.4、编辑conf/hbase-site.xml

这是HBase的主要配置文件,需要在HBase和ZooKeeper写入数据的本地文件系统上指定目录

因为是独立安装,不能使用hdfs,只能使用默认文件系统(本地文件系统),所以需要手动指定hbase数据存储的位置

vim conf/hbase-site.xml
<configuration>
  <property>
    <name>hbase.tmp.dir</name>
    <value>/data/modules/data_hbase</value>
  </property>
</configuration> 

9.5、启动Hbase

$cd /usr/local/HBase/bin
$./start-hbase.sh

如果一切顺利,当运行HBase启动脚本,它会提示一条消息:HBase已经启动

starting master, logging to /usr/local/HBase/bin/../logs/hbase-tpmaster-localhost.localdomain.out

9.6、验证

使用命令jps查看进程,出现HMaster表示hbase启动成功。

10、Hbase使用

HBase包含可以与HBase进行通信的Shell。

status: 提供HBase的状态,例如,服务器的数量。

version: 提供正在使用HBase版本。

table_help: 表引用命令提供帮助。

whoami: 提供有关用户的信息。

数据定义的一些操作

create: 创建一个表。

语法:create ‘<table name>’,’<column family>’

list: 列出HBase的所有表。

 语法:list	

disable: 禁用表。

语法:disable ‘table_name

is_disabled: 验证表是否被禁用。

语法: is_disabled 'table name'

enable: 启用一个表。

is_enabled: 验证表是否已启用。

disable_all: 禁用所有匹配给定正则表达式的表

语法:''disable_all 'raj.*

describe: 提供了一个表的描述。
语法:’‘describe ‘table name’’’

alter: 改变一个表令可以更改列族的单元,

语法:

更改列族单元格的最大数目 ‘‘alter ‘t1’, NAME => ‘f1’, VERSIONS => 5’’

设置只读 ‘‘alter ‘t1’, READONLY(option)’’

删除列族 alter ‘ table name ’, ‘delete’ => ‘ column family ’ 

exists: 验证表是否存在。

语法:exists 'emp'

drop: 从HBase中删除表。用drop命令可以删除表。在删除一个表之前必须先将其禁用。

 语法:disable 'emp'  drop 'emp'

drop_all: 丢弃在命令中给出匹配“regex”的表。

11、Hbase快的本质

https://blog.csdn.net/chang_ge/article/details/79876843

备注

https://blog.csdn.net/iAm333/article/details/38313629?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值