




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、大数据技术基础培训1HBase 技术介绍Hbase介绍Hbase是什么?Hadoop数据库?Key-Value存储?面向列族的数据库?可以随机访问的存储和检索数据的平台起源Google发表Google文件系统(GFS)、MapReduce、BigTableLucene - Nutch - Hadoop - HbaseHbase版本发展2007.4 第一个版本(HBASE-287 Mike Cafarella)2010.10 0.89(Facebook的生产版本)2012.1 0.92(Adds 安全,协处理器,HFile V2,分布式log-Splitting)2012.5 0.94(Perf
2、ormance Release),目前是主流版本。2013.10 0.96(支持hadoop 2.0、JDK7,添加 protobuf,Table Snapshot,PrefixTreeCompression等等)Transwarp版本 基于0.94.11Hbase应用场景互联网搜索(爬虫收集网页到BigTable)抓取增量数据OpenTSDB计数器内容服务URL短链接信息交换FaceBook短信系统56Hbase数据模型7Hbase数据模型8Hbase数据模型9Hbase数据模型10Hbase数据模型11Hbase数据模型12Hbase数据模型Hbase数据模型数据可以通过column fa
3、mily进行分割一个表由多个region组成每一个region都有指定的start key 和 end key每一个region底层是存储在HDFS上的一个或多个文件组成(HFile)13Hbase数据模型14Hbase数据模型所有值都会存储完整的坐标值,包括Row Key、Column Family、 Column Qualifier and Timestamp每一个Cell(column)都是一行不同version是均是一行Null值不占用空间,因为不会被存储15HBase架构1617关系数据库中的B+树关系数据库中常用B+树组织数据如上图所示,内部节点已经存满,再插入一个新记录时,需要在
4、B+树中插入一个新的内部节点,再链到B+树中这里的问题是新的内部节点在磁盘上可能存放在很远的地方,在顺序扫描数据时,不得不seek磁盘Log-Structured Merge-Treesinsert/update写入log后,再写入内存(memory store)memory store写满后,flush到磁盘上后台进程/线程对磁盘上多个文件进行合并,组成排序后的B+树,同时处理删除、更新、TTL等查询时先查内存中的数据,再查磁盘18Seek vs TransferComplexity:B+ tree operates at the disk seek rate, resulting in l
5、og(N) seeks per access.LSM-trees, sorts and merges files while operating at transfer rates, and takes log(updates) operationsGiven these numbers: 10 MB/second transfer bandwidth 10 milliseconds disk seek time 100 bytes per entry (10 billion entries) 10 KB per page (1 billion pages)When updating 1% o
6、f entries (100,000,000), it takes: 1,000 days with random B-tree updates 100 days with batched B-tree updates 1 day with sort and merge1920Seek Versus Sort and Merge in NumbersFor our large-scale scenarios, computation is dominated by disk transfers. Although CPU, RAM, and disk size double every 182
7、4 months, seek time remains nearly constant at around a 5% increase in speed per year.As discussed at the beginning of this chapter, there are two different database paradigms: one is seek and the other is transfer. Seek is typically found in RDBMSes and is caused by the B-tree or B+ tree structures
8、 used to store the data. It operates at the disk seek rate, resulting in log(N) seeks per access.Transfer, on the other hand, as used by LSM-trees, sorts and merges files while operating at transfer rates, and takes log(updates) operations. This results in the following comparison given these values
9、: 10 MB/second transfer bandwidth 10 milliseconds disk seek time 100 bytes per entry (10 billion entries) 10 KB per page (1 billion pages)When updating 1% of entries (100,000,000), it takes: 1,000 days with random B-tree updates 100 days with batched B-tree updates 1 day with sort and mergeWe can sa
10、fely conclude that, at scale seek, is inefficient compared to transfer.Hbase架构21HMaster处理表的创建、删除、修改等操作分配region到region server上负载均衡各个region server上的region维护集群状态通过zookeeper监控状态、协调操作不提供数据服务Region Server处理region所有的读写操作直接与client进行数据通信控制region的分割对region进行compact操作在运行中可以动态添加、删除22HBase 组件交互HMasterRegionServe
11、rRegion1Region4RegionServerRegion3Region5RegionServerRegion2Region6ClientMetadata ops (create table, )Read/WriteRegion assignment and load balancingMasterSlavesHbase架构region定位 .META.:记录了用户表的Region信息,.META.可以有多个regoin -ROOT-:记录了.META.表的Region信息,-ROOT-只有一个regionZookeeper中记录了-ROOT-表的location最新版本已经没有-RO
12、OT-23Hbase架构数据流24Hbase架构读取定位对应的region所在的region serverBlockCacheHFileMemStore25Hbase架构插入定位对应的region所在的region server将Put、Delete等操作写入预写日志WAL预写日志写完后将数据写入MemStore当MemStore中的数据达到一定阈值时,将数据以Hfile的形式保存到HDFS中不会阻塞其他读写操作多个Column Family?26Hbase架构插入定位对应的region所在的region server将Put、Delete等操作写入预写日志WAL预写日志写完后将数据写入Mem
13、Store当MemStore中的数据达到一定阈值时,将数据以Hfile的形式保存到HDFS中不会阻塞其他读写操作多个Column Family?27Hbase CompactionCompaction是将HFile合并的机制Minor Compaction将多个小文件合并成一个文件Major Compaction将所有文件合并成一个文件处理delete marker,真正删除文件删除多余的版本数据默认每个region一天触发一次28Hbase Splitting当region的数据过大时,就会触发splitting操作使用middle key分割成两个相邻的region可以手动触发Splitt
14、ing的速度很快只是创建现有Hfile的引用文件,并未直接将文件分割开只有当触发过compaction时才真正重写数据思考题:何时删除父region的数据?29Auto shardingHBase MemStore性能相关参数hbase.hregion.memstore.flush.size 134217728(128M)base.regionserver.global.memstore.lowerLimit 0.35当MemsStore所占内存超过该比例强制flush hbase.regionserver.global.memstore.upperLimit 0.4阻塞插入操作hbase.h
15、region.memstore.block.multiplier 2当一个region的MemStore的大小达到flush阈值的2倍时,该region的写操作被阻塞31Hbase数据localityRegionServer与Datanode部署在同一台服务器上新插入的数据优先在本地磁盘(HDFS保证)动态locality读本地文件(HDFS short circuit)Hbase表结构设计33Hbase表结构设计使用row key 查询的时候可以获得最佳的查询性能选定时间(timestamp)范围,在有些时候能够略过一些文件指定column family 能够有效的减少被扫描的数据指定col
16、umn qualifier可以减少网络传输,但不会减少硬盘IO大部分情况下,使用filter对值进行过滤的查询都是全表扫描虽然全表,但是网络传输会降低34Hbase表结构设计查询性能好的关键?RDBMS为什么快?Column的索引合理的query planHbase没有怎么办?充分利用row key 和 column的排序反规范化、复制反规范化 替代Join操作复制 为读优化3536Hbase表结构设计顺序RowKey: CF: CQ: TS: Val 最新的Region会成为写入热点:写入性能非常糟糕!相反,我们可以这么做:加盐值在前面加一些离散值相当于分桶,不同的桶在不同的region上K
17、ey field换位把移到rowkey的中间或者后面随机Key在rowkey中去除Salting 在rowkey加前缀来使数据分散 使用常见的值或者数字作为前缀 使用求模的方式来使数据分散 使常用的的数据紧跟在后面,已方便查找或者用mapreduce处理0_rowkey1, 1_rowkey2, 2_rowkey30_rowkey4, 1_rowkey5, 2_rowkey6数据会先按前缀排序0_rowkey10_rowkey41_rowkey21_rowkey5 Hashing vs. Sequential Keys使用哈希值可以获得最好的分散性Uses hashes for best sp
18、read 使用MD5来对用户ID进行运算Key = MD5(customerID) 对于customerID的区间进行扫描会有反作用 使用sequential keys可以获得一些本地性 可以充分利用block caches 可能会过度使用单台服务器,通过salting或者split region来保证region在一个较小的状态顺序RowKey: CF: CQ: TS: Val 最新的Region会成为写入热点:写入性能非常糟糕!相反,我们可以这么做:加盐值在前面加一些离散值相当于分桶,不同的桶在不同的region上Key field换位把移到rowkey的中间或者后面随机Key在rowke
19、y中去除Salting Prefix row keys to gain spread Use well known or numbered prefixes Use modulo to spread across servers Enforce common data stay close to each other for subsequent scanning or MapReduce processing0_rowkey1, 1_rowkey2, 2_rowkey30_rowkey4, 1_rowkey5, 2_rowkey6Sorted by prefix first0_rowkey1
20、0_rowkey41_rowkey21_rowkey5 Hashing vs. Sequential KeysUses hashes for best spread Use for example MD5 to be able to recreate key Key = MD5(customerID) Counter productive for range scans Use sequential keys for locality Makes use of block caches May tax one server overly, may be avoided by salting o
21、r splitting regions while keeping them smallHbase表列族高级配置数据块大小非HDFS Block,默认65536(64K)数据块小,索引大随机查找性能、顺序扫面性能数据块缓存是否把数据放进内存,对于只进行顺序扫描或很少使用的表可以关闭内存表LRU缓存的优先级高布隆过滤器(Bloom Filter)ROW,ROWCOL生存时间(TTL)压缩Block Encoding (PREFIX、DIFF、FAST DIFF)单元时间版本Hbase表结构设计实例熟悉的数据建模工具E-R图Hbase表结构设计实例演唱会Hbase表结构设计实例传统数据库就从规范化
22、数据模型开始实体 表格属性 列关联 外键多对多关联 联接表Hbase表结构设计实例这些都有了是不是就够了?如果数据是GB级别的?如果是TB级别的?Hbase表结构设计实例在Hbase中 E-R图怎么映射?实体 表?不一定 ! !属性 ?HBase表结构设计实例属性的顺序没有关系有些属性具有辨识性主键 ? 乐队HBase表结构设计实例不存在唯一键? 联合主键问题?顺序?长度?拼接方式?固定长度分隔符其它序列化(Avro等)HBase表结构设计实例增加属性类型不是必要Hbase没有类型(暂时)可以帮助思考排序问题HBase表结构设计实例还没讨论关联!HBase没有外键不支持JOIN没有索引不支持事
23、务(只支持行级事务)Hbase表结构设计实例如何处理Join?自己处理(应用程序)反规范化( Denormalizing )将两个逻辑实体用一个物理实体来展现Hbase表结构设计实例试试常规的反规范化尝试将信息整合到Band中有点难以接受,从Show入手也是一样,换个方式Hbase表结构设计实例试试整合进联接表似乎能够用了Hbase表结构设计实例在HBase中列和传统数据库不同列可以动态增加的新插入的数据不需要是一个指定的类型甚至它不需要是一个列!Hbase表结构设计实例现在试试 把show放入bandHbase不限制你怎么做只需要你的应用知道如何处理Hbase表结构设计实例等等, show也
24、是一个实体,应该有它的属性将nested entity再细分一下有辨识性的的属性可以作为Column Qualifier其他属性则可以组合在value中Hbase表结构设计实例刚才将show放入了band可以放入其它信息么?比如乐队成员?qualifier starts with:s + show_ida + album_idm + nameHbase表结构设计一些建议宗旨为读做优化根据数据访问方式来决定key的类型利用column family分割数据将数据组合在一起(替代join)尽量只是用一个读操作完成一个请求(至少要做到尽可能少)避免热点顺序的rowkey可以使用bulkload来进行
25、插入预分配region60Hbase表结构设计实例上网日志URL短链接微博粉丝关系私信的全文检索其它?HBase ShellHBase Shell is 在(J)Ruby的IRB的基础上加上了HBase的命令。任何你可以在IRB里做的事情都可在在HBase Shell中做。你可以这样来运行HBase Shell: $ ./bin/hbase shell输入 help 就会返回Shell的命令列表和选项。可以看看在Help文档尾部的关于如何输入变量和选项。创建一个名为 test 的表,这个表只有一个 列族 为 cf。 hbase(main):003:0 create test, cf可以列出所有
26、的表来检查创建情况。 hbase(main):003:0 list插入 hbase(main):004:0 put test, row1, cf:a, value1Scan这个表 hbase(main):007:0 scan testGet一行 hbase(main):008:0 get test, row1删除表 hbase(main):012:0 disable test 0 row(s) in 1.0930 seconds hbase(main):013:0 drop test 0 row(s) in 0.0770 seconds HBase APIpublic void createT
27、able(HTableDescriptor desc) 创建表api,通过HBaseAdmin对象来操作的,HBaseAdmin提供了createTable这个方法。HTableDescriptor 代表的是表的schemapublic void addFamily(final HColumnDescriptor family) 增加family通过 addFamily方法。HBaseAdmin hAdmin = new HBaseAdmin(hbaseConfig);HTableDescriptor t = new HTableDescriptor(tableName);HColumnDes
28、criptor cf1 = new HColumnDescriptor(f1);cf1.setBlocksize(65536);cf1.setMaxVersions(1);cf1.setBloomFilterType(BloomType.ROW);cf1.setCompressionType(Algorithm.SNAPPY);cf1.setDataBlockEncoding(DataBlockEncoding.PREFIX);cf1.setTimeToLive(36000);cf1.setInMemory(false);t.addFamily(cf1); hAdmin.createTable
29、(t);HBase APIHTable通过put方法来插入数据。可以传递单个批Put对象 public void put(final Put put) throws IOExceptionList put对象批量插入 public void put(final List puts) throws IOExceptionHbase 插入HTable table = new HTable(hbaseConfig, tableName);table.setAutoFlush(autoFlush);/设置是否自动flushList lp = new ArrayList(); int count = 1
30、0000; byte buffer = new byte1024; Random r = new Random();for (int i = 1; i = count; +i) Put p = new Put(String.format(“row%09d”,i).getBytes(); r.nextBytes(buffer); p.add(“f1.getBytes(), null, buffer); p.add(“f2.getBytes(), null, buffer); p.setWriteToWAL(wal); /设置是否写入WAL lp.add(p); if(i%1000=0) tabl
31、e.put(lp); lp.clear(); HBase API删除表也是通过HBaseAdmin来操作,删除表之前首先要disable表。这是一个比较耗时的操作,所以不建议频繁删除表。Example:HBaseAdmin hAdmin = new HBaseAdmin(hbaseConfig);if (hAdmin.tableExists(tableName) hAdmin.disableTable(tableName);/Disable 表,不再提供读写 hAdmin.deleteTable(tableName);/删除数据文件HBase APIHBase的查询通过扫描和过滤来得到相关记录
32、返回的记录是排好序的设计一个好的行键来匹配访问模式扫描器缓存的值决定了客户端对HBase的RPC调用在扫描整张表后返回的行数缓存一次RPC获取的行数Scan.setCaching(int)配置hbase.client.scanner.cachingHBase API单条查询是通过rowkey在table中查询某一行的数据。HTable提供了get方法来完成单条查询。 public Result get(final Get get)批量查询是通过制定一段rowkey的范围来查询。HTable提供了个getScanner方法来完成批量查询。public ResultScanner getScann
33、er(final Scan scan)Scan s = new Scan();s.setMaxVersions(3);ResultScanner ss = table.getScanner(s);for(Result r:ss) System.out.println(new String(r.getRow(); for(KeyValue kv:r.raw() System.out.println(new String(kv.getColumn(); Hbase Filter过滤器是在HBase服务器端上执行判断操作过滤器可以应用到行键(RowFilter),列限定符(QualifierFilt
34、er)或者数据值(ValueFilter)过滤器允许对数据分页处理(PageFilter),限制扫描器返回行数FilterList可以组合使用多个FilterHbase Filter 接口说明重置filter状态 reset()在过滤器中构建逻辑来提早停止一次扫描: boolean filterAllRemaining()基于行键执行过滤 boolean filterRowKey(byte buffer, int offset ,int length)如果该行没有在上一步被过滤掉,接着调用这个方法处理当前行的每个keyvalue对象 ReturnCode filterKeyValue(KeyV
35、alue v)变换KeyValue (eg:KeyOnlyFilter) transform(KeyValue v)过滤掉keyvalue后,调用: (eg:DependentColumnFilter) void filterRow(List kvs)最后是否选择过滤掉某些行:(eg:SingleColumnValueFilter) boolean filterRow()Hbase Filter接口说明ReturnCodeINCLUDE 包含这个CellINCLUDE_AND_NEXT_COL 包含这个Cell并跳过老版本SKIP 跳过这个cellNEXT_COL 跳转到下一个columnNE
36、XT_ROW 跳转到下一行SEEK_NEXT_USING_HINT Seek到下一个Hint值KeyValue getNextKeyHint(KeyValue currentKeyValue) 根据现在的KeyValue构造下一个可能的KeyValueHbase FuzzyRowFilter用例Rowkey 样式userId_actionId_timestamp(action比如登录、修改密码等)可以快速获取到用户的登录操作等如果需要分析用户最近的登录状况,怎么办?全表扫描 + RowFilter?冗余存储?(修改?)注意:Rowkey 需要定长FuzzyRowFilter rowFilter
37、 = new FuzzyRowFilter( Arrays.asList( new Pair( Bytes.toBytesBinary(x00 x00 x00 x00_login_), new byte 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0);Hbase 其它快速跳转FilterMultiRowRangeFilterFusionRowFilter类似FuzzyRowFilter,但支持rangeList ranges = new ArrayList();ranges.add(new RowKeyRange(Bytes.toBytes(131), Bytes.toByt
38、es;ranges.add(new RowKeyRange(Bytes.toBytes(132), Bytes.toBytes;Filter filter = new MultiRowRangeFilter(ranges);List ranges = new ArrayList();ranges.add(new BytesRange(0 , 2, new byte1,0, new byte1,9);ranges.add(new BytesRange(4 , 1, new byte1, new byte1);FusionRowFilter filter = new FusionRowFilter(ranges);HBase辅助索引本地索引(region级别)针对region中的数据进行辅助索引适用场景:userId+time,查询某用户符合某种条件的数据/jira/browse/HBASE-8980全局索引查询限制条件少创建索引表可以在插入同时创建索引表能够通过MapReduce重建索引表还未发布,请耐心等待74RowKeyColumn qualifiervaluefilterValueOrignal
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 导管相关感染教育及培训措施
- 计算机软件开发实习心得体会
- 呼吸衰竭医疗团队协作流程
- 制造业生产事故应急处理措施
- 促进道德与法治学习的家庭教育计划
- 关于参加网络安全培训的心得体会与反思
- 2023-2024学年江西省部分学校高二下学期期中考试地理试题(解析版)
- 人教版小学数学四年级上册教学评价计划
- 医疗设备材料供应链管理与保障措施
- 青岛版一年级下册数学综合素质培养计划
- 精神科出院康复指导与随访
- 济南传统民居课件
- 医院感染预防与控制的基本概念和原则
- 2024年数字广西集团有限公司招聘笔试参考题库含答案解析
- 食堂钢丝球管理制度
- 住宅室内装饰装修工程施工合同
- 岩土工程中英文对照外文翻译文献
- 河南省职业技能等级认定试卷-证书-网络与信息安全管理员三级实操样卷评分记录表
- 2023年1月浙江省高考英语真题听力试题(附听力音频+答案+文本)
- ansys课程设计论文2
- 2022年学前教育生均公用经费项目绩效评价报告
评论
0/150
提交评论