首页 > 编程知识 正文

分别描述hbase两种协处理器的效果?,hbase接口

时间:2023-05-06 19:43:10 阅读:206126 作者:2036

起源

HBase作为列族数据库最长被人诟病的特性包括:

无法轻易建立“二级索引”难以执行求和、计数、排序等操作

比如,在旧版本(<0.92)HBase中,统计数据表的总行数,需要使用Counter方法,执行一次MapReduce Job才能得到。虽然HBase在数据存储层中集成了MapReduce,能够有效用于数据表的分布式计算。然而在很多情况下,做一些简单的相加或者聚合计算的时候,如果直接将计算过程放置在server端,能够减少通讯开销,从而获得很好的性能提升。

于是,HBase在0.92之后引入了协处理器(coprocessors),实现一些激动人心的新特性:能够轻易建立二次索引、复杂过滤器(谓词下推)以及访问控制等。

协处理器的主要分类 ObServer observer类似于传统数据库中的触发器,当发生某些事件的时候这类协处理器会被server端调用。observer coprocessor就是一些散布在HBase server端代码中的hook钩子,在固定的事件发生时被调用。比如:put操作之前就有钩子函数prePut,该函数在put操作执行之前会被Region Server调用;在put操作之后则有postPut钩子函数 以HBase2.0版本为例,它提供了三种观察者接口: RegionObserver:提供客户端的数据操纵事件的钩子:Get、Put、Delete、Scan等WALObserver:提供WAL相关操作的钩子。MaserObserver:提供DDL类型操作的钩子。如创建、删除、修改数据表等。到0.96版本有新增一个RegionServerObserver 下面以Region为例讲解Observer这种协处理器的原理 比如客户端发起get请求该请求被分派给合适的RegionServer和RegioncoprocessorHost拦截该请求,然后在该表上登记的每个RegionObserver上调用preGet()如果没有被preGet拦截,该请求继续发送到Region,然后进行处理Region产生的结果再次被coprocessorHost拦截,调用postGet()处理假如没有postGet()拦截该响应,最终结果被返回给客户端 endpoint

endpoint协处理器类似传统数据库中的存储过程,客户端可以调用这些endpoint协处理器执行一段Server端代码,并将Server端代码的结果返回给客户端进一步处理,最常见的用法就是进行聚集操作

如果没有协处理器,当用户需要找一张表中的最大数据,即max聚合操作,就必须进行全表扫描,在客户端代码内遍历扫描结果,并执行求最大值的操作。这样的方法无法利用底层集群的并发能力,而将所有计算都集中到Client端统一执行,势必效率低下。

利用Coprocessor,用户可以将求最大值的代码部署到HBase Server端,HBase将利用底层cluster的多个节点并发执行求最大值的操作。即在每个Region范围内执行求最大值的代码,将每个Region的最大值在Region Server端计算出,仅仅将该max值返回给客户端。在客户端进一步将多个Region的最大值进一步处理而找到其中的最大值。这样整体的执行效率就会高很多。

endpoint的工作原理:

概念总结 Observer允许集群在正常的客户端操作过程中可以有不同的行为表现Endpoint允许扩展集群的能力,对客户端应用开放新的运算命令Observer类似于RDBMS中的触发器,主要在服务端工作Endpoint类似于RDBMS中的存储过程,主要在服务端、客户端工作Observer可以实现权限管理、优先级设置、监控、DDL控制、二级索引等功能Endpoint可以实现min、max、avg、sum、distinct、group by等功能 加载方式 静态加载

通过修改hbase-site.xml这个文件实现

启动全局aggregation,能够操纵所有的表上的数据。只需要添加如下代码:

<property><name>hbase.coprocessor.user.region.classes</name> <value>org.apache.hadoop.hbase.coprocessor.AggregateImplementatioin</value></property>

注意:为所有table加载了一个cp class,可以用“,”分隔加载多个class

动态加载

启用表aggregation,只对特定的表生效

通过HBase Shell来实现,disable 禁用表

添加aggregation,添加后启用表即可

alter 'mytable', METHOD => 'table_att','coprocessor' => '|org.apache.Hadoop.hbase.coprocessor.AggregateImplementation||' 卸载方式

1)禁用表

disable 'test'

2)修改表:删除协处理器的配置信息

alter 'test',METHOD => 'table_att_unset', NAME => 'coprocessor$1'

3)启动表

enable 'test'

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。