首页 文章 精选 留言 我的

精选列表

搜索[hbase],共3637篇文章
优秀的个人博客,低调大师

HBase scan过程简析

1.核心组件及流程 scan过程总体上是分层处理的,与存储上的组织方式一致,脉络比较清晰; 具体来说,就是region→store→hfile/memstore,分别都有对应的scanner实现进行数据读取; scan请求本身设置的条件,以及server和table层面的一些参数限制,会根据需要分布在不同层次的scanner中进行处理; 2.RegionScanner RegionScanner的实现类在HRegion内部定义,为RegionScannerImpl; 该类内部主要通过一个优先级队列(heap)和一个scanner类型的指针(current)进行驱动,不断的从StoreScanner中获取数据; 下面分步说明一下数据驱动的过程: (图1) (图2) (图3) (图4) 假设startrow和stoprow分别为r1和r3。 1:创建指定的各个列族对应的storeScanner,如果未指定则是全部列族; 2:storeScanner创建过程中,会根据startrow参数,seek到对应cell; 3:将这些storeScanner放入一个heap中,heap为优先级队列,比较器的compare方法中比较的是KeyValueScanner所peek到的cell大小,如图1; 4:全部放入到heap使其有序,poll方法得到最小的storeScanner,即storeScannerB,将其赋值给current,如图2; 5:调用current的next方法,该方法会获取一行的全部cell,获取完后内部已seek到下一行,如图3; 6:再将current放回到heap中,此时会形成新的顺序,如图4; 7:重复4到6步,直到新的行大于或等于r3; 3.StoreScanner StoreScanner的数据驱动方式与RegionScanner类似,也是使用heap和current去进行控制; 除了数据获取之外,该类比较重要的1个部分是数据的检查,相关逻辑封装在ScanQueryMatcher中; ScanQueryMatcher中主要包含2个组件:DeleteTracker和ColumnTracker,前者负责处理delete逻辑,后者负责检查当前cell的column、version及value等是否符合要求; 另外,在getScanners的过程中会根据keyRange、timeRange、bloomBlock等对storeFile进行过滤,以减少数据的读取; matcher返回的code及含义说明如下: #丢弃当前cell,继续处理下个cell SKIP #丢弃当前cell,并推进到下个column SEEK_NEXT_COL #丢弃当前cell,并推进到下个row SEEK_NEXT_ROW #保留当前cell,继续处理下个cell INCLUDE #保留当前cell,并推进到下个column INCLUDE_AND_SEEK_NEXT_COL #保留当前cell,并推进到下个row INCLUDE_AND_SEEK_NEXT_ROW #当前row已完成 DONE #整个scan已完成 DONE_SCAN #丢弃当前cell,并推进到下个指定的cell,由少数filter用到 SEEK_NEXT_USING_HINT 4.storeFileScanner storeFileScanner是真正涉及到hfile数据读取的地方,会根据rowKey,基于内存中indexBlock的数据定位到具体的dataBlock位置,以block为单位进行读取; 读取后的block数据在内存中以ByteBuffer的形式存在,而blockSeek方法会将这个ByteBuffer的position推动到合适位置的过程; 接下来,会读取一个cell的数据作为返回,使上层的storeScanner能够据此对各个storeFileScanner进行排序; 值得一提的是,实际实现中,还存在lazySeek的优化,大致原理是根据hfile中存储的最小time,返回一个假的cell,如果该cell都不能排在前面,那就不需要关心真实的cell是什么了,等到该cell能够排在最前面的时候,再进行realSeek,这个机制对于各个hfile按时间存在明显分界并且主要读取近期数据的场景,可以有效减少实际的数据读取量;

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册