当前位置: 首页 / 技术干货 / 正文
好程序员大数据培训分享HBase协处理器加载的三种方式

2020-06-03

大数据培训 好程序员 大数据培训机构

  好程序员大数据培训分享HBase协处理器加载的三种方式,协处理器加载的三种方式

好程序员

  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文件。(可选)

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号