本文主要给大家罗列了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工作笔记】

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

hbase 协处理器 部署_HBase协处理器加载的三种方式相关推荐

  1. IDEA中Tomcat重新加载的几种方式

    IDEA中Tomcat重新加载的几种方式 参考自IDEA官方帮助文档 1.Update resources 更新资源文件,当项目中的HTML, JSP, JavaScript, CSS and ima ...

  2. vue项目实现路由按需加载(路由懒加载)的3种方式

    vue项目实现路由按需加载(路由懒加载)的3种方式 1.vue异步组件 2.es提案的import() 3.webpack的require,ensur *1.vue异步组件技术 ==== 异步加载 v ...

  3. Cesium加载模型两种方式

    Cesium加载模型两种方式 代码如下 <!DOCTYPE html> <html><head><meta charset="UTF-8" ...

  4. 实现JS异步加载的三种方法

    一.为什么要写异步加载: ①js加载本身是属于同步加载的,加载js文件会阻塞文档,一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作.但是有些工具方法需要按需加载,有一些工具js文件它是不 ...

  5. 实现图片预加载的几种方式

    感觉自己好久没有写博客了,可能自己变懒了.不知道为什么最近有点迷茫,不知道是该去学一下新东西还是该去看一下具有深度的东西.新的技术需要关注,但是我要去研究一下jquery的源码,这个东西很早就想去看, ...

  6. 页面加载的几种方式和区别

    目录 页面加载的几种方式 DOM文档加载步骤 原生JS的 ready阶段 执行方法怎么写? 全部方式的演示代码 window和document的区别 页面加载的几种方式(原生JS和jQuery) 1. ...

  7. jsp页面数据加载的两种方式

    JSP数据加载的两种方式 第一种: 三层架构写在controller的页面跳转前面,set到request域中 request.setAttribute("name", list) ...

  8. 图片预加载的三种方法

    转载: 图片预加载的三个方法 - 浅夏初晴 - 博客园利用CSS.JavaScript及Ajax实现图片预加载的三大方法 预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利 ...

  9. hbase 协处理器 部署_hbase协处理器概念及知识点总结

    HBase是一种Hadoop数据库,经常被描述为一种稀疏的,分布式的,持久化的,多维有序映射,它基于行键.列键和时间戳建立索引,是一个可以随机访问的存储和检索数据的平台.HBase不限制存储的数据的种 ...

最新文章

  1. Educational Codeforces Round 78 (Rated for Div. 2)B~C[前缀和]
  2. 一文快速入门分库分表中间件 Sharding-JDBC
  3. Java JPanel的使用
  4. photoshop(ps) cs6中文版
  5. avue 文字点击 弹窗_经验 | UI设计师必懂的App弹窗设计方法
  6. 共享经济模式下的边缘计算——PPIO边缘云 laaS技术实践分享
  7. Request.ServerVariables 参数大全
  8. python request post 数组_[pve][python]用python3获取pve状态信息
  9. 机器视觉系统需要考虑的十个问题
  10. python---之np.unique
  11. 安卓智能手机刷机前的准备工作
  12. mysql软件可行性分析报告_网上商城系统可行性分析报告.doc
  13. Visio中的内容另存为图片且不改变画质
  14. uniapp+uniCloud实现批量上传图片到云端(解决h5端跨域问题)
  15. mysql 字段字符串转int_MySQL数据库面试题(2020最新版)(一)
  16. Android--设置App的启动页面
  17. ssm毕设项目客房订餐系统s2whx(java+VUE+Mybatis+Maven+Mysql+sprnig)
  18. python 随机选择list或numpy.ndarray中n个元素
  19. ShadowPLCs A Novel Scheme for Remote Detection of Industrial Process Control Attacks
  20. 互联旅馆项目的经历路线

热门文章

  1. 技术分享:前端开发中电脑和手机联调的方法
  2. VIIRS-NPP夜间灯光数据处理
  3. i7 1260p和酷睿i7 12700h选哪个好?区别对比评测
  4. 吐槽 OneNote2016
  5. Windows:SetTimer定时器编程
  6. 日历怎么设置倒计时天数?手机便签显示倒数日方法
  7. 并发中的Synchronized、Lock、Volite、Map、ThreadLocal
  8. Solidify实现一个智能合约11(结构体)
  9. 孤立森林(IsolationForest)算法对数据进行异常检测
  10. word技巧收集之:用宏一次修改所有表格的样式