CAP理论Hbase的部署与使用Consistency一致性:任何一个读操作总是能够读取之前完成的写操作Availability可用性(指的是快速获取数据)每一次操作总是能够在确定的时间返回PartitionTolerance分区容忍性(分布式)在出现网络分区的情况下,仍然能够满足一致性和可用性。CAP理论取舍•CAP理论告诉我们:一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。•因此系统的关注点不同,相应的采用的策略也不同:oCA:传统关系数据库oAP:key-value数据库•不同数据对于一致性的要求是不同的:o用户评论对不一致是不敏感的,可以容忍相对较长时间的不一致,这种不一致并不会影响交易和用户体验。o产品价格则是非常敏感的,通常不能容忍超过10秒的价格不一致。一致性强一致性ACID在单机环境中,强一致性可以由数据库的事务来保证。在多机环境中,强一致性很难做到。分布式事务:性能太差,在互联网的应用中不适合弱一致性(包括最终一致性)通过提交处理的半同步、半异步或全异步,取得最终一致性效果。最终一致性使得数据的提交具有延时性,而在一定范围的延时性范围内(比如一秒),应用的可用性是OK的例:DNS系统。更新一个域名的IP以后,根据配置策略以及缓存控制策略的不同,最终所有的客户都可以看到最新的域名和IP的映射。服务器一致性N:节点的个数W:更新的时候需要确认已经被更新的节点个数R:读数据的时候读取数据的节点个数•如果W+RN,那么分布式系统就会提供强一致性的保证,因为读取数据节点和被写入的节点是有重叠的。•在一个RDBMS的复制模型中(Master/Slave),假如N=2,那么W=2,R=1,此时是一种强一致性,但是这样造成的问题就是可用性的减低,因为要想写操作成功,必须要等2个节点都完成以后才可以。•在分布式系统中,一般N都大于3(冗余),根据CAP理论,一致性,可用性和分区容错性最多只能满足两个,那么就需要在一致性和分区容错性之间做一个平衡。•高一致性:N=W,R=1,这个时候可用性就会大大降低•高可用性:W=1,这样使得写操作延迟最低,同时通过异步的机制剩余的N-W个节点。(N,R,W)的值典型设置为(3,2,2),兼顾性能与可用性Hbase的部署•配置hosts,确保涉及的主机名均可以解析为ip•编辑hbase-env.xml•编辑hbase-site.xml(关联Hadoop)•覆盖Hadoop核心jar包•编辑regionservers文件•把Hbase复制到其它节点•启动Hbase•验证启动运行界面Hbase存储特点:•修改数据时,采用折中办法,一定时间内,在内存中操作可以修改,写入磁盘后不可修改。•删除数据时,并不是真的删除,而是insert一条完全相同的记录,并且打上一个删除标记(HDFS文件不能修改)。•定期重整压缩(将小文件合成大文件),舍弃过时文件以及有删除标记的数据。•无索引,但是可以手工建立索引。但两表之间需要同时增、删、改。•Hbase设计原则:•尽量使数据在一个列族中,因为一个列族是一个Store,物理上在一起。•数据的插入、删除、修改在内存中,定期写入磁盘。写入后不可修改,删除的话需要设置删除标记。•StoreFile对应HDFS中的Hfile具体文件经过两次分布,不知道物理存放位置。hbase(main):024:0status#查询Hbase状态3servers,0dead,1.0000averageloadhbase(main):025:0version#查询Hbase版本0.90.4,r1150278,SunJul2415:53:29PDT2011hbase(main):011:0create‘member’,‘member_id’,‘address’,‘info‘#建表0row(s)in1.2210seconds数据库相关语句表名行键列族1列族2hbase(main):012:0list#列出表名TABLEmember1row(s)in0.0160secondshbase(main):006:0describe'member‘#查看表信息DESCRIPTIONENABLED{NAME=‘member’,FAMILIES=[{NAME=‘address’,BLOOMFILTER=‘NONE’,REPLICATION_SCOPE=‘0’,true,VERSIONS='3',COMPRESSION='NONE',TTL='2147483647',BLOCKSIZE='65536',IN_MEMORY='false',BLOCKCACHE='true'},{NAME='info',BLOOMFILTER='NONE',REPLICATION_SCOPE='0',VERSIONS='3',COMPRESSION='NONE',TTL='2147483647',BLOCKSIZE='65536',IN_MEMORY='false',BLOCKCACHE='true'}]}1row(s)in0.0230seconds删除列族:alter、disable、enable命令hbase(main):003:0alter'member',{NAME='member_id',METHOD='delete'}ERROR:Tablememberisenabled.Disableitfirstbeforealtering.hbase(main):004:0disable‘member’#离线0row(s)in2.0390secondshbase(main):005:0alter'member',{NAME='member_id',METHOD='delete'}0row(s)in0.0560secondshbase(main):008:0enable‘member’#上线0row(s)in2.0420seconds插入记录put'member','scutshuxue','info:age','24'put'member','scutshuxue','info:birthday','1987-06-17'put'member','scutshuxue','info:company','alibaba'put'member','scutshuxue','address:contry','china'put'member','scutshuxue','address:province','zhejiang'put'member','scutshuxue','address:city','hangzhou'put'member','xiaofeng','info:birthday','1987-4-17'put'member','xiaofeng','info:favorite','movie'put'member','xiaofeng','info:company','alibaba'put'member','xiaofeng','address:contry','china'put'member','xiaofeng','address:province','guangdong'put'member','xiaofeng','address:city','jieyang'put'member','xiaofeng','address:town','xianqiao'获取一个行健的所有数据hbase(main):001:0get'member','scutshuxue'COLUMNCELLaddress:citytimestamp=1321586240244,value=hangzhouaddress:contrytimestamp=1321586239126,value=chinaaddress:provincetimestamp=1321586239197,value=zhejianginfo:agetimestamp=1321586238965,value=24info:birthdaytimestamp=1321586239015,value=1987-06-17info:companytimestamp=1321586239071,value=alibaba6row(s)in0.4720seconds获取一个行键,一个列族的所有数据hbase(main):002:0get'member','scutshuxue','info'COLUMNCELLinfo:agetimestamp=1321586238965,value=24info:birthdaytimestamp=1321586239015,value=1987-06-17info:companytimestamp=1321586239071,value=alibaba3row(s)in0.0210seconds获取一个行键,一个列族中一个列的数据hbase(main):002:0get'member','scutshuxue','info:age'COLUMNCELLinfo:agetimestamp=1321586238965,value=241row(s)in0.0320seconds更新一条记录hbase(main):004:0put'member','scutshuxue','info:age','99'0row(s)in0.0210secondshbase(main):005:0get'member','scutshuxue','info:age'COLUMNCELLinfo:agetimestamp=1321586571843,value=991row(s)in0.0180seconds通过timestamp来获取数据hbase(main):010:0get'member','scutshuxue',{COLUMN='info:age',TIMESTAMP=1321586238965}COLUMNCELLinfo:agetimestamp=1321586238965,value=241row(s)in0.0140secondshbase(main):011:0get'member','scutshuxue',{COLUMN='info:age',TIMESTAMP=1321586571843}COLUMNCELLinfo:agetimestamp=1321586571843,value=991row(s)in0.0180seconds删除语句hbase(main):016:0delete‘member’,‘temp’,‘info:age‘#删除指定字段0row(s)in0.0150secondshbase(main):018:0get'member','temp‘#删除指定字段COLUMNCELL0row(s)in0.0150secondshbase(main):001:0deleteall‘member’,‘xiaofeng‘#删除整行0row(s)in0.3990secondshbase(main):035:0truncate‘member‘#清空表Truncating'member'table(itmaytakeawhile):-Disablingtable...-Droppingtable...-Creatingtable...0row(s)in4.3430seconds表相关语句hbase(main):029:0disable‘temp_table‘#离线0row(s)in2.0590secondshbase(main):030:0drop‘temp_table‘#删除表0row(s)in1.1070secondshbase(main):021:0exists‘mem