HBase协处理器Coprocessor怎么使用

这篇文章主要介绍“HBase协处理器Coprocessor怎么使用”,在日常操作中,相信很多人在HBase协处理器Coprocessor怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”HBase协处理器Coprocessor怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    要使您的协处理器对HBase可用,必须静态(通过HBase配置)或动态(使用HBase Shell或Java API)加载它。

1.静态加载

    按照以下步骤静态加载协处理器。请记住,您必须重新启动HBase来卸载静态加载的协处理器。

a.在配置文件hbase-site.xml中定义协处理器,新增配置项的<name>应该是以下内容:

  • hbase.coprocessor.region.classes for RegionObservers andnd Endpoints.

  • hbase.coprocessor.wal.classes for WALObservers.

  • hbase.coprocessor.master.classes for MasterObservers.

<value>对应所以加载的完整类名;

例如:要加载RegionObservers协处理器(在类SumEndPoint.java中实现),在hbase-site中添加以下配置:

<property>    <name>hbase.coprocessor.region.classes</name>    <value>org.myname.hbase.coprocessor.endpoint.SumEndPoint</value></property>

    如果指定多个类用于加载,则类名必须以逗号分隔。框架尝试使用默认的类装入器装入所有配置的类。因此,jar文件必须驻留在服务器端HBase类路径中。

    以这种方式加载的协处理器将在所有表的所有区域上处于活动状态。这些也称为系统协处理器。将为第一个列出的协处理器分配优先级Coprocessor.Priority.SYSTEM。列表中的每个后续协处理器的优先级值都会增加1(这会降低其优先级,因为优先级具有整数的自然排序顺序)。
    当调用注册的观察者时,框架以其优先级的排序顺序执行其回调方法。关系是任意破坏的。

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

c.重启HBase。

2.静态卸载

a.从hbase-site中删除配置。

b.重启HBase。

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

3.动态加载

    您还可以动态加载协处理器,而无需重新启动HBase。这似乎比静态加载更可取,但是动态加载的协处理器是在每个表的基础上加载的,并且只对加载它们的表可用。因此,动态加载的表有时被称为表协处理器。

此外,动态加载协处理器相当于对表进行模式更改,必须使表脱机才能加载协处理器。

以下说明做了如下假设:

  • 一个叫做coprocessor.jar的JAR包含了协处理器实现以及它的所有依赖项。

  • 该JAR在HDFS中的某些位置 (如,hdfs://<namenode>:<port>/user/<hadoop-user>/coprocessor.jar ) 中可用。

a.使用Hbase shell加载

  使用类似以下命令加载协处理器:

hbase alter 'users', METHOD => 'table_att', 'Coprocessor'=>'hdfs://<namenode>:<port>/user/<hadoop-user>/coprocessor.jar| org.myname.hbase.Coprocessor.RegionObserverExample|1073741823|arg1=1,arg2=2'

    协处理器框架将尝试从协处理器表属性值中读取类信息。该值包含由管道(|)字符分隔的四段信息:

    1)文件路径:包含协处理器实现的jar文件必须位于所有区域服务器都可以读取它的位置,您可以将文件复制到每个区域服务器上的本地磁盘,但建议将其存储在HDFS中。

    2)类名:协处理器的完整类名。

    3)优先级:一个整数。框架将使用优先级确定在同一个钩子上注册的所有配置的观察者的执行顺序。此字段可以留空。在这种情况下,框架将分配一个默认的优先级值。

    4)参数(可选):这个字段被传递给协处理器实现。这是可选的。

    验证协处理器加载成功。

hbase(main):04:0> describe 'users'

 b.使用JavaAPI加载(all HBase versions)

    下面的Java代码展示了如何使用HTableDescriptor的setValue()方法在users表上加载协处理器。

TableName tableName = TableName.valueOf("users");String path = "hdfs://<namenode>:<port>/user/<hadoop-user>/coprocessor.jar";Configuration conf = HBaseConfiguration.create();Connection connection = ConnectionFactory.createConnection(conf);Admin admin = connection.getAdmin();HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);HColumnDescriptor columnFamily1 = new HColumnDescriptor("personalDet");columnFamily1.setMaxVersions(3);hTableDescriptor.addFamily(columnFamily1);HColumnDescriptor columnFamily2 = new HColumnDescriptor("salaryDet");columnFamily2.setMaxVersions(3);hTableDescriptor.addFamily(columnFamily2);hTableDescriptor.setValue("COPROCESSOR$1", path + "|"+ RegionObserverExample.class.getCanonicalName() + "|"+ Coprocessor.PRIORITY_USER);admin.modifyTable(tableName, hTableDescriptor);

c.使用JavaAPI(HBase 0.96+ only)

    在HBase 0.96及更新版本中,HTableDescriptor的addCoprocessor()方法提供了一种更简单的方法来动态加载协处理器。

TableName tableName = TableName.valueOf("users");Path path = new Path("hdfs://<namenode>:<port>/user/<hadoop-user>/coprocessor.jar");Configuration conf = HBaseConfiguration.create();Connection connection = ConnectionFactory.createConnection(conf);Admin admin = connection.getAdmin();HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);HColumnDescriptor columnFamily1 = new HColumnDescriptor("personalDet");columnFamily1.setMaxVersions(3);hTableDescriptor.addFamily(columnFamily1);HColumnDescriptor columnFamily2 = new HColumnDescriptor("salaryDet");columnFamily2.setMaxVersions(3);hTableDescriptor.addFamily(columnFamily2);hTableDescriptor.addCoprocessor(RegionObserverExample.class.getCanonicalName(), path,Coprocessor.PRIORITY_USER, null);admin.modifyTable(tableName, hTableDescriptor);

注意:

    这里不能保证框架将成功加载给定的协处理器。例如,shell命令既不保证jar文件存在于特定的位置,也不验证给定的类是否实际包含在jar文件中。

4.动态卸载

   a.更改表以删除协处理器

hbase> alter 'users', METHOD => 'table_att_unset', NAME => 'coprocessor$1'

    b.使用JavaAPI卸载

    使用setValue()或addCoprocessor()方法在不设置协处理器值的情况下重新加载表定义。这将删除附加到表上的任何协处理器。

TableName tableName = TableName.valueOf("users");String path = "hdfs://<namenode>:<port>/user/<hadoop-user>/coprocessor.jar";Configuration conf = HBaseConfiguration.create();Connection connection = ConnectionFactory.createConnection(conf);Admin admin = connection.getAdmin();HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);HColumnDescriptor columnFamily1 = new HColumnDescriptor("personalDet");columnFamily1.setMaxVersions(3);hTableDescriptor.addFamily(columnFamily1);HColumnDescriptor columnFamily2 = new HColumnDescriptor("salaryDet");columnFamily2.setMaxVersions(3);hTableDescriptor.addFamily(columnFamily2);admin.modifyTable(tableName, hTableDescriptor);

到此,关于“HBase协处理器Coprocessor怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!