HBase从基础到高阶全面介绍

一.HBase的基本简介

1.简介:

HBase是大数据领域的一个nosql的数据库, no sql 或者 not only sql 非关系型数据库. Hbase是参考谷歌的一篇论文: 2006年Google发表BigTable白皮, 2006年开始开发HBase, 2008 HBase成为了 Hadoop的子项目, 2010年HBase成为Apache顶级项目(扩展:hdfs是参考GFS,mapreduce是参考了mapreduce).HBase的官方http://hbase.apache.org. Doug Cutting 是Hadoop之父, 他是Lucene、Nutch 、Hadoop等项目的发起人. hbase的所有数据都是存储在hdfs上面的,提供实时读写的nosql的数据主要用于存储结构化和半结构化松散的数据,hbase数据查询能力比较脆弱 select * from user where id = 20 不支持sql语句查询数据 也不支持多表join操作,hbase当中所有存储的数据都是字节数组.

2.特点:

海量数据存储:它适合储存过亿级别的行数据,适合存储PB级别的数据 1PB= 1024TB 1TB= 1024GB
海量数据检索,可以在毫秒级别响应.
列式存储:列式储存的数据库( orc parquet也是列式储存,textFile sequenceFile 则是行式存储).
稀疏表:有些字段如果为空,那么就不占用磁盘空间.
易于扩展:hbase适合横向的扩展
高并发:支持同一时间多个访问请求并发的操作

3.HBase与hadoop的关系:

  1. hdfs是分布式文件存储系统 适合一次写入,多次读取的特点,适合存储大文件.
  2. HBase:提供表模型,数据都是存储在表里面,适合随机的读写操作使用的key,value对类型的数据,紧耦合hdfs,提供灵活的数据模型,使用表状存储,支持MapReduce,依赖HDFS,优化了多次读,以及多次写

4.RDBMS关系型与hbase非关系型对比

HBase不支持ACID,支持的仅仅是行事务,一条数据支持事务ACID操作.不支持join.
Atomicity原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样.
Consistency一致性:一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少.
Isolation隔离性:隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统.
Durability持久性:在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚
如果一个事物支持(Transaction)的数据库,则必须要有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求.

5.表模型

结构:
1.tableName 表名称
2.rowkey hbase当中的行键 一张表当中行键唯一,类似于mysql表当中的主键
3.columnFamily 列族 列族用于规划一些列
4.column 列 每一个列必然归属于某一个列族
5.timestamp 时间戳 每一条数据都会有一个时间戳
6.versionNum 版本号 每条数据都有版本号 ,数据发生变更,版本号增大

注意
1.创建一张hbase表,最少两个条件 表名和列族名
2.列名是我们在插入数据的时候动态指定的
3.rowkey也是我们在插入数据的时候动态指定的
4.timestame 每条数据都有一个时间戳 时间戳可以手动指定,也可以系统帮我们生成
5.ersionNum 版本号,系统自动维护

6.HBase的三个重要机制

1.flush机制:如果海量数据频繁的写入: memorystore频繁的将数据保存到storeFile
2.compact机制:
数据从StoreFile到HFile
将数据合并成为一个大的Hfile 合并数据的版本,清楚删除掉的数据
将我们的所有的数据进行版本的合并,清楚掉删除的数据
所有的数据都保存三个历史版本 如果一个数据超过了三个版本,在compact的时候,会将其他的版本清除掉,只保留最近的三个版本
清楚掉删除的数据:将标记为删除的数据,真正的给删除掉
3.split机制: 切开region 一旦某一个region达到10GB的阈值,就会进行region的分裂

7.Hbase和Hive的对比

hive:
1.数据仓库的工具,主要用于开发数据仓库一些功能,一些统计查询功能,建立了hive表,以及hive库,这些信息都存在,这些都是hive的元数据信息,都是存储在mysql里面了
2.hive映射的数据文件都是存储在hdfs上面了
3.hive可以将结构化的数据映射成为一张表
4.hive数据存储基于hdfs,数据的计算基于mapreduce
hbase
1.大数据领域里面的一个nosql的数据库
2.hbase的数据也是基于hdfs存储,天然的支持mr的程序
数据库与数据仓库
1.数据库主要用于捕获数据 ==》你往里面添加数据 有事务保证
2.数据仓库主要面向分析,数据一般都不会变动 ,数据仓库记录的数据都是已经发生的事实,事实是不能够改变的.

二.HBase的架构

HBase是一个主从架构,
主节点HMater:主要是用于管理HBase整个集群,以及分配region.
功能:
1.监控RegionServer
2.处理RegionServer故障转移
3.处理元数据的变更
4.处理region的分配或移除
5.在空闲时间进行数据的负载均衡
6.通过Zookeeper发布自己的位置给客户端
从节点HRegionServer:主要负责管理region,以及响应客户端的读写请求(一个HRegionServer里面包含了两部分Region和HLog)
功能:
1.负责存储HBase的实际数据
2 .处理分配给它的Region
3 .刷新缓存到HDFS
4 .维护HLog
5 .执行压缩
6 .负责处理Region分片

三.HBase的读写流程

client请求zk通过zk分布式一致性管理,经过HMaster的从节点HRegionServer,将数据写入HLog WAL(Write-Ahead logfile的文件中,它可以在系统出现故障的时候,数据可以通过这个日志文件重建.安全性提高储存在hdfs上)和region(Hbase表的分片,HBase表会根据RowKey值被切分成不同的region存储在RegionServer中,在一个RegionServer中可以有多个不同的region。阀值是10g)中,在regin中有多个store(一个store对应一个列簇)块,一个store块里面有一个memerystore(就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegsionServer会在内存中存储键值对,内存储存128m),和多个storeFile(当memorystore的数据达到128m之后就会dump到磁盘中storeFile里面,保存为一个个storefile).在最后一个个storefile又会合成一个达到File,然后储存在磁盘上,这是实际的储存文件.

四.HBase的安装

链接:https://www.cnblogs.com/oraclestudy/articles/5665780.html
注意事项:
hbase依赖于zk以及hdfs,启动hbase之前一定要保证zk以及hdfs启动了
regionservers 主要是决定我们的从节点在哪些机器上面,与hdfs的slaves功能类似

五.HBase的shell操作

HBase当中三种查询方式:
1.get 通过rowkey直接获取数据 get ‘user’, ‘rk0001’ 通过rowkey查询指定的数据
2.scan查询 全表扫描,扫描hbase表当中所有的数据 没人用
3.scan startRowkey endRowkey 指定rowkey的范围值进行扫描scan ‘user’, {COLUMNS => ‘info’, STARTROW => ‘rk0001’, ENDROW => ‘rk0003’}
常用的一些比较过滤器
1.rowFilter:针对rowkey起作用 会将满足rowkey的数据的所有列全部都返回回来
2.familyFIlter:针对列族起作用 将满足条件的列族下面所有列全部都返回回来
3.qualifierFilter:针对列名起作用 满足列名的数据都会返回回来
4.valueFilter::针对列值起作用 满足值的列全部都返回来

六.HBase与MapReduce,sqoop,hue的集成

1.与MapReduce集成

问题1:
通过mr实现将myuser这张表当中f1列族的name和age字段写入到myuser2这张表的f1列族当中去
解决方法:
如果是读取hbase表数据:mapper类继承TableMapper.
如果是写入hbase表:reduce类继承TableReducer
问题2:
如何快速的加载海量的数据到hbase里面去 有一批海量的数据,文本文件,需要快速的保存到hbase里面去
解决方法:
直接将user.txt转换成为hfile格式,然后直接加载到myuser2表里面去

2.与sqoop的整合

sqoop数据导入导出的工具,可以将关系型数据库导入到大数据平台来,可以将大数据平台的数据导出到关系型数据库.CDC工具 Datax3.0这两个更好用

3.与hue的整合

作用:
整合各种其他的框架,通过一个hue框架就可以实现操作各种其他的框架,hue提供一个良好的web界面,可以让我们通过web界面来实现操作各种其他的框架
hue的架构:
UI:提供web浏览界面
hue server:服务端 类似于一个tomcat
hue db:主要是用于存储一些任务
hue基本上可以与我们所有学过的大数据的框架都整合进去
注意
hue只需要安装一台机器即可,选择任意一台机器安装都行
zk一般都是奇数台:
zk给多少台,根据集群大小来分的
小型机集群0 – 20台服务器 zk 3-5台
中型机集群 20-50台服务器 zk 5-9台
大型机集群 50台以上 zk

七.HBase的高阶操作

1.HBase的预分区

通过手动指定预分区:hbase(main):001:0> create ‘staff’,‘info’,‘partition1’,SPLITS => [‘1000’,‘2000’,‘3000’,‘4000’]
通过16进制的算法生成预分区:create ‘staff2’,‘info’,‘partition2’,{NUMREGIONS => 15, SPLITALGO => ‘HexStringSplit’}
从文件当中读取进行预分区:
cd /export/servers/
vim splits.txt
aaaa
bbbb
cccc
dddd
然后执行:
hbase(main):004:0> create ‘staff3’,‘partition2’,SPLITS_FILE => ‘/export/servers/splits.txt’

2.HBase的rowKey设计技巧

设计方法:
rowkey的设计需要结合我们的业务来讨论,避免数据热点问题(所有的数据都去到某一个region里面去了),如何确定rowkey究竟去哪一个region?取rowkey的前面几位来确定.有可能出现rowkey的长度,大于预分区规则的长度,例如rowkey16字节,预分区规则的长度8个字节.如果rowkey设计的前八位全都都是一样的,后面八位随记变化 ,所有的数据全部都会跑到一个region里面去.
1.rowkey的设计长度原则:rowkey不宜过长,过长之后占用太多内存空间,一般10-100字节,最大不超过64KB.
2.rowkey的散列原则:尽量保证rowkey的设计负载比较均衡,数据均匀的落在不同的region里面了.
3.rowkey的唯一原则:rowkey的设计不会出现重复,一旦重复,就会造成数据的覆盖.
如何解决rowkey的热点问题
1.加盐 给rowkey的前缀随记的加上一些随机数
2.取hashCode码值 通过hash,会造成前缀相同的数据,hashCode之后前缀仍然是相同的,放到同一个region里面去,造成相同用户的数据都在同一个region里面,尽量让同一个用户的数据在同一个region里面,方便我们的查询.
3.反转:手机号反转 13865472587==》反转 78527456831 ==》反转之后,相同的用户的数据还是在同一个region里面.
4.时间戳的反转:每条数据产生的时间戳给反转,放到rowkey里面去也可以.

3.HBase的协处理器

二级索引
二级索引为了解决什么问题: 解决hbase查询比较脆弱的问题
如何解决的:通过数据的冗余存储
核心思想:以空间换时间

按照其他的一些条件查找就比较慢了,例如查找age > 30等 查找平均年龄大于30岁的人,例如查找存款大于500W等等.只能使用各种各样的过滤器,效率低.按照一些指定的字段查,将这些指定的字段,存储一份到一个易于插叙 的数据库里面去,其实就是做了数据的冗余.以空间换时间的思想
一级索引
hbase当中一级索引就是rowkey
协处理器的分类
observer 主要用于数据插入或者删除的一些前置或者后置的拦截等等
endpoint 主要用于求最大值,求最小值,求平均值等等

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值