HBase表设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1HBase表设计HBase表结构逻辑图2HBase基础•表记录按RowKey字典序存储•表schema只定义到columnfamily级别属性–每个columnfamily可以有任意多个column–每个column有可以有任意多个版本(version)的数据–Column只有在有赋值时才被真正存储,NULL值无存储消耗–一个columnfamily内的column统一存储并排序–除表名外所有数据皆为无类型数据(byte数组)3课程使用概念解释【Cell】(Table,Row,Family:Column,Timestamp),Value【Key】–RowKey(RK)–ColumnKey(CK)–ColumnFamily(CF)+Qualifier(Column)4KeyValue剖析KeyValue(KV)为HBase中基本数据类型,其内部存储结构为:•Keylength•Valuelength•Key–Rowlength–RowKey(RK)–CFlength–CF–Qualifier–TimeStamp–Keytype•Value•HBase数据结构设计就是定义和设计KV的各个域5HBase数据模型6Key粒度及性能7Key对数据查询的影响•使用RowKey进行查询的性能最好•指定Timestamp能减少storefile级别的读操作–BloomFilter也能达到同样目的•选择指定的columnfamily可以减少查询需要读取的数据量•简单的纯基于filter的值查找是一个全表扫描操作–但使用filter可以减少网络传输数据量8说明本课程所教授的观点是普式的设计理念而不是标准定律9HBase表设计TableRowKeyColumnFamilyColumnValueTimeStamp10HBase表的特点•没有二级索引•没有外键等跨表数据引用支持•没有级联数据修改支持•没有…•HBase表的设计哲学:–将数据联系限制在表级别范围以内–CAP原理11关系型数据库中的数据模型12NoSQL数据库的典型数据模型(muddle)•将所有数据关系放在一行宽记录中存储13HBase表设计TableRowKeyColumnFamilyColumnValueTimeStamp14RowKey•为什么说RowKey是影响HBase性能的最主要因素?–理解一下传统关系型数据库中的索引和查询计划对性能的影响–HBase中数据查询的性能比较:•Get基于RowKey范围的scan全表scan–一个Region的范围是由一对Start/EndRowKey决定的•从而间接决定了每个region的记录条数和数据大小–HBase没有二级索引等其他非RK索引15行记录设计•采用多行存储还是单行多列存储?•将数据另存储为一行还是”覆盖”存储为列(Column)的不同版本•将数据另存储为一行还是增加一个列•建议•通常情况下的回答:分行存储»能获得更好的Get以及scan的性能»太长的行记录不利于做Region的split•行设计必须符合数据原子性操作要求»HBase只保证行级别数据的原子性操作16RowKey设计•RowKey的组成元素•尽量将所有常用查询所使用的域放入RK»优先使用RKfilter,其次使用valuefilter•保持RK值得唯一性(添加序列号)•RK长度越短越好(通用数据定义规则,适用于其他)»考虑KeyValue的物理存储规则•一般建议RK长度50B•RK的设计首要考虑便于能将最常用的查询转化为HBase的get或者基于RK范围的scan操作•最重要的域放在首位,依次…17RowKey存储设计•值定义:–按字符值存储vs.按二进制值存储?–字符串表示更便于HBase自带工具显示–用字符串表示+分隔符便于使用HIVE–将值对齐•正确的排序–字典序:1,10,11,2,3,…–对齐后的字典序:01,02,03,…,09,10,11•便于使用FuzzyFilter等作查询过滤18单调递增序列数据/时间序列数据•RK=timeother-keys•不好!•单Region成热点Region•解决方案:•为单调值添加Hash函数使其分布平均,具体Hash方法包括–基于节点信息等静态配置信息(静态Hash)–基于其他数据信息,如其他key值(动态Hash)–直接使用RowKeyHash值(Random)–值交织(Interwave)19静态Hash•RK=prefix时间值other-key•Prefix的来源可以是:»集群节点信息,如prefix=time%region-number»客户端信息,如prefix=client-no»其他静态信息•优点:•实现相对简单•并行化操作,增加了读写操作的IO带宽•易于应用控制region的split•缺点:•不适合Hash的静态来源信息变更•并发服务以及吞吐量下降20静态Hash•适用场景:•数据分布静态无变化的业务•举例:–某公司离线信令日志分析系统•需求–原始数据为来源为N个客户端,内容为该客户端信令日志数据,数据量分布平均–离线导入数据,并执行后台MapReduce任务进行分析•RK设计–客户端ID(取值1-N)+通话开始时间+…21动态Hash•RK=key1timeother-key2•Prefix来源自另外一个key1的值或者部分值,如用户id等•优点:•当查询条件带key1时此方法性能最好•并行化操作,增加了读写操作的IO带宽•适合key1自然分组或恒定有限值的场景•缺点:•当查询条件没有key1时的scan困难•Applicationmayaware•当key1的值分布变化时可能造成数据倾斜22动态Hash•适用场景:•key1自然分组或恒定有限值的业务•举例:–某电信公司用户通话记录查询系统•需求–原始数据为用户通话日志记录,包括电话号码,通话开始时间,结束时间等–要求用户使用网页查询,输入电话号码和查询时间区间,快速返回满足条件的所有通话记录•RK设计–用户电话号码+通话开始时间+…23Random•RK=时间hash值other-key•时间hash值可以基于时间的MD5等,•或者时间的全部或部分反序表示,如用“65:03:4103-21-2102”代表“2012-12-0314:30:56”•优点:•数据读写分布平均•精确时间查询性能好•实现简单•缺点:•不能进行基于时间区间的查询24Random•适用场景:•仅关注时间序触发的高并发应用•举例:–某系统流处理系统•需求–原始数据为用户通话日志记录,包括电话号码,通话开始时间,结束时间等,固定缓存保留2周数据–后端固定N台服务器做并发流处理•RK设计–随机值(取值1-N)+时间25值交织•RK=部分时间1other-key部分时间2…•举例:年+月+日+地区+小时+业务类型+分钟+…•优点:•适合包含非精确时间的模糊查询•与动态Hash类似•缺点:•实现复杂•通用性差,设计及实现依赖具体业务场景26值交织•适用场景:•适合包含非精确时间的模糊查询•举例:–某公司文档归档信息系统•需求–原始数据为业务文档,包括业务时间、详细区域、类型等文档信息–用户只能查询限定区域限定类型文档的搜索,通常查询方式为模糊查询,缺省搜索时间为一个天•RK设计–年+月+日+区域前缀+文档类型+时+分+秒+…27读写性能比较*28技巧:时间倒序•很多场景下用户最关心最近的数据,查询返回结果要求俺时间倒序返回,最新的数据最先返回•解决方案:使用时间倒值,如•Long.MAX_VALUE-时间毫秒数表示•按每字符取反,如“2099/12/31”-时间日期字符串表示29技巧:多字段模糊查找•用户可能给出多个字段的前缀信息,进行模糊查询,如:–数据结构:»User=groupuid»Location=cityroadlid–查询方式:group+city+…•解决方案:跨域值交织RowKey:•RK=groupcityroaduidlid30HBase表设计TableRowKeyColumnFamilyColumnValueTimeStamp31CF物理模型•不同CF的数据存储于不同的文件•隔离各CF的读写操作•允许不同的CF使用不同的压缩方式和数据复制策略•不同的CF的Region边界相同,使用同样的Start/EndRK•如果某一CF的数据量操作上限,所有的CF都将做regionsplit,从而造成小数据量的CF的记录可能过度分割»利于提高并发•IDH2.3的LOB功能解决了长字段的存储问题•记录在同CF的文件内部严格有序存放32CF设计•按数据内容类型划分•不同重要程度的数据使用不用的复制策略•按访问的不同模式划分•将不同访问频率的数据分CF存放,如文件的结构化Meta信息和文件的内容•按CF实现不同的访问控制策略?•将CF的数目控制在最少•节省底层资源,如文件句柄等•获得更好的HBase操作性能•一般情况,CF的数目不应多余3个33CF设计举例•使用CF实现分表•使用CF实现二级索引34HBase表设计TableRowKeyColumnFamilyColumnValueTimeStamp35Column•单列存储vs.多列存储?–性能要求•经验数据:相同数据集下,单列存储比用10个列存储性能提高2倍–查询或运算需求•全文检索字段•Filter实现限制–新增列实现向下数据类型兼容•可使用标示符作为列名36HBase表设计TableRowKeyColumnFamilyColumnValueTimeStamp37Value•存储方式选择:文本值vs.二进制值•调试需求vs.存储容量*•一般推荐:文本值+压缩•数据长度对齐?•字段排序/查找性能vs.存储容量•值分隔方式?•HIVE现有限制:文本单字符分隔+文本值存储38HBase表设计TableRowKeyColumnFamilyColumnValueTimeStamp39TimeStamp•Timestamp在调试中有重要的意义,一般建议只用作数据管理目的,上层应用不要随意指定/篡改此字段•勿用作应用记录中的时间字段•勿做其他tricky用途•特殊应用举例:•将Timestamp设置到未来时间,实现定时数据更新–如:某购物网站将打折物品信息按未来的活动开始时间做Timestamp存储,这样用户在该时间以后的查询就自动能获得最新打折信息•将Timestamp设置到MaxValue-1,实现数据隐藏40扩展内容•Table其他Schema属性–压缩策略(Compress)–复制策略(Replica)–单Region最大数据量(Maxfilesize)–Bloomfilter–…•运维相关设计–手工预分配regionrange–Regioncompaction策略–…课程总结•Checklist:–读写操作性能要求(forRK)•实时性、并发要求…–原子性操作要求(forRK)–数据内容类型(forCF)•数据复制策略、访问控制等–其他第三方软件要求(forColumnandValue)•HIVE,Flume….42参考链接•HBase–TheDefinitiveGuide•TheApacheHBaseReferenceGuide43

1 / 43
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功