Hbase简介
来源:互联网 发布:优易数据网站 编辑:程序博客网 时间:2024/06/09 16:42
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。
HBase系统架构如图所示
Client
HBaseClient使用HBase的RPC机制与HMaster和HRegionServer进行通信,对于管理类操作,Client与HMaster进行RPC;对于数据读写类操作,Client与HRegionServer进行RPC。
Zookeeper
ZookeeperQuorum中除了存储了-ROOT-表的地址和HMaster的地址,HRegionServer也会把自己以Ephemeral方式注册到Zookeeper中,使得HMaster可以随时感知到各个HRegionServer的健康状态。此外,Zookeeper也避免了HMaster的单点问题,见下文描述
HMaster
HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的MasterElection机制保证总有一个Master运行,HMaster在功能上主要负责Table和Region的管理工作:
1. 管理用户对Table的增、删、改、查操作
2. 管理HRegionServer的负载均衡,调整Region分布
3. 在Region Split后,负责新Region的分配
4. 在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移
HRegionServer
HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。
HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个ColumnFamily的存储,可以看出每个Column Family其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个ColumnFamily中,这样最高效。
-ROOT-&& .META.
HBase中有两张特殊的Table,-ROOT-和.META.
Ø .META.:记录了用户表的Region信息,.META.可以有多个regoin
Ø -ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region
Ø Zookeeper中记录了-ROOT-表的location
Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问,中间需要多次网络操作,不过client端会做cache缓存。
存储:
HBase以表的形式存储数据。表有行和列组成,存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分考虑到排序存储这个特性,将经常一起读取的行存储放到一起(位置相关性) 。
列存储
HStore存储是HBase存储的核心了,其中由两部分组成,一部分是MemStore,一部分是StoreFiles。MemStore是 Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile), 当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。当StoreFilesCompact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触 发Split操作,同时把当前Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer 上,使得原先1个Region的压力得以分流到2个Region上。HFile里面的每个KeyValue对就是一个简单的byte数组。
HRegion是Hbase中分布式存储和负载均衡的最小单元。最小单元就表示不同的Hregion可以分布在不同的HRegion server上。但一个Hregion是不会拆分到多个server上的。
RowKey&& Column family
a) Rowkey: Hbase 中的记录是按照rowkey来排序的;
b) Column family:(列族)是在系统启动之前预先定义好的;
hbase表中的每个列,都归属与某个列族。列名都以列族作为前缀。
HBase中的列可以动态新增。
存储类型:
TableName 是字符串
RowKey 和 ColumnName 是二进制值(Java 类型 byte[])
Timestamp 是一个 64 位整数(Java 类型 long)
value 是一个字节数组(Java类型 byte[])
存储结构:
即HTable按Row key自动排序,每个Row包含任意数量个Columns,Columns之间按Columnkey自动排序,每个Column包含任意数量个Values。理解该存储结构将有助于查询结果的迭代。
(RowKey,List(SortedMap(column,List(value,TimeStamp))))
存储单元:
HBase中通过row和columns确定的为一个存贮单元称为cell。
每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。
HBase为null的Column不会被存储,这样既节省了空间又提高了读性能
cell中的数据是没有类型的,全部是字节码形式存贮
两种数据版本回收方式:
一是保存数据的最后n个版本
二是保存最近一段时间内的版本(比如最近七天)
用户可以针对每个列族进行设置值value:每个值由4个键唯一索引
tableName+RowKey+ColumnKey+Timestamp=>value
访问方式:
访问hbase table中的行,只有三种方式:
1 通过单个row key访问
2 通过row key的range
3 全表扫描
Row key:行键 (Row key)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在hbase内部,row key保存为字节数组。
Hbase优缺点:
1.不支持条件查询以及order by等查询;
2.列可以动态增加,列为空则不存储数据,节省存储空间;
3.会自动切分数据;
4.可以提供高并发读写操作的支持;
学习HBase至少应该掌握四点:
1. 深入理解HTable,掌握如何结合业务设计高性能的HTable。
2. 掌握与HBase的交互,通过HBase Shell命令及Java API进行数据的增删查改。
3. 掌握如何用MapReduce分析HBase里的数据。
4. 掌握如何测试HBase MapReduce。
- Hbase(1):HBase简介
- HBase简介
- HBase简介
- HBase简介
- HBase简介
- HBase简介
- Hbase简介
- hbase简介
- HBase简介
- HBase简介
- HBase简介
- HBase简介
- HBase简介
- HBase简介
- HBase简介
- HBase简介
- HBase简介
- HBase简介
- 润乾报表简单通用查询报表设计
- 看懂SqlServer查询计划
- C# 将界面打印成图片,以PDF形式打开
- iOS 音乐播
- oracle如何删除一个用户下的所有数据?
- Hbase简介
- jvisualVM的试用本地及远程xp及linux的的监听
- excel的导入导出
- Android点滴
- hdu(4597)记忆话搜索
- Java Thread 总结
- Linux系统下文件字符编码转换脚本
- <action-mappings > 属性详解
- java数组声明及初始化