美文网首页
六、HBase读取流程

六、HBase读取流程

作者: loukey_j | 来源:发表于2020-01-13 13:54 被阅读0次

1、HBase读取流程

流程分四步:

1.1、Client-Server读取交互逻辑

1.1.1、Client从ZK获取元素据所在的RS,然后查询元数数据找到key对应的目标RS,向目标RS发送请求

1.1.2、Client的scan请求或者get请求都可以看作是scan操作

1.1.3、因为有些scan会是全表扫描,结果非常大,如果Clien与Server之间的scan操作没有设计为一次RPC请求,而是多次RPC。在数据量大的情况下如果设计为一次RPC,会导致集群网络带宽等系统资源被大量占用,影响集群业务,同时客户端很有可能内存不够存不下所有结果导致OOM

1.1.4、每次RPC请求称为一次next请求,每次返回规定数量的结果,如下代码

Scan scan =  new Scan();

scan.setFilter(...);

...

scan.setMaxResultSize(1000);//一次RPC返回的数据量大小,默认是2G

scan.setCacheing(500); //数据条数 默认是Integer.MAX_VALUE

scan.setBatch(100);//一次RPC请求的列数,防止一张表有设置几万甚至几十万的列,这样一行数据就特别大。

ResultScanner rs = table.getScanner(scan);

for(Result r : rs){ ... } //for(Result r : rs) 等价于 Result r = rs.next();

1.2、构建Server端Scan框架体系《有点抽象》

RS收到请求之后做了两件事,一是构建scanner iteratore体系,然后执行next函数获取KeyValue,并对进行条件过滤。

1.2.1、Scanner的核心体系包括三层Scanner:RegionScanner,StoreScanner,MemStoreScanner和StoreFileScanner

1.3、过滤不符合条件的HFile

1.4、从HFile中读取待查找key《有难度》

1.4.1、根据HFile索引树定位到目标Block

1.4.2、BockCache中检索目标Block

1.4.3、HDFS文件中检索目标Block

2、深入理解Coprocessor(协同处理器)

2.1、Coprocessor类似于存储过程和触发器

2.2、Observer 触发器:提供钩子使用户代码在特定时间发生之前或者之后执行

HBase提供4种Observer接口

1)RegionObserver:主要监听Region相关的事件,比如get、put、scan、delete、flush等

2)RegionServerObserver:监听RS的启动、关闭、或者执行Region合并等

3)WALObserver:监听WAL写入、滚动等

4)MasterObserver:监听见表、删表以及修改表结构等

2.3、Endpoint 存储过程:比如业务需要从HBase集群加载出来几十亿行数据进行求和或者平均值。可以使用Endpoint将计算逻辑下推到RS执行。用户可以通过RPC调用执行部署在服务端的业务代码。

2.4、Coprocessor(协同处理器)加载方式

2.4.1、静态加载

1)将Coprocessor配置到hbase-site.xml中

2)将Coprocessor代码放到HBase的classpath下,对应的jar包放在HBase lib目录下

3)重启HBase集群

2.4.2、动态加载

2.4.2.1、使用shell

1)disable 'table'

2)alter 'table',METHOD=>'table_att','Coprocessor'=>'hdfs://.../coporecessor.jar| a.b.c.OberverExample "|"

3)endable 'table'

2.4.2.2、使用HTableDescriptor的setValue()方法

2.4.2.3、使用HTableDescriptor的addCoprocessor方法

相关文章

  • 六、HBase读取流程

    1、HBase读取流程 流程分四步: 1.1、Client-Server读取交互逻辑 1.1.1、Client从Z...

  • Hbase 读取流程

    Hbase 读取复杂原因: 主要基于两个方面的原因: 一是因为HBase一次范围查询可能会涉及多个Region、多...

  • HBase读取(GET/SCAN)流程

    一、概述 先从Zookeeper中找到meta表所在的Regionserver的信息 根据namespace、表名...

  • Flink写入Hbase

    基本流程: 从Kafka中读取数据,再写入到Hbase。 写入Kafka代码 Flink写入Habse代码 pom...

  • HBase架构详解及读写流程

    目录一、HBase存储结构详解二、HBase写流程三、HBase读流程 Hbase是bigtable的开源山寨版本...

  • HBase原理——数据读取流程解析

    和写流程相比,HBase读数据是一个更加复杂的操作流程,这主要基于两个方面的原因:其一是因为整个HBase存储引擎...

  • HBase读写数据流程

    目录一.读写流程1.1 HBase读数据流程1.2 HBase写数据流程二. 退役(decommissioning...

  • 读取 HBase

  • 解析HBase原理之数据读取流程

    和写流程相比,HBase读数据是一个更加复杂的操作流程,这主要基于两个方面的原因: 其一是因为整个HBase存储引...

  • HBase 架构原理-数据读取流程解析

    和写流程相比,HBase读数据是一个更加复杂的操作流程,这主要基于两个方面的原因: 其一是因为整个HBase存储引...

网友评论

      本文标题:六、HBase读取流程

      本文链接:https://www.haomeiwen.com/subject/xsggactx.html