HBase的协处理器(Coprocessor)、HBase不可以使用二级索引吗?

起源

  • Hbase 作为列族数据库最经常被人诟病的特性包括:

无法轻易建立“二级索引”

难以执 行求和、计数、排序等操作

比如,在旧版本的(<0.92)Hbase 中,统计数据表的总行数,需要使用 Counter 方法,执行一次 MapReduce Job 才能得到。虽然 HBase 在数据存储层中集成了 MapReduce,能够有效用于数据表的分布式计算。然而在很多情况下,做一些简单的相加或者聚合计算的时候, 如果直接将计算过程放置在 server 端,能够减少通讯开销,从而获 得很好的性能提升

  • 于是, HBase 在 0.92 之后引入了协处理器(coprocessors),实现一些激动人心的新特性:能够轻易建立二次索引、复杂过滤器(谓词下推)以及访问控制等。

协处理器有两种: observer 和 endpoint

1. observer协处理器

  • Observer 类似于传统数据库中的触发器,当发生某些事件的时候这类协处理器会被 Server 端调用。Observer Coprocessor 就是一些散布在 HBase Server 端代码中的 hook 钩子, 在固定的事件发生时被调用。比如: put 操作之前有钩子函数 prePut,该函数在 put 操作
    执行前会被 Region Server 调用;在 put 操作之后则有 postPut 钩子函数

以 Hbase2.0.0 版本为例,它提供了三种观察者接口:

RegionObserver:提供客户端的数据操纵事件钩子: Get、 Put、 Delete、 Scan 等

WALObserver:提供 WAL 相关操作钩子。

MasterObserver:提供 DDL-类型的操作钩子。如创建、删除、修改数据表等。

到 0.96 版本又新增一个 RegionServerObserver

下图是以 RegionObserver 为例子讲解 Observer 这种协处理器的原理:

  1. 客户端发起get请求

  2. 该请求被分派给合适的RegionServer和Region

  3. coprocessorHost拦截该请求,然后在该表上登记的每个RegionObserer上调用preGet()

  4. 如果没有被preGet拦截,该请求继续送到Region,然后进行处理

  5. Region产生的结果再次被coprocessorHost拦截,调用posGet()处理

  6. 加入没有postGet()拦截该响应,最终结果被返回给客户端

2. endpoint协处理器

  • Endpoint 协处理器类似传统数据库中的存储过程,客户端可以调用这些 Endpoint 协处理器执行一段 Server 端代码,并将 Server 端代码的结果返回给客户端进一步处理,最常见的用法就是进行聚集操作

  • 如果没有协处理器,当用户需要找出一张表中的最大数据,即max 聚合操作,就必须进行全表扫描,在客户端代码内遍历扫描结果,并执行求最大值的操作。这样的方法无法利用底层集群的并发能力,而将所有计算都集中到 Client 端统一执 行,势必效率低下。

  • 利用 Coprocessor,用户可以将求最大值的代码部署到 HBase Server 端,HBase 将利用底层 cluster 的多个节点并发执行求最大值的操作。即在每个 Region 范围内 执行求最大值的代码,将每个 Region 的最大值在 Region Server 端计算出,仅仅将该 max 值返回给客户端。在客户端进一步将多个 Region 的最大值进一步处理而找到其中的最大值。这样整体的执行效率就会提高很多

下图是 EndPoint 的工作原理:

3. 总结

  • Observer 允许集群在正常的客户端操作过程中可以有不同的行为表现

  • Endpoint 允许扩展集群的能力,对客户端应用开放新的运算命令

  • observer 类似于 RDBMS 中的触发器,主要在服务端工作

  • endpoint 类似于 RDBMS 中的存储过程,主要在 服务器端、client 端工作

  • observer 可以实现权限管理、优先级设置、监控、 ddl 控制、 二级索引等功能

  • endpoint 可以实现 min、 max、 avg、 sum、 distinct、 group by 等功能

协处理器加载方式

协处理器的加载方式有两种:

  • 静态加载方式( Static Load)

  • 动态加载方式 ( Dynamic Load)

静态加载的协处理器称之为 System Coprocessor,动态加载的协处理器称 之为 Table Coprocessor。

1 静态加载

l 通过修改 hbase-site.xml 这个文件来实现

l 启动全局 aggregation,能过操纵所有的表上的数据。只需要添加如下代码:

 <property>  <name>hbase.coprocessor.user.region.classes</name>  <value>org.apache.hadoop.hbase.coprocessor.AggregateImplementation</value>
</property>

为所有 table 加载了一个 cp class,可以用” ,”分割加载多个 class

2 动态加载

  • 启用表 aggregation,只对特定的表生效

  • 通过 HBase Shell 来实现,disable 指定表

      hbase>  disable 'mytable'
    
  • 添加 aggregation

    hbase> alter ‘mytable’, METHOD => ‘table_att’,‘coprocessor’=> ‘|org.apache.Hadoop.hbase.coprocessor.AggregateImplementation||’

  • 重启启用表

    hbase> enable ‘mytable’

3 协处理器卸载

只需三步:
disable ‘test’
alter ‘test’, METHOD => ‘table_att_unset’, NAME => ‘coprocessor$1’
enable ‘test’

HBase的协处理器(Coprocessor)、HBase如何使用二级索引、observer协处理器、 endpoint协处理器、Hbase 协处理器加载方式相关推荐

  1. HBase协处理器三种加载方式

    一.协处理器简介 HBase协助处理器允许用户将部分逻辑在数据存放端即 HBase RegionServer 服务端进行计算,也即允许用户在 RegionServer 运行用户自定义的代码.这相当于是 ...

  2. 一文读懂HBase(安装,架构原理,优化,API,es二级索引,phoenix)

    1.HBase简介 HBASE是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群. HBASE的目标是存储并处理大型的数据 ...

  3. 2021年大数据HBase(十六):HBase的协处理器(Coprocessor)

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 HBase的协处理器(Coprocessor) 一.起源 二 ...

  4. HBase建表高级属性,hbase应用案例看行键设计,HBase和mapreduce结合,从Hbase中读取数据、分析,写入hdfs,从hdfs中读取数据写入Hbase,协处理器和二级索引

    1. Hbase高级应用 1.1建表高级属性 下面几个shell 命令在hbase操作中可以起到很到的作用,且主要体现在建表的过程中,看下面几个create 属性 1. BLOOMFILTER 默认是 ...

  5. HBase协处理器及二级索引

    前言 在使用 HBase 时,如果你的数据量达到了数十亿行或数百万列,此时能否在查询中返回大量数据将受制于网络的带宽,即便网络状况允许,但是客户端的计算处理也未必能够满足要求.在这种情况下,协处理器( ...

  6. 2021年大数据HBase(十二):Apache Phoenix 二级索引

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Apache Phoenix 二级索引 一.索引分类 ...

  7. hbase组合rowkey_「从零单排HBase 11」HBase二级索引解决方案

    HBase一个令人惋惜的地方,就是不支持二级索引.因此,社区有了很多补充方案来填补HBase的二级索引能力的缺陷. 今天,我们就来看看有哪些二级索引方案,通过对比各个方案的优缺点,并结合我们的具体场景 ...

  8. HBase 集成 Phoenix 构建二级索引实践

    Phoenix 在 HBase 生态系统中占据了非常重要的地位,本文主要包括以下几方面内容: Phoenix 介绍 CDH HBase 集成 Phoenix 使用 Phoenix 创建 HBase 二 ...

  9. hbase 协处理器 部署_HBase协处理器加载的三种方式

    本文主要给大家罗列了hbase协处理器加载的三种方式:shell加载(动态).api加载(动态).配置文件加载(静态).其中静态加载方式需要重启hbase. 我们假设我们已经有一个现成的需要加载的协处 ...

最新文章

  1. 转: GridView:当鼠标滑过,行的背景颜色发生变化
  2. Visual C++ 2011-8-15
  3. AIX的用户和组管理
  4. cannot import name 'get_all_providers'
  5. php 数组与数组之间去重,PHP开发中一维数组与二维数组去重功能实现教程
  6. 第三周课程总结及实验报告(一)
  7. 基于zynq的千兆网udp项目_随时随地感受“沉浸式千兆体验”!海南互联网络迈入“三千兆”时代...
  8. rabbitmq管理界面的使用
  9. 做系统ghost步骤图解_用好这工具,小孩都能会重装系统!
  10. Mac os安装SEAL
  11. 团队作业8----第二次项目冲刺(beta阶段)5.20
  12. excel字符处理函数
  13. 深入理解加密、解密、数字签名和数字证书
  14. 六石风格:雨伞用袋子套起来
  15. 浅析DC/DC转换器未来市场的发展前景
  16. 硅谷系创业公司,这家深耕物联网22年的Fabless终于走到上市关口
  17. activity 工作流引擎-流程表介绍
  18. python图片镜像翻转_OpenCV Python 翻转(镜像)图片 cv.flip
  19. ARP报文抓包解析学习
  20. 产品经理常用的方法论有哪些

热门文章

  1. win10 werfault.exe 内存不能read 修复
  2. svg齿轮动画js特效
  3. android ExtCertPathValidatorException: Could not validate
  4. 《图解密码技术》读后的总结
  5. PowerJob使用
  6. cadence SPB17.4 - 用autoCAD2022画一个PCB板框
  7. Mentor Graphics LP Wizard 软件使用----创建零件BGA封装库
  8. B2B2C多商户商城源码/分销商城/多用户商城系统/商家入驻商城系统
  9. 6大主流浏览器中,各个html标签默认的padding和maring
  10. Color国际青年公寓