• 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://<namenode>:<port>/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

    <property>
        <name>hbase.coprocessor.region.classes</name>
        <value>org.myname.hbase.Coprocessor.RegionObserverExample</value> 
    </property> 
    

    1.2 WALObservers

    <property>
        <name>hbase.coprocessor.wal.classes</name>
        <value>org.myname.hbase.Coprocessor.RegionObserverExample</value> 
    </property> 
    

    1.3 MasterObservers

    <property>
        <name>hbase.coprocessor.master.classes</name>
        <value>org.myname.hbase.Coprocessor.RegionObserverExample</value> 
    </property> 
    

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

    2. 添加Jar包

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

    3. 重启HBase生效。

    4. 静态卸载

    • 从hbase-site.xml中删除协处理器的元素,包括子元素。
    • 重启HBase。
    • 从类路径或HBase的lib/目录中删除协处理器的JAR文件。(可选)

    扫描二维码关注博主公众号

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

  • 相关阅读:
    Java Servlet(十):JSTL核心标签库
    Java Servlet(九):转发请求与重定向请求区别
    Java tomcat启动失败(Servlet3.0 Web Project):A child container failed during start
    快速安装服务
    Java Servlet(八):EL自定义函数
    Java Servlet(七):JavaWeb MVC 操作(jdk7+tomcat7+eclipse)
    新版mysql(mysql-5.7.12-winx64)安装
    oracle之 oradebug 命令用法
    Linux 绑定双网卡
    Linux 之 NTP 服务 服务器
  • 原文地址:https://www.cnblogs.com/zpb2016/p/12717301.html
Copyright © 2020-2023  润新知