HBase权威指南分章笔记Word文档下载推荐.docx
《HBase权威指南分章笔记Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《HBase权威指南分章笔记Word文档下载推荐.docx(34页珍藏版)》请在冰豆网上搜索。
3、一致性
强制还是最终一致性?
这个问题涉及到,存储系统的目标,是否弱化保证一致性?
一致性在确定的用户实例中,造成所有的不同,特别是延迟的影响。
4、物理模型
分布式还是单个机器?
系统架构是分布式机器还是单独机器(distributeionhandledclient-side)。
这个模式对系统的扩展性有很大的影响。
简单的方式,是每次增加一个机器,承担一个sharedsetups,但是对实时性要求高,而且每个分片都需要同样的计算能力。
5、读/写性能
必须理解你的应用的访问模式。
主要读操作还是写操作,还是读写均衡?
是否需要支持区域读,还是随机读?
已有的系统可能对某一个特性有效,可能系统对所有的特点均支持。
6、secondaryindex(辅助索引)
辅助索引允许你根据不同的fields及已排序的序列进行排序及访问操作。
这个特征肯定包括一定没有赋值索引及不保证排序。
要想支持这个特征,需要额外添加模块。
7、故障处理
8、压缩
你可能需要存储TB级数据,因此压缩数据是需要的
9、负载均衡
考虑到高读写,你可能需要存储需要透明的均衡,这个特征可能不能解决你所有问题,但是能帮助你设计高吞吐量的应用设计
10、原子read-modify-write
11、locing,waits,anddeadlocks
复杂的事务处理,像两阶段提交,可能使多客户端等待的资源成为可能性。
在最坏的场景下,可能导致死锁,很难解决。
系统是哪种锁模型,可能是freeofwaits,造成死锁?
2)、数据库的标准化
有些情况下,需要我们设计这些不同的schema,可以用非规范化、副本及IntelligentKeys(DDI)。
反思数据如何在BigTable存储系统中存储,怎样达到适当的方式。
下面是一个将典型的关系型数据库模型转为适合于列存储的HBase。
HBaseURLShortener,Hush,将LongURLs转换为shortURLS。
下图是实体关系图:
缩短网址,存储在SHORTURL表中,点击时(onclick),随后就会打开全URL,每一次点击都会被记录在Click表中,包括点击的次数,及从何处点击,然后用于日常分析。
USERS表中的用户可以使用HUSH创建自己的缩短网址,即添加描述,根据外键进行连接。
系统也会再后台下载Linkedpage用于分析例如HTML中的TITLE。
整个网页可以缓存下来,用于批处理或者分析,这些数据保存在URL表中。
下图是用HBase来存储相同的方案,
所有的缩减URL保存在单独的表中shorturl,包括使用统计数据(不同的列族存储不同的时间range,有一个时间存储时限)。
下载的downloadedpage及extracteddetails存储在URLtable中。
这个表使用压缩策略减小存储量。
Users-shortURL,充当一个lookup表,可以快速找到用户的shortIDS。
User表保存用户信息。
虽然表的数据没有改变,但是代表的意义变化,shorturl代替Click表用于统计信息。
USER-SHORTURL表用于代替外键关系,使用户查询更快。
有很多的方式来转换1:
1,1:
n及n:
n的关系来适合HBase架构,
3)HBase构件
这个部分介绍HBase各个组成部分、数据模型及可用的API。
3.1Tables、Rows、columns及cells
基本单位是列,一个或者多列构成一行,使用rowkey进行addressed。
一些列的行数据,构成了一个表。
每列都有多个版本值,存储在单独的单元中。
很像传统的数据表,但是extradimension允许每一个单元多个版本。
所有的行按照rowkey的字典顺序就行排序。
行由多个列构成的列族构成,列族可以由语义或者topicboundaries来定义。
列族保存在同一文件(HFILE)中。
列族在定义表时就固定,不宜改动或者太多列族,当前一般不超过数十列族。
列族的名字由printablecharates组成。
列族通常以family:
qualifier来参考,列族内的列没有什么限制,对列存储的值也没有什么限制。
下图是传统数据库表及HBase表的存储比较,Youshouldthinkaboutrowsandcolumnsnotbeingarrangedliketheclassicspreadsheetmodel,butratheruseatagmetaphorthatisinformationisavailableunderaspecifictag。
所有的列值都有一个时间戳,系统自动赋值或者由用户显式赋值。
这一点可以用于保存随着时间编号的多版本值。
不同版本的单元值以降序的方式保存,这样可以最先访问最新的值,这个特点可以用于那些偏向于读最新值的应用。
用户可以指定一个值有多少版本,此外,支持声明的删除,例如仅仅保存过去一周的数据。
单元内的值以比特串的形式保存,客户端知道其中意义。
HBase是一个稀疏的、分布式、持续、多维的map数据,通过rowkey,columnkey及时间戳来定位。
把这些放到一起,可以访问数据,例如(Table,RowKey,Family,Column,Timestamp)->
value。
HBase存储的特征是一个单元可能存储多版本的值,不同的列可能被写入不同次数,可以使用访问数据的API访问所有的数据,但是默认访问最近的数据。
下图所示一个样例表值。
虽然插入不同次数,存在多个版本,看到的是所有的列及最近版本数据,有一定的方式访问特殊时间戳的值。
3.2Auto-Sharding,自动分片
HBase中可扩展及负载均衡的单位称为region。
Region本质上讲是保存在一起的持续ranges行数据。
当太大时,自动分割。
初始的时候,HBase中只有一个Region,当超过配置的最大存储量,从中间middlekey进行分割,生成两个相等的region。
每一个region都被一个regionserver服务,一个regionserver可以为多个region服务。
当server宕机时,可以快速恢复,fine-grained的负载均衡策略使region可以在不同的服务器间移动。
3.3storageAPI
提供创建表、删除表及列族的操作,也可以改变已定义的表及列族定义,也可以根据已有的rowkey进行添加及删除值。
Scanapi,访问特点的值
HBase仅支持单行的事务处理。
Cells值可以被解释为counters及自动更新。
这些counters可以在一个操作中被读取及修改,虽然HBase是分布式特性,但是可以使用这个机制来试下全局严格的一致性。
从0.91以后,支持服务器端的计算,称为coprocessors。
3.4实现
数据存储到storefiles(HFile)中,有序、持久及可变的数据(key-valuemaps)。
这个文件时顺序的文件块,在尾端有索引,当HFile打开时,index被加载到内存中。
默认的大小是64KB,可以配置,这个文件提供API,可以访问特定的值。
StoreFiles被存储到HDFS中,保证数据存储的可靠性。
当数据被更新时,首先写入commitlog,称为write-aheadlog(WAL),然后存储到内存的memstore中。
当内存中的数据成为最大值时,写入HFILE,然后删除WAL。
WAL用于,方式放到内存中的数据丢失。
注:
局部性,在HBase中根据sortedkey/value来保存数据,根据key的排序,然后顺序读取数据。
因为可以利用这个特点将紧密联系的数据放到一起。
例如wettable的例子,将URL逆转后,更容易将相关数据放到一起。
由于flushingmemstores产生越来越多的HFiles,HBase有一个housekeeping机制来将文件合并,有两种合并方法,minorcompations和majorcompactions。
前者将小文件重写为一个大文件,执行n-waymerge。
由于所有的数据均是排序的,所以数据的合并过程很快。
Majorcompations,重写所有的一个region内所有的列族来生成一个大文件,和minorcompations相比,有一个明显的特点,根据它访问所有的key/value对,所以可以丢掉deletedentries包括deletermarker的数据,Predicatedeletes也同样可以被处理(例如根据TTL过期的数据或者太多versions)。
HBase中有三个主要构件,theclientlibrary,onemasterserver,manyregionservers。
Regionservers可以被添加或者删除或者根据负载情况进行动态变化。
Master用于分配region到regionserver内及使用apachezookeeper(用于保证仅有一个master运行,进引导reigion恢复)。
下图是HBase的结构图:
MasterServer用于处理regionsserver之间的region的负载均衡。
Master并不存储数据及提供数据检索服务,它获取集群状态,因此实际运行过程中负载不大。
另外它负责schemechanges及其他定义操作例如表及列族的创建。
HRegionServer用于所有读及写请求,也用于region的split操作。
客户端也和HregionServer直接通信。
3.5总结
Billionsofrows*millionsofcolumns*thousandsofversions=TBOrpb存储量。
Table的scan操作可以在线性时间,rowkey的查找与改变在logarithmicorder或者极端情况下constantorder(使用bloomfilter)。
基于列的架构,运行海量、wide及稀疏表。
因为每一行都被确定的server来服务,HBase是强一致性,使用multiversioning来帮助你避免并行操作的edit冲突及保存历史数据的变化。
第二章:
HBase的安装
1)必要条件
1.1硬件
没有特定的硬件需求。
考虑到HBase使用Java开发,至少要支持Java环境。
由于RegionServer需要内存用于memstores及blockcache,因此最好安装64位机器,内存超过4G。
在实际的应用中,很多HBase使用Hadoop的HDFS作为存储文件。
在同一服务器上运行Hadoop及HBase需要至少三种Java进程(datanode,tasktracker及regionserve