hbase
-
hbase 是什么? 由哪些模块构成
-
hbase的优缺点以及应用场景
-
hbase和关系型数据库的区别
Hbase 简介
Hbase是一个分布式的,面向列的开源数据库
Hbase在Hadoop之上提供类似于BigTable的能力
Hbase不同于一般的关系型数据库,它适合存储非结构化的数据
BigTable是什么?
bigtable 是基于google 的GFS的面向列的可扩展的性能很好数据库
什么是面向列的数据库 (把每一列数据放一起存储)?
行数据库
ID | UserName | Password |
---|---|---|
1 | Tom | 123456 |
2 | Jerry | 123456 |
列数据库
RowKey | Column Family |
---|---|
rk_id | cf:col1=1 cf:col2=2 |
rk_username | cf:name1=tom cf:name2=jerry |
rk_password | cf:pwd1=123456 cd:pwd2=123456 |
为什么Hbase适合非结构化数据存储?
结构化数据:可以用二维表格存储
非结构化数据:表格,图片,文档
可以将二进制数据存储到Hbase中。
Hbase 和Hive 用什么区别?
hive 是基于hadoop的数据仓库工具,它适合于对一段时间内数据分析查询。
hbase适合大数据的实时查询。
hbase和hdfs有什么不同?
hbase建立在hdfs之上,利用了hadoop文件系统的容错能力;
hbase提供对数据的随机实时读写/访问能力;
hbase内部使用哈希表,并存储索引,可以对hdfs文件中的数据进行快速查询;
Hbase使用场景
瞬间写入量很大,常用数据库不好支撑或需要很高支撑成本的场景
数据需要长久保存,且会持久增长到较大的场景
hbase不适用join,多级索引,表关系复杂的数据模型
HBase 概念
- NameSpace : 可以把NameSpace理解为RDBMS的“数据库”
- Table:表名必须是能用文件路径里的合法名字(Hbase表映射为HDFS上文件)
- Row : 在表里面,每一行代表一个数据对象,每一行都是以一个行键来进行唯一标识的,行键没有特定的数据类型,以二进制字节来存储
- Column :Hbase的列由Column family 和Column qualifier 组成,由冒号(:)进行间隔,比如family :qualifier
- RowKey : 可以唯一标识一行记录,不可被改变,改变的唯一方式,就是删除,然后再插入
- Column Family:在定义HBase表的时候需要提前设置好列族,表中所有的列都需要组织在列祖里面,在文件系统中,一个Column Family中的Column是存储在一起的。列簇一旦确定好,就不允许更改了,因为更改会影响到真实的物理存储。
- Column Qualifier:列族中的数据通过列标识来进行映射,Column Qualifer就是key,存储的值就是对应的value。
- Cell:每一个行建,列簇,列标识共同组成的单元
- TimeStamp:每一个值都有一个timestamp,作为该值特定版本的标识符。
HBase和传统关系型数据的区别
… | HBase | RDBMS |
---|---|---|
数据库大小 | PB | GB,TB |
数据类型 | Bytes | 丰富的数据类型 |
事务支持 | ACID只支持单个ROW级别 | 全面的ACID支持,对Row和表的支持 |
索引 | 只支持RowKey | 支持 |
吞吐量 | 百万/秒 | 数千/秒 |
HBase数据模型
可以把HBase理解为一个大map ,rowkey,column family,column qualifer,timestamp ,value 层层深入。
{
"0001":{ //rowkey
"FileInfo":{ //column family
"name":{ //column qualifer
"timestamp1":"file1.txt" // timestamp1 为 timestamp file1.txt 为value
},
"tepe":{
"timestamp1":"txt"
}
},
"SaveInfo":{
"create":{
"timestamp1":"jack"
},
"path":{
"timestamp1":"/home",
"timestamp2":"/homne/jack"
}
}
}
}
Hbase基础架构
2993 NameNode
3410 ResourceManager
4265 HRegionServer
3098 DataNode
3515 NodeManager
4108 HMaster
4908 Jps
3903 QuorumPeerMain
搭建伪分布式开发环境之后,启动hadoop相关服务进程,启动hbase以来的zk,启动hbase相关的服务进程之后的进程如上。会发现
可以看到hbase依赖于hdfs,除了hdfs之外,客户端通过java api 操作hbase ,中间则为hbase的基础架构,它分为,Hmaster,Region Server ,Zookeeper
HMaster
- HMaster 是HBase主从集群架构中的中央节点
- HMaster将Region分配给RegionServer,协调RegionServer的负载均衡并维护集群的状态
- 维护表和Region的元数据,不参与数据的输入和输出过程
Region Server
- 维护HMaster分配给他的region,处理对这些region的io请求
- 负责切分运行过程中变得过大的region
zookeeper
- zookeeper是集群的协调器,HA解决方案
- HMaster启动将系统表加载到zookeeper(如果使用hbase api会发现,当相连接hbase读写数据的时候,不需要知道hmaster地址,也不需要知道hregionserver地址,只需要知道zookeeper集群的地址就可以了,zookeeper中存储了meta信息,region信息等等)。
- 提供HBase Region Server状态信息
——————————————————————————————-
总结
一句话描述hbase
apache顶级项目,来自google bigtable开源实现,高性能高可扩展的列式数据库,相比于传统的关系型的行式数据库,可以用更低廉的成本,达到更大数据量的存取,而且它本身基于hdfs,天生具有hbase高容错能力。
支持数据的随机读取,达到每秒数百万的吞吐量。
比如存储海量非结构化或者半结构化的数据,需要很高的吞吐量,而且常见查询也不涉及join,多级索引,那么hbase是非常适用的一款列式数据库。