HBase的协处理器(Coprocessor)、HBase如何使用二级索引、observer协处理器、 endpoint协处理器、Hbase 协处理器加载方式
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 这种协处理器的原理:
客户端发起get请求
该请求被分派给合适的RegionServer和Region
coprocessorHost拦截该请求,然后在该表上登记的每个RegionObserer上调用preGet()
如果没有被preGet拦截,该请求继续送到Region,然后进行处理
Region产生的结果再次被coprocessorHost拦截,调用posGet()处理
加入没有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 协处理器加载方式相关推荐
- HBase协处理器三种加载方式
一.协处理器简介 HBase协助处理器允许用户将部分逻辑在数据存放端即 HBase RegionServer 服务端进行计算,也即允许用户在 RegionServer 运行用户自定义的代码.这相当于是 ...
- 一文读懂HBase(安装,架构原理,优化,API,es二级索引,phoenix)
1.HBase简介 HBASE是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群. HBASE的目标是存储并处理大型的数据 ...
- 2021年大数据HBase(十六):HBase的协处理器(Coprocessor)
全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 HBase的协处理器(Coprocessor) 一.起源 二 ...
- HBase建表高级属性,hbase应用案例看行键设计,HBase和mapreduce结合,从Hbase中读取数据、分析,写入hdfs,从hdfs中读取数据写入Hbase,协处理器和二级索引
1. Hbase高级应用 1.1建表高级属性 下面几个shell 命令在hbase操作中可以起到很到的作用,且主要体现在建表的过程中,看下面几个create 属性 1. BLOOMFILTER 默认是 ...
- HBase协处理器及二级索引
前言 在使用 HBase 时,如果你的数据量达到了数十亿行或数百万列,此时能否在查询中返回大量数据将受制于网络的带宽,即便网络状况允许,但是客户端的计算处理也未必能够满足要求.在这种情况下,协处理器( ...
- 2021年大数据HBase(十二):Apache Phoenix 二级索引
全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Apache Phoenix 二级索引 一.索引分类 ...
- hbase组合rowkey_「从零单排HBase 11」HBase二级索引解决方案
HBase一个令人惋惜的地方,就是不支持二级索引.因此,社区有了很多补充方案来填补HBase的二级索引能力的缺陷. 今天,我们就来看看有哪些二级索引方案,通过对比各个方案的优缺点,并结合我们的具体场景 ...
- HBase 集成 Phoenix 构建二级索引实践
Phoenix 在 HBase 生态系统中占据了非常重要的地位,本文主要包括以下几方面内容: Phoenix 介绍 CDH HBase 集成 Phoenix 使用 Phoenix 创建 HBase 二 ...
- hbase 协处理器 部署_HBase协处理器加载的三种方式
本文主要给大家罗列了hbase协处理器加载的三种方式:shell加载(动态).api加载(动态).配置文件加载(静态).其中静态加载方式需要重启hbase. 我们假设我们已经有一个现成的需要加载的协处 ...
最新文章
- 转: GridView:当鼠标滑过,行的背景颜色发生变化
- Visual C++ 2011-8-15
- AIX的用户和组管理
- cannot import name 'get_all_providers'
- php 数组与数组之间去重,PHP开发中一维数组与二维数组去重功能实现教程
- 第三周课程总结及实验报告(一)
- 基于zynq的千兆网udp项目_随时随地感受“沉浸式千兆体验”!海南互联网络迈入“三千兆”时代...
- rabbitmq管理界面的使用
- 做系统ghost步骤图解_用好这工具,小孩都能会重装系统!
- Mac os安装SEAL
- 团队作业8----第二次项目冲刺(beta阶段)5.20
- excel字符处理函数
- 深入理解加密、解密、数字签名和数字证书
- 六石风格:雨伞用袋子套起来
- 浅析DC/DC转换器未来市场的发展前景
- 硅谷系创业公司,这家深耕物联网22年的Fabless终于走到上市关口
- activity 工作流引擎-流程表介绍
- python图片镜像翻转_OpenCV Python 翻转(镜像)图片 cv.flip
- ARP报文抓包解析学习
- 产品经理常用的方法论有哪些
热门文章
- win10 werfault.exe 内存不能read 修复
- svg齿轮动画js特效
- android ExtCertPathValidatorException: Could not validate
- 《图解密码技术》读后的总结
- PowerJob使用
- cadence SPB17.4 - 用autoCAD2022画一个PCB板框
- Mentor Graphics LP Wizard 软件使用----创建零件BGA封装库
- B2B2C多商户商城源码/分销商城/多用户商城系统/商家入驻商城系统
- 6大主流浏览器中,各个html标签默认的padding和maring
- Color国际青年公寓