hbase 协处理器 部署_HBase协处理器加载的三种方式

本文主要给大家罗列了hbase协处理器加载的三种方式:shell加载(动态)、api加载(动态)、配置文件加载(静态)。其中静态加载方式需要重启hbase。

我们假设我们已经有一个现成的需要加载的协处理器jar包:hellocoprocessor-0.0.1.jar。

协处理器加载的三种方式

shell加载

1. 上传hdfs

将打包好的hellocoprocessor-0.0.1.jar上传服务器,然后放到hdfs上。

# 切换hadoop用户,创建演示目录

$ hdfs dfs -mkdir /usr/hbase/coprocessor

$ hdfs dfs -put hellocoprocessor-0.0.1.jar /usr/hbase/coprocessor

2. shell 加载协处理器

我们假设其协处理器类的包名为:

org.myname.hbase.coprocessor.regionobserverexample

shell 操作如下:

hbase> disable 'mytable' # 禁用表,可选

hbase> alter 'mytable', method => 'table_att', 'coprocessor' => '/usr/hbase/coprocessor/hellocoprocessor-0.0.1.jar'|org.myname.hbase.coprocessor.regionobserverexample|1001|arg1=1,arg2=2'

hbase> enable 'mytable' # 禁用表后启用表,可选

结构如下:

hbase> alter 'mytable', method => 'table_att', 'coprocessor' => ①|②|③|④'

解释下上面各个参数:

①:协处理器jar包路径,要保证所有的regionserver可读取到。也可以是本地路径,不过建议是放在hdfs上。

②:协处理器的完整类名。

③:协处理器优先级,整数表示。可以为空。

④:传递给协处理器的参数,可以为空。

注:各参数间不要有空格。

3. 验证是否加载协处理器

hbase> desc 'mytable'

table mytable is enable

mytable, {table_attributes => {coprocessor$1 => '/usr/hbase/coprocessor/hellocoprocessor-0.0.1.jar'|org.myname.hbase.coprocessor.regionobserverexample|1001|arg1=1,arg2=2'}}

此验证不保证协处理器能正常工作:shell命令既不保证特定位置存在jar文件,也不验证给定类是否实际包含在jar文件中。

4. 卸载协处理器

hbase> disable 'mytable' # 禁用表,可选

hbase> alter 'mytable', method => 'table_att_unset', name => 'coprocessor$1'

hbase> enable 'mytable' # 禁用表后启用表,可选

坑:在没有重启hbase情况下,如果修改协处理器代码并重新加载协处理器,请重命名协处理器jar包的名字,否则不会生效。(由于当前jvm引用了现有的协处理器,因此必须通过重新启动regionserver来重新启动jvm,以便替换它。)

api 加载

具体方法是调用htabledescriptor的addcoprocessor方法。该方法有两个重载方法:

addcoprocessor(string classname)

addcoprocessor(classname,jarpath,priority,kvs)

第二个重载方法提供了上述shell中所需的各个参数①②③④,方法一则需要用户手动将jar包分发到各个regionserver的lib目录下。

示例代码如下:

tablename tablename = tablename.valueof("mytable");

path path = new path("hdfs://:/usr/hbase/coprocessor/hellocoprocessor-0.0.1.jar");

configuration conf = hbaseconfiguration.create();

connection connection = connectionfactory.createconnection(conf);

admin admin = connection.getadmin();

admin.disabletable(tablename);

htabledescriptor htabledescriptor = new htabledescriptor(tablename);

hcolumndescriptor columnfamily1 = new hcolumndescriptor("f1");

columnfamily1.setmaxversions(1);

htabledescriptor.addfamily(columnfamily1);

hcolumndescriptor columnfamily2 = new hcolumndescriptor("f2");

columnfamily2.setmaxversions(3);

htabledescriptor.addfamily(columnfamily2);

htabledescriptor.addcoprocessor('org.myname.hbase.coprocessor.regionobserverexample', path,

coprocessor.priority_user, null);

admin.modifytable(tablename, htabledescriptor);

admin.enabletable(tablename);

重新加载表定义,无需使用addcoprocessor()方法设置协处理器的值。这将删除附加到表的任何协处理器。

配置文件加载

1. 修改配置文件:hbase-site.xml,配置项如下:

1.1 regionobservers/endpoints

hbase.coprocessor.region.classes

org.myname.hbase.coprocessor.regionobserverexample

1.2 walobservers

hbase.coprocessor.wal.classes

org.myname.hbase.coprocessor.regionobserverexample

1.3 masterobservers

hbase.coprocessor.master.classes

org.myname.hbase.coprocessor.regionobserverexample

如果想同时配置多个协处理器,可以用逗号分隔多个协处理器的类名。

2. 添加jar包

将您的代码放在hbase的类路径上。一种简单的方法是将jar(包含代码和所有依赖项)放入hbase的安装目录lib/中。

3. 重启hbase生效。

4. 静态卸载

从hbase-site.xml中删除协处理器的元素,包括子元素。

重启hbase。

从类路径或hbase的lib/目录中删除协处理器的jar文件。(可选)

转载请注明出处!欢迎关注本人微信公众号【hbase工作笔记】

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值