HBase总结(10)--协处理器

来源:互联网 发布:5轴激光切割编程软件 编辑:程序博客网 时间:2024/05/16 23:41

一、介绍

Hbase作为列存储的数据库,很多关于统计的函数没有直接快速的计算,因此HBase提供了协处理器的功能,协处理提供了用户在region服务器端插入自己的代码,从而实现特定功能的权利。通过用户自写的协处理器,用户可以创建二级索引、完成行数量的统计等功能。

二、解释

1、协处理器的分类:

协处理器主要分为两类:观察者模式(obverser)和终端(endpoint)两种,这两种写出器都是Coprocessor类,从而实现协处理器框架的:

(1)观察者模式

该模式类似于关系型数据库中的触发器,即用户可以规定在客户端或者其他进行某一种动作时,触发一个用户的自定义的功能,从而实现一些其他功能。因为Hbase无法直接创建二级索引,但是我们可以通过在观察者模式中,在每次插入一条数据项时通过自定义功能实现二级索引。

(2)终端模式

该模式类似于关系型数据库中的存储过程,用户可以通过RPC请求触发终端中的代码,从而实现某些功能。例如可以在终端中实现多某些表行的统计。

2、协处理器权限

协处理器也存在执行顺序上的权限问题,在Coprocessor.Priority函数中定了协处理器的级别:SYSTEM、USER。

(1)SYSTEM:系统级别的协处理器权限要大于用户级别的协处理器,因此在执行协处理器的过程中,系统级协处理器先别执行,而用户级的协处理器后备执行。

(2)相同级别的协处理器都带有一个序号,以辨别同级别协处理器的执行顺序。

3、协处理器加载

协处理器的加载只要有两种方式:

(1)从配置中加载

用户可以在hbase-site.xml文件中配置协处理器类,通过在其中配置协处理器类的位置。在配置文件中配置项的顺序很重要,因此在配置项中的顺序则是协处理器加载的顺序,也就是协处理器执行的顺序。并且通过配置加载的协处理器肯定都是每一张表都会被应用上。在该配置中有几个配置选项,可以规定协处理器监听的位置:

hbase.coprocessor.master.classes      master处理,在一些master级别的操作,如创建表、删除表等时会触发该处理器。

hbase.coprocessor.region.classes       region处理,在region级别的操作,例如插入、删除、获取数据的操作时可以出发这些函数。

hbase.coprocessor.wal.classes             wal日志文件处理,在wal操作过程中的协处理器触发函数。

(2)从表描述中加载

该功能是在表的描述中为其添加一个协处理器的描述,从而将协处理器的代码传递到region端,但是该种方法只能为特定的某一张表添加用户定义的协处理器。

用户可以通过HTableDescriptor.setValue()方法添加协处理器

key值:key值必须以 COPROCESSOR开头,通过$+数字的规定该协处理器的序号。

value值:value值有三部分组成,每一部分有 | 进行分分割,第一部分为类的路径,第二部分为协处理器所在的类,第三部分为协处理器的等级

例子:

HTableDescriptor.setValue("COPROCESSOR$1","hdfs://localhost:9000/user/test/test.jar|coprocessor.CoprocessorTest|"+Coprocessor.USER)

4、协处理器系统

所有的协处理器都继承自同一个类Coprecessor类。因此所有的协处理器都具有相同的属性:

(1)start(CoprocessorEnviroment env) /   stop(CoprocessorEnviroment env)

在协处理器的生成周期中,start函数启动协处理器,二stop函数则停止协处理器功能。

(2)协处理器的状态

在协处理器中定义了一个协处理器的所有的状态,并且所有的状态都封装在一个枚举类 Coprocessor.State 中:

UNINSTALLED    协处理器的最初状态,没有环境,也没有被初始化

INSTALLED          实例装在了他的环境参数

STARTING            协处理器开始将要工作,也就是start()函数将要被调用了

ACTIVE                  start函数已经被调用

STOPPING            stop函数将要被调用之前的状态

STOPPED              stop 函数被调用

三、总结

该片文章先讲述了协处理器的特点,如果有什么不正确的地方,希望能够指出



0 0