版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、二FuHBase篇Insighdoop培训材料123545HBase原理概述HBase数据模HBase写流程HBase读流程HBase高级专题型数据分类与具有固定的机构,属性划分,以及类型等信息。通常所理解的关系型数据库中所的数据信息,大多是结构化数据, 如职工信息表,拥结构化数据有ID、Name、Phone、Address等属性信息。通常直接存放在数据库表中。数据的每一个属性对应数据表的一个字段。无法用的结构来表示,如文本文件、图像、声音、网页等信息。非结构化数据数据较小时(如KB级别),可考虑直接存放到数据库表中(整条到某一个列中),这样也有利于整条的快速检索。数据较大时,通常考虑直接存放
2、在文件系统中。数据库可用来存放相关数据的索引信息。具有一定的结构,但又有一定的灵活可变性。典型如XML、HTML等数据。其实也是非结构化数据的一种。半结构化数据可以考虑直接转换成结构化数据进行。根据数据的大小和特点,选择合适的方式。这一点与非结构化数据的类似。按行与按列按行:数据按行在底层文件系统中。通常,每一行会被分配固定的空间。优点:有利于增加/修改整行等操作;有利于整行数据的操作;缺点:单列查询时,会要的数据。一些不必按列:数据以列为,在底层文件系统中。优点:有利于面向单列数据的/统计等操作。缺点:整行操作。时,可能需要多次I/O可以看出,无论是按行,还是按列存储,都有明显的优缺点。是否
3、存在一种折衷的方案?AddressPhoneNameIDIDNamePhoneAddressKeyValueKey-01Key-01Key-01Value-ID01Value-Name01Value-Phone01Key-01Value-Address01KeyValue具有特定的结构。Key部分被用来快速的检索一条数据,Value部分用来实际的用户数据信息。KeyValue作为承载用户数据的基本单元,需要保存一些对自身的描述信息,例如,时间戳,类型等等。那么,势必会有一定的结构化空间开销。一个Key值对应一个Value?还是一个Key值可以对应多个Value?AddressPhoneName
4、IDRelational DatabaseKeyValue DatabaseDatabase contains tables, tables contain columns and rows, and rows are made up of column values. Rows within a table all have the same schema.The data m is well defined in advance. A schema is strongly typed and i s constra s and relationships t enforce data eg
5、rity.The data mis based on a “natural” represenion of the data it contains, not on an applications functionality.The data mis normalized to remove data duplication. Normalization establishes table relationships. Relationships assote data betn tables.s can initially be thought of like atable, but unl
6、ike a table you dont define any schema for a. Ais basically a buckett you put itemso. Items within a singlecan have differing schemas.Items are identified by keys, and a given item can have a dynamic set of attributes attached to it.In some implemenions, attributes are all of a string type. In other
7、 implemenions, attributes have simple typest reflect code types, such ass, string arrays, and lists.No relationships are explicitly definedbetns or within a given.分布式数据库数据分区方式-一致性Hash分区初始运行阶段,将Hash环划分为几个相等弧长的区间,每一个Hash区间对应一个Node。对用户数据KeyValue的Key值进行Hash,落到哪个Hash区间,就属于哪个Node。节点出现宕机时,将由该节点顺时针方向的下一个节点接
8、管相应的数据,避免出现大范围的 Re-Hash操作。新节点加入时,从上一个节点到新节点之间的数据,需要Re-Hash到新的节点中。一致性Hash尽管一定程度上可以保证负载的均匀性,但在节点频繁宕机,或频繁重启的情形下,可能会导致负载的极不均匀。分布式数据库-按Key值连续范围分区05070608091110121315141601030204Node1Node2Node3Node4数据按照RowKey的范围(按一定的排序算法排序的结果,如按RowKey的字典顺序),划分为一个个的子区间。每一个子区间都是一个分布式的基本单元04081216030711150206101401050913关于HB
9、aseBigTable-LikeKeyValue线性扩展面向列强一致性字典排序高可靠Apache HBase is the Hadoop database, a distributed, scalable, big data store.RegionRow001Row002将一个数据表按Key值范围横向划分为一个个Region-1的子表,实现分布式。StartKey,EndKey.Row010Row001Row002.Row010 Row011这个子表,在HBase中被称作“Region”。每一个Region都关联一个Key值范围,即一个Row011Row012Region-2StartKey
10、,EndKey使用StartKey和EndKey描述的区间。事实上,每一个Region仅仅StartKey就可以了,因.Row012.为它的EndKey就是下一个Region的StartKey。Row020Region是HBase分布式的最基本单元。Row021Row020Region-3Row022.Row030Row021Row022.Row030 Row031.StartKey,EndKeyTableName? StartKey?RegionRow031.Region-4StartKey,EndKeyRegion与RegionServerRegionServer是HBase的数据服务进程
11、。负责处理用户数据的读写请求。Region被交由RegionServer管理。实际上,所有用户数据的读写请求,都是和RegionServer上的 Region进行交互。Region可以在RegionServer之间发生转移。RegionRegionServerRegion思考:Root一个Region包含了一个Startkey和EndKey范围。一条用户数据KeyValue必然属于一个唯一的 Region。而Region又有RegionServer来管理,那么,这个路由信息保存在哪里呢?Region如何才可以转移?由谁负责转移?RegionRegion分类Region分为元数据Region以及
12、用户Region两类。而对于元数据Region,又包含RootRegion和Meta Region两类。ROOTRegionRoot RegionMeta Region由信息。了Meta Region的路由信息。了每一个User Region的路METARegion读写Region数据的路由,包括如下几步:找寻Root Region地址。由Root Region找寻Meta Region地址。再由Meta Region找寻User Region地址。RegionRegionRegionRegionRegion疑问:Root Region信息保存在哪里?MasterMaster进程负责管理所有的
13、RegionServer。新RegionServer的。“Hey, Region-A! Please move toRegionServer2!”“F*, RegionServer1 was gone!Let others take control of it!”“Good! 1 new RegionServer is coming.”RegionServer Failover处理。负责建表/修改表/删除表以及一些集群操作。Master进程负责所有Region的转移操作。新表创建时的Region转移。运行期间的负载均衡保障。RegionServer Failover后的Region接管。Mas
14、ter进程有主备角色。集群可以配置多个 Master角色,集群启动时,这些Master角色通过竞争获得主Master角色。主Master只能有一个,所有的备Master进程在集群运行期间处于休眠状态,不任何集群事务。RegionServerRegionServerRegionServer疑问:主备Master进程角色是如何进行裁决的?ZooKeeper提供分布式锁的服务。例如,多个Master进程竞争主Master角色时,怎么样保证仅 有一个Active角色存在?这就需要一个分布式的锁机制来保证。多个Master进程都尝试着去ZooKeeper中写入一个对应的节点,该节点只能被一个Master
15、进程创建成功,创建成功的Master进程就是Active角色。“Master-1, Congratulations! Youare the active one!”“Sorry, Master-2. The active seas been taken by others. Please be patient!”提供了事件机制。例如,主Master进程宕掉之后,其它的备Master如何能够快速的接管?这个过程中,备Master在那个对应的ZooKeeper节点。主Master进程宕掉之后,该节点会被删除,那么,其它的备Master就可以收到相应的消息。个别场景,可充当一个微型数据库角色。例如,
16、在ZooKeeper中存放了Root Region的地址(Root Region原来是存在ZooKeeper中的!),此时,可以将它理一个微型数据库。HDFS回顾:迄今为止,已经知道了Region,也知道了HBase中的两类进程角色Master/RegionServer,以及ZooKeeper在 HBase中的作用。那么,接下来探讨一下,HBase中的数据是保存在什么地方的?/hbase/table/region-1/region-2/region-3HDFSHDFS是一个分布式文件系统。它通过将一个大的文件划分成一个个固定大小的Block来实现分布式存储。每一个Block的默认大小为64MB
17、。每一个Block都存在多个备份,并且被部署在不同的数据节点上,来保障数据的安全。目前,HBase的所有底层数据都以文件的形式交由HDFS来。HBase一侧本身不保存数据信息。思考:NAS能否替代HDFS来作为HBase的底层?小结RegionServerMasterWushanFSRegionZooKeeper123545HBase原理概述HBase数据模HBase写流程HBase读流程HBase高级专题型Create Table通过S命令建表:hbase create t1, NAME = f1, VER建表时需要配置的一些属性:ColumnFamily (列族,1个或多个)。表级别的配置
18、信息。Region预分区信息。Region大小限制。.ColumnFamily级别的配置信息:TTL信息。是否启用压缩特性。数据版本数目。数据Cache策略。是否启用BloomFilter。数据块大小。.S = 5hbase create t1, NAME = f1, NAME = f2, NAME = f3hbase # The above in shornd would be the following:hbase create t1, f1, f2, f3通过hJbbaavsaeAPcrI接eat口e 建t表1:, NAME = f1, VERS = 1, TTL = 2592000,
19、BLOCKCACHE = true/ 表名hb和as列e族 名cr称eate t1, f1, SPLITS = 10, 20, 30, 40 StrinhgbatsaeblecNraemaete=tm1yT,ablfe1;, SPLITS_FILE = splits.txtString famis = f1;hbase # Optionally pre-split the tableo NUMREGIONS, usingin/ 通过已有的Configuration对象实例化一个HBaseAdm 对象HBasehAbdamsiena#dmSiPnLI=TAnLeGwO H(BaHseexASdt
20、mriinn(gcSopnlfiitg),;UniformSplit or claame)/ 表的hb描as述e信 息cr,e指at定e 表名t1、,列族f名1称, NUMREGIONS = 15, SPLITALGO = HexStringSplitHTableDescriptor tableDesc = new HTableDescriptor(tableName);tableDesc.addFamily(new HColumnDescriptor(fami/ 不预分Region建表admin.createTable(tableDesc);/ 预分Region建表的两种方式:si);/ 指
21、定起止RowKey和Region个数;此时的起始RowKey为第一个Region的endKey,结束key为最后一个Region的startKey。admin.createTable(tableDesc, Bytes.toBytes(10), Bytes.toBytes(800000), 30);/ 指定RowKey数组,不包括第一个Region的startKey和最后一个Region的endKey,因此Region个数等于数组长度+1/ 例如以下语句创建的表包括4个Region,各Region的起止key分别为,a), a,k), k,z),z,),可以看成这个Region,k属于k,z)这
22、个Region,z属于z,)这个Region。byte keys = Bytes.toBytes(a), Bytes.toBytes(k), Bytes.toBytes(z); admin.createTable(tableDesc, keys);右开区间,a属于a,k)(注:关于这些配置所涉及到的一些关键特性,这里仅仅提及,后面会展开详述)ColumnFamilyRegionRegionRegionRegion/hbase/table/region-1/ColumnFamily-1/region-1/ColumnFamily-2/region-2/ColumnFamily-1/region-
23、2/ColumnFamily-2/hbase/table/region-1/region-2/region-3/region-3/ColumnFamily-1/region-3/ColumnFamily-2HDFSColumnFamily是Region的一个物理径下面。单元。同一个Region下面的多个ColumnFamily,位于不同的路ColumnFamily信息是表级别的配置。也就是说,同一个表的多个Region,都拥有相同的ColumnFamily信息(例如,都有两个ColumnFamily,且不同Region的同一个ColumnFamily配置信息相同)思考:ColumnFamily
24、 = HBase面向列?KeyValueHFile/hbase/table/region-1/ColumnFamily-1/region-1/ColumnFamily-2/region-2/ColumnFamily-1/region-2/ColumnFamily-2/region-3/ColumnFamily-1/region-3/ColumnFamily-2HBase的底层数据都是以KeyValue的形式存在的。KeyValue具思有考特定:的格式。KeyValue中拥有时间戳、类型等关键信息。每一个Qualifier所标识的KeyValue是不是可以同一个Key值可以关联多个KeyValu
25、e,每一个KeyValue都拥认有为一是个一Q列u?al那ifi么er标,识同。一个ColumnFamily下,即使是Key值相同,Qualifier也相同的多个KeyValue,也可相能同有K多ey个值,此但时不使同用Qu时a间lif戳ie来r的区多分个,K这ey就Va是lu同e一条可以认为是多个列,那么,HBase是否还是真正的面向列?数据的多版本。HFile数据的流程:Trailer从HFile文件中Root Data IndexMeta IndexFileInfo.Leaf Data IndexLeaf Data IndexLeaf Data IndexData BlockData B
26、lockData Block思考:有没有感受到B+ Tree的?123545HBase原理概述HBase数据模HBase写流程HBase读流程HBase高级专题型涉及的关键角色RegionServerCntRegionZooKeeper客户端发起写数据请求客户端写数据代码示例:/ 初始化配置信息Configuration conf = HBaseConfiguration.create();/一行数据HTable table = new HTable(conf, tableName);Put put = newput.add(FAMI put.add(FAMI put.add(FAMIPut(
27、Bytes.toBytes(012005000201);S,S,S,Bytes.toBytes(name), Bytes.toBytes();CntBytes.toBytes(gender), Bytes.toBytes(男);Bytes.toBytes(address), Bytes.toBytes(省市);table.put(put);构建Put对象:一个Put对象代表一行数据,可以添加多个列的数据。如上例所示,RowKey为“012005000201”,包含3个列:name,gender,address。Put or PutList?HBase提供了两个主要的写数据接口,一个可以写入单行
28、数据,即Put接口,另一个可以批量写入多行数据,即PutList接口。 事实上,Put仅是PutList的一种特殊情形。因此,后面的流程介绍仅仅涉及PutList。定位RegionROOTRegionRegionLocationMETARegionUser Region数据分组整个数据分组,涉及到两步“分篮子”操作:将所有的按Region划分。 按RegionServer划将所有的分。每个RegionServer上的数据会一起发送,这样,发送的数据中,都是已经按照Region分好组了。往RegionServer发送写数据请求利用HBase自身封装的RPC框架,来完成数据发送操作。往多个Regi
29、onServer发送请求是并行操作。客户端发送完写数据请求后,会自动等待请求处理结果。如果客户端没有捕获到任何的异常,则认为所有的数据都已经被写入成功。如果全部写入失败,或者部分写入失败,客户端能够获知详细Key值列表。从这里也可以看出,PutList操作是不保证原子性的。Region写数据流程读写锁依次获取各行行锁写入到MemStore中一个内存排序集合已获取的行锁写数据到WAL中既然是Write- Ahead-Log,为何先写内存再写WAL?Region锁HBase提供了一个MVCC机制,来保障写数据阶段的数据可见性。先写MemStore再写WAL,是为了一些特殊场景下,内存中的数据能够更
30、及时的可见。如果写WAL失败的话,MemStore中的数据会被回滚。获取Region操作锁HBase LSM Tree将Put/Delete的数据暂时保存在每个Region的内存中,即MemStore中。写内存,避免多Region情形下带来的过多的分散IO操作。数据在写入到MemStore之后,也会顺序写入到HLog中,来保证数据的安全。FlushMemStore-1(ColumnFamily-1)HFileRegionMemStore-2(ColumnFamily-2)HFile存在如下两种场景,会触发一个Region的Flush操作: 该Region的MemStore的总大小,达到了预设的
31、Flush Size阈值。这种场景下的Flush操作,通常仅瞬间堵塞用户的读写操作。但如果超出预设Flush Size阈值过多的话,也可能会引起较长时间的堵塞。 RegionServer的总内存大小超出了预设的阈值大小。这种场景下,在总内存没有降低到预设的阈值以下之前,可能会较长时间堵塞。多HFile的影响随着时间的不断迁移,HFile文件数目越来越多,时延也越来越大!CompactionCompaction的主要目的,是为了减少同一个Region同一个ColumnFamily下Writeput面的小文件数目,从而的性能。FlushCompaction分为Minor、Major两类:小范围的p
32、action。有最少和HFileHFileHFileHFileHFileHFileHFile最大文件数目限制。通常会选择一些连续时间范围的小文件进行合并。Major:涉及该Region该ColumnFamily下面的所有的HFile文件。MajorMinor CompactionHFileHFileHFileCompaction过程中,会据。被删除的数Major CompactionMinor Compaction选取文件时,遵循一定的算法。HFileMemStoreSplit普通的Region Split操作,是指集群运行期间,某一个Region的数据大小Parent Region超出了预设
33、的阈值,则需要将该Region自动成为两个子Region。过程中,被的Region会暂停一些读写服务。由于过程中,父Region的数据文件并不会真正的并重写到两个子Region中,而是仅仅通过在新Region中创建文件的方式,来实现快速的。因此,Region暂停服务的时间会比较短暂。客户端侧所缓存的父Region的路由信息需要被更新。思考:普通的Region Split操作,为何仅仅将一个 Region成两个Region?能否成多个?Daughter Region-1Daughter Region-2123545HBase原理概述HBase数据模HBase写流程HBase读流程HBase高级专
34、题型Get Or ScanGetSGceatn操操作作代代码码示示例例:HTable table = null;RtreysultScanner rScanner = null; trytable = new HTable(conf, tableName);Gteatbleget= =newneHwTGaebtl(er(ocwoKnefy,.gteatbBlyetNeasm(e);/S/ca设n定s列ca族n名=和n列e名w Scan();sgceatn.asdedtCSotlaurmtnR(ofwa(misltya,rtqRuoawl)i;fier);/s/ca设n定.s列et族S名topR
35、ow(stopRow);/g/et重.要ad参dF数a:mi每ly次(RfaPmCi从l服y)务; 端取回的数 Rsecsaunl.tsetreCsauclhting=(t1a0b0l0e).;get(get);rfoScra(nnKeeyrV=altuaeblkev.g:etrSecsaunlnte.rr(aws(c)a)n);foSry(stReesmu.oltut.rpr=clann(nkevr.gneetxRto(w(); +r !=n+ull(;kv.rge=trFSacmainlnye(r).)ne+xt()+ (kv.getQualifier() + + kv.getTimest
36、() + fo+r (kKve.ygVeatlVuaelukev():+r.raw)(;) / TODOcatch (IOException e) Region/ TODOcfiatncahll(yIOException e) /i/fT(OnDuOll != table) Scanfitnraylly if (ntualblle!.c=lroSscea(n)n;er) rSccaatnncher(.IcOlEoxsce(ep)t;ion e) / TODOif(null != table) try table.close(); catch (IOException e) / TODOGet操
37、作在提确的Key值的情形下,单行用户数据Scan操作是为了批量扫描限定Key值范围内的用户数据OpenScannerColumnFamily-1CntScannerMemStore HFile-11 HFile-12 HFile-13RPCRegionColumnFamily-2MemStore HFile-21 HFile-22 HFile-23思考:一个Region可能有多个列族一个列族,可能包含有多个HFile文件,同时,OpenScanner的过程,会为MemStore,以及各个HFile创建所对应的Scanner:MemStore对应的Scanner为MemStoreScanner。
38、还有部分数据存在于MemStore中,尚未HFile对应的Scanner为StoreFileScanner。如何,才可以读到想要的用户数据?StoreFileScannerStoreFileScannerMemStoreScannerStoreScannerStoreScannerStoreScannerRegionScannerNext每一个Scanner中,都有一个指针,指Scanner A Current KeyValue: Row01,FamiA:col1Scanner B Current KeyValue: Row01,FamiB:col1Scanner C Current KeyV
39、alue: Row01,FamiC:col1Scanner D Current KeyValue: Row01,FamiD:col1向接下来要的用户数据KeyValue是哪一个。同一级的Scanner,被放在同一个优先级队列中。通过不断的对比每一个 Scanner的指针所指向的KeyValue,将这些Scanner进行排序。Scanner AFinished?YclosePollN: Put backScanner B Current KeyValue: Row01,FamiB:col1Scanner C Current KeyValue: Row01,FamiC:col1每一次next请求,
40、都是从该优先级队列中,Poll出一个Scanner,然后,读Queue取该Scanner的当前指针所指向的KeyValue即可。Finished?YclosePollN: Put back每一次读完一个Scanner,指针都会往下移一个KeyValue。而后,该 Scanner被返还到队列中。如果已经读完,则直接关闭。Scanner B Current KeyValue: Row01,FamiB:col1Scanner C Current KeyValue: Row01,FamiC:col1Scanner D Current KeyValue: Row01,FamiD:col1Scanner
41、A Current KeyValue: Row02,FamiA:col1nextScanner AScanner D Current KeyValue: Row01,FamiD:col1Scanner A Current KeyValue: Row01,FamiA:col2nextFilterScan过程中使用Filter代码示例:Scan s = new Scan();/ 前缀过滤器,查找RowKey以“132”开头的行s.setFilter(new PrefixFilter(Bytes.toBytes(132);/ 查找符合条件的6行数据s.FsieltteFri允l许te在r(Sncae
42、g中e,Fi设lt定e一r(定6)的)过; 滤条件。符合条件的用户数据才返回。/ 当多前个包过含滤的器一结些合典使型用的Filter有:FilterList list = new FilterList(Operator.MUST_PASS_ALL);liRsotw.aFdildteFrilter(newSingleColumnValueFilter(family,SinqguleaCloilfuimenrV,alueFilterCompareOp.EQUAL, value);liKsety.OadndlyFFiilltetrer(negeFilter(6);s.FsieltteFrLiilst
43、ter(list);.使用Filter时,可能会扫描大量的用户数据,才可以找到所期望的满足条件的数据。因此,一些场景下的性能是不可预估的。Satisfied RowSatisfied RowSatisfied RowBloomFilterBloomFilter被用来优化一些随机的场景,即Get场景。 它可以被用来快速的判断一条用户数据在一个大的数据集合(该数据集合的大部分数据都没法被加载到内存是否存在。数据写入阶段,对用户数据进行N次Hash,并且将到的对应的位改为1右图给出了BloomFilter的基础原理。BloomFilter在判断一个数据是否存在时,拥有一定的误判率。但对于“用户数据信
44、的。X不存在” 的判断结果是可HBase的BloomFilter的相关数据,被保存在HFile中。数据阶段,对用户数据进行N次Hash,判断对应的位是否为1123545HBase原理概述HBase数据模HBase写流程HBase读流程HBase高级专题型RowKey设计一个典型的场景: UserID放前面?还是Date放前面?0109021003110412051306140715081601090210031104120513061407150816活跃Region不活跃Region,即当前不会再被写入数据的 Region即当前可被写入数 RegionRowKey Format: UserI
45、D + DateRowKey Format: Date + UserIDUserID放前面,则所有的数据按UserID组织在一起。查找同一个User的数据,就会非常的快速。UserID放前面,带来的一个缺点是:任何时刻,所有的Region都可能是活跃的。Region数目持续增长,而总内存资源是有限的,会导致Flush频率过高,并且会产生过多的小文件。而Date放前面,固然可以有效的限制活跃Region的数目,但基于某一个UserID的查询,性能却会变慢。每种方案都有明显的优缺点,因此,需要根据业务场景进行权衡。RowKeyValueDate140101User01*Date140101User
46、03,*能会Date140201User02据的*Date140202User02*Date140401User04*Date140501User05*Date140501User06*Date140501User07*Date140601User06*Date140602User06*RowKeyValueUser01Date140101*User02Date140201*User02Date140202*User03Date140101*User04Date140401*User05Date140501*User06Date140501*User06Date140601*User06Dat
47、e140602*User07Date140501*列族与列设计/hbase/table/region-1/ColumnFamily-1/region-1/ColumnFamily-2回顾: 每一个列族,在Region中,都是一个单独的路径。 一个列族下的多个HFile文件,会在 Major Compaction的时候,被合并成一个大的HFile文件。HFile/region-2/ColumnFamily-1/region-2/ColumnFamily-2HFile思考:在什么样的场景下,考虑使用多列族?/region-3/ColumnFamily-1/region-3/ColumnFamily
48、-2回顾:HFile由KeyValue组成,KeyValue拥有特定的结构,并且会有一定的结构化开销。同一个Key值,可以关联多个KeyValue,使用不同的Qualifier来标识。Key-01Key-01Key-01Value-ID01Value-Name01Value-Phone01HFile同Key,同Qualifier的多个KeyValue,使用时间戳来标识。同一个Key,关联的多个KeyValue,可以理一行数据的多个列。与关系型数据库类似,但又不尽相同。思考:是否可以完全按照关系型数据库的设计列的观点,来设计HBase的列(Qualifier)?Secondary Index-W
49、hy Secondary Index?按照RowKey字典顺序存放,按照某个RowKey也可以快速定位到想要获取的数据如果按照某一个列的条件进行查询呢?需要一行行的扫描,匹配,获取想要的数据Secondary IndexAndy-009 Angle-005 Holiday-007 Jeason-008:Lily-003用户Region与索引ReLgucicoyn-0绑04定,生成索引数据对实时Rowkey(ID) Angle005Rowkey(ID) 005F:Namele-006Angl写e入的影响相对较小005Anglele-011方案优点:Holiday007006le006l方e案缺点
50、:Index RegionJeason008数据按索引字段全部排序0,07查询性能Ho高lid。ay 并且随着数据007HolidayJeaso按n 索引字段进行查询时,需要所有的索引Region,le006008008Jeason多,查询时延量无的保不障断。增长,性能几乎无U影se响r R。egion随着数据量和RegIndex RegionUser Region方案缺点:Rowkey(ID) Andy009Rowkey(ID) 009F:Name AndyRowkey(ID)F:Name生成索引数据对实时写入0的09影响较大A。ndy010SuccyleSiky012 Succy01001
51、0011SuccyIndex Region011lele011012Siky012SikyUser RegionUserTableUser RegionIndex RegionIndexTableIndexTableUserTableioRnow数ke目y(N的am不e)断增Siky-012Succy-010Susan-001Rowkey(ID)F:NameRowkey(Name)Andy-001User Region 方案优点Rowkey(ID)F:Name001Susan002Andy003Lily004LuccyIndex RegionRowkey(ID)Andy002Susan001L
52、ily003Luccy004User RegionRowkey(ID)F:Name001Susan002Andy003Lily004LuccyReplication依赖于HLog以Push方式,由主集群主动写入备集群。以RegionServer为执行,每个RegionServer负责把自己的HLog同步到备集群。原子操作数据为WALEdits, 保证数据同步的原子性。异步操作,允许备集群有短暂故障,不影响主集群的数据的同步 。依赖于HLog以Push方式,由主集群主动写入备集群;以RegionServer为执行,每个 RegionServer负责把自己的HLog同步到备集群;原子操作数据为WA
53、LEdits, 保证数据同步的原子性;异步操作,允许备集群有短暂故障,不影响主集群的数据的同步Backup/Restore可恢复到任意点第四周月初第二周第三周增量备份全备份支持全量/增量两种备份模式。可以从已备份的数据中,指定恢复到任意时间点。基于MR实现。Backup IncBackup IncBackup FullBackup FullZooKeeperT1T2ExportHFileHFileSequenceFileMapReduceT4T3HFileHFile第介质HBaseHDFSBulkLoadMap阶段,源数据文件,转换。DataFileDataFileDataFileDataFi
54、leMap后的结果,经过Shuffle And Sort阶段后,分配给相应的Reduce。每一个Reduce对应一个Region,即对应一个Key值区间。Reduce阶段直接生成对应Region的HFile文件,通常,一个Region只产生一个HFile文件,除非该日志文件超出了预设的阈值大小。MapMapMapMapReduceReduceReduceHFileHFileHFileShuffle And SortCTBaseCTBase是构建于HBase之上的一个应用,它通过对HBase的原生态API进行重新封装,实现了一种基于HBase之上的聚簇表/聚簇索引框架。它可以将现有数据库中的多个
55、具有相似功能或者存在业务关联的数据表聚簇到一个HBase大表中,从层面确保在关键场景下的跨表关联查询的高性能。同时它还提供了二级索引,数据列定义,RowKeySchema定义等功能及配套的可视化理界面。管将多个具有类似功能或存在关联的业务表聚簇到一个HBase大表中。为用户表提供二级索引功能。可实现简单的多表关联查询能力。Q&A感谢各位、的指导!附录:HBase的主要接口及代码示例!HBase的接口客户端使用主要方式:HBase S其余接口:REST 接口 REST(Represen转移接口。Thrift接口HBaseional Se Transfer)表述性状态令行工具,最简单的接口,适合H
56、Base管理使用。Java APIHBase客户端程序通过底层RPC接口与HBase集群进行通信,客户程序直接集成HBase的Java包,通过调用相关API即可完成操作。Thrift 是一个基于静态代码生成的跨语言的RPC协议栈实现,它可以生成包括C+, Java, Ruby,等主流语言的代码,这些代码实现了 RPC 的协议层和传输层功能,从而让用户可以集中精力于服务的调用Avro接口。Avro是一个数据序列化系统,设计用于支持大批量数据交换的应用。HBase S通过/hbase s来连接正在运行的HBase S客户端用法:# .bin/hbasesHBase S;enter help for
57、 list of supportedds.Type exit to leave the HBase SVer0.94.0, r, Sun Aug 26 22:12:56 CST 2012hbase(main):001:0创建表创建表时,可以选择多个参数,但表名和列族名是必须的参数,其它参数还包括版本数、TTL以及预分Region建表的key数组等用法:hbase hbase hbase hbase hbase hbase hbase hbase hbasehbasecreate t1, NAME =create t1, NAME = # The above in shorf1, VERS =
58、5f1, NAME = f2, NAME = f3nd would be the following:create create createcreatet1,t1,t1,t1,f1,NAMEf1,f1,f2, f3= f1, VERS = 1, TTL = 2592000, BLOCKCACHE= trueSPLITS = 10, 20, 30, 40SPLITS_FILE = splits.txt# Optionallypre-split the tableo NUMREGIONS, using# SPLITALGO (HexStringSplit, UniformSplit or cla
59、ame)create t1, f1, NUMREGIONS = 15, SPLITALGO = HexStringSplitPut数据时,必选参数是表名、RowKey、列名(包括列族和列名)和值,可选参数包括时间戳用法:hbase put t1, r1, c1, value, ts1例如,向表test中put三条数据,并通过count命令计算test表中的数据的条数示例:/向表test中put数据,RowKey为rowkey1,列族名为cf,列名为qualifier1,值为value1hbase(main):002:0 0 row(s) in 0.5940 hbase(main):003:0
60、0 row(s) in 0.0080/指定时间戳为3hbase(main):011:0 0 row(s) in 0.0510 hbase(main):013:03 row(s) in 0.0160put test,rowkey1,cf:qualifier1,value1 secondsput test,rowkey2,cf:qualifier2,value2secondsput test,rowkey3,cf:qualifier3,value3,3 secondscount testseconds一行数据 Put一行数据 Get查询一行数据时,必选参数是表名和RowKey,可选参数包括列名(包
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于2025年度市场调研数据之分析报告保密协议2篇
- 二零二五年度工厂搬迁及设施重建合同3篇
- 2024网络安全保障服务外包合同
- 2025年度抵押借款房屋租赁期满续约合同示范4篇
- 二零二五版校企合作实习实训基地安全教育与保障协议3篇
- 2025年销售渠道拓展劳动合同标准范本3篇
- 2025年度个人买卖房屋交易税费结算及支付合同4篇
- 2025年度美容院连锁经营合作协议范本3篇
- 长沙航空职业技术学院《童话名篇研读》2023-2024学年第一学期期末试卷
- 个人二手物品交易平台服务协议(2024版)3篇
- 2024年采购代发货合作协议范本
- 工业自动化设备维护保养指南
- 《向心力》参考课件4
- 2024至2030年中国膨润土行业投资战略分析及发展前景研究报告
- 【地理】地图的选择和应用(分层练) 2024-2025学年七年级地理上册同步备课系列(人教版)
- (正式版)CB∕T 4552-2024 船舶行业企业安全生产文件编制和管理规定
- JBT 14588-2023 激光加工镜头 (正式版)
- 2024年四川省成都市树德实验中学物理八年级下册期末质量检测试题含解析
- 廉洁应征承诺书
- 2023年四川省成都市中考物理试卷真题(含答案)
- 泵车述职报告
评论
0/150
提交评论