本文主要给大家罗列了HBase协处理器加载的三种方式:shell加载(动态)、api加载(动态)、配置文件加载(静态)。其中静态加载方式需要重启HBase。 我们假设我们已经有一个现成的需要加载的协处理器jar包:HelloC
本文主要给大家罗列了HBase协处理器加载的三种方式:shell加载(动态)、api加载(动态)、配置文件加载(静态)。其中静态加载方式需要重启HBase。
我们假设我们已经有一个现成的需要加载的协处理器jar包:HelloCoprocessor-0.0.1.jar。
将打包好的HelloCoprocessor-0.0.1.jar上传服务器,然后放到HDFS上。
# 切换hadoop用户,创建演示目录
$ hdfs dfs -mkdir /usr/hbase/coprocessor
$ hdfs dfs -put HelloCoprocessor-0.0.1.jar /usr/hbase/coprocessor
我们假设其协处理器类的包名为:
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上。
②:协处理器的完整类名。
③:协处理器优先级,整数表示。可以为空。
④:传递给协处理器的参数,可以为空。
注:各参数间不要有空格。
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文件中。
hbase> disable "mytable" # 禁用表,可选
hbase> alter "mytable", METHOD => "table_att_unset", NAME => "coprocessor$1"
hbase> enable "mytable" # 禁用表后启用表,可选
坑:在没有重启HBase情况下,如果修改协处理器代码并重新加载协处理器,请重命名协处理器Jar包的名字,否则不会生效。(由于当前JVM引用了现有的协处理器,因此必须通过重新启动RegionServer来重新启动JVM,以便替换它。)
具体方法是调用HtableDescriptor的addCoprocessor方法。该方法有两个重载方法:
示例代码如下:
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.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
如果想同时配置多个协处理器,可以用逗号分隔多个协处理器的类名。
将您的代码放在HBase的类路径上。一种简单的方法是将jar(包含代码和所有依赖项)放入HBase的安装目录lib/中。
--结束END--
本文标题: HBase协处理器加载的三种方式
本文链接: https://lsjlt.com/news/5570.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0