Hbase总结(八)Hbase中的Coprocessor

张量计算布局优化:F2线性代数在深度学习中的应用 张量计算是现代深度学习模型的核心构建模块,其效率直接影响模型性能。张量布局作为逻辑张量与硬件资源之间的映射策略,决定了计算效率的关键因素。通过F2线性代数框架,可以将硬件资源抽象为向量空间,实现高效的布局表示与转换。这种基于有限域F2的数学方法,不仅简化了工程实现复杂度,还能自动推导布局属性如连续性分析和广播模式检测。在Triton编译器中的实践表明,线性布局系统能显著提升性能并减少代码量,特别适用于矩阵乘法和稀疏注意力等场景。结合Tensor Core等硬件特性,F2线性代数为深度学习编译器优化提供了统一 阅读详情


1.起因(Why HBase  Coprocessor)

HBase作为列族数据库最经常被人诟病的特性包括:无法轻易建立“二级索引”,难以执行求和、计数、排序等操作。比如,在旧版本的(<0.92)Hbase中,统计数据表的总行数,需要使用Counter方法,执行一次MapReduce Job才能得到。虽然HBase在数据存储层中集成了MapReduce,能够有效用于数据表的分布式计算。然而在很多情况下,做一些简单的相加或者聚合计算的时候,如果直接将计算过程放置在server端,能够减少通讯开销,从而获得很好的性能提升。于是,HBase在0.92之后引入了协处理器(coprocessors),实现一些激动人心的新特性:能够轻易建立二次索引、复杂过滤器(谓词下推)以及访问控制等。

2.灵感来源( Source of Inspration)

HBase协处理器的灵感来自于Jeff Dean 09年的演讲( P66-67)。它根据该演讲实现了类似于bigtable的协处理器,包括以下特性:

  • 每个表服务器的任意子表都可以运行代码
  • 客户端的高层调用接口(客户端能够直接访问数据表的行地址,多行读写会自动分片成多个并行的RPC调用)
  • 提供一个非常灵活的、可用于建立分布式服务的数据模型
  • 能够自动化扩展、负载均衡、应用请求路由
HBase的协处理器灵感来自bigtable,但是实现细节不尽相同。HBase建立了一个框架,它为用户提供类库和运行时环境,使得他们的代码能够在HBase region server和master上处理。

3.细节剖析(Implementation)

协处理器分两种类型,系统协处理器可以全局导入region server上的所有数据表,表协处理器即是用户可以指定一张表使用协处理器。协处理器框架为了更好支持其行为的灵活性,提供了两个不同方面的插件。一个是观察者(observer),类似于关系数据库的触发器。另一个是终端(endpoint),动态的终端有点像存储过程。

 3.1观察者(Observer)

观察者的设计意图是允许用户通过插入代码来重载协处理器框架的upcall方法,而具体的事件触发的callback方法由HBase的核心代码来执行。协处理器框架处理所有的callback调用细节,协处理器自身只需要插入添加或者改变的功能。

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

  • RegionObserver:提供客户端的数据操纵事件钩子:Get、Put、Delete、Scan等。
  • WALObserver:提供WAL相关操作钩子。
  • MasterObserver:提供DDL-类型的操作钩子。如创建、删除、修改数据表等。

这些接口可以同时使用在同一个地方,按照不同优先级顺序执行.用户可以任意基于协处理器实现复杂的HBase功能层。HBase有很多种事件可以触发观察者方法,这些事件与方法从HBase0.92版本起,都会集成在HBase API中。不过这些API可能会由于各种原因有所改动,不同版本的接口改动比较大,具体参考Java Doc。

RegionObserver工作原理,如图1所示。更多关于Observer细节请参见HBaseBook的第9.6.3章节。

regionobserver.png

图1 RegionObserver工作原理

 

3.2终端(Endpoint)

终端是动态RPC插件的接口,它的实现代码被安装在服务器端,从而能够通过HBase RPC唤醒。客户端类库提供了非常方便的方法来调用这些动态接口,它们可以在任意时候调用一个终端,它们的实现代码会被目标region远程执行,结果会返回到终端。用户可以结合使用这些强大的插件接口,为HBase添加全新的特性。终端的使用,如下面流程所示:

  1. 定义一个新的protocol接口,必须继承CoprocessorProtocol.
  2. 实现终端接口,该实现会被导入region环境执行。
  3. 继承抽象类BaseEndpointCoprocessor.
  4. 在客户端,终端可以被两个新的HBase Client API调用 。单个region:HTableInterface.coprocessorProxy(Class<T> protocol, byte[] row) 。rigons区域:HTableInterface.coprocessorExec(Class<T> protocol, byte[] startKey, byte[] endKey, Batch.Call<T,R> callable)

整体的终端调用过程范例,如图2所示:

rpc.png

图2 终端调用过程范例

4.编程实践(Code Example)

在该实例中,我们通过计算HBase表中行数的一个实例,来真实感受协处理器 的方便和强大。在旧版的HBase我们需要编写MapReduce代码来汇总数据表中的行数,在0.92以上的版本HBase中,只需要编写客户端的代码即可实现,非常适合用在WebService的封装上。

4.1启用协处理器 Aggregation(Enable Coprocessor Aggregation)

我们有两个方法:1.启动全局aggregation,能过操纵所有的表上的数据。通过修改hbase-site.xml这个文件来实现,只需要添加如下代码:

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

2.启用表aggregation,只对特定的表生效。通过HBase Shell 来实现。

(1)disable指定表。hbase> disable 'mytable'

(2)添加aggregation hbase> alter 'mytable', METHOD => 'table_att','coprocessor'=>'|org.apache.hadoop.hbase.coprocessor.AggregateImplementation||'

(3)重启指定表 hbase> enable 'mytable'

4.2统计行数代码(Code Snippet)
public class MyAggregationClient { 

private static final byte[] TABLE_NAME = Bytes.toBytes("mytable");
private static final byte[] CF = Bytes.toBytes("vent");
public static void main(String[] args) throws Throwable {
Configuration customConf = new Configuration();
customConf.setStrings("hbase.zookeeper.quorum",
"node0,node1,node2");
//提高RPC通信时长
customConf.setLong("hbase.rpc.timeout", 600000);
//设置Scan缓存
customConf.setLong("hbase.client.scanner.caching", 1000);
Configuration configuration = HBaseConfiguration.create(customConf);
AggregationClient aggregationClient = new AggregationClient(
configuration);
Scan scan = new Scan();
//指定扫描列族,唯一值
scan.addFamily(CF);
long rowCount = aggregationClient.rowCount(TABLE_NAME, null, scan);
System.out.println("row count is " + rowCount);

}
}


4.3 典型例子

  协处理器其中的一个作用是使用Observer创建二级索引。先举个实际例子: 
  我们要查询指定店铺指定客户购买的订单,首先有一张订单详情表,它以被处理后的订单id作为rowkey;其次有一张以客户nick为rowkey的索引表,结构如下: 

rowkey family 
dp_id+buy_nick1 tid1:null tid2:null ... 
dp_id+buy_nick2 tid3:null 
... 
该表可以通过Coprocessor来构建,实例代码: 

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class TestCoprocessor extends BaseRegionObserver {   
  2.     @Override   
  3.      public void prePut(final ObserverContext<RegionCoprocessorEnvironment> e,   
  4.      final Put put, final WALEdit edit, final boolean writeToWAL)   
  5.      throws IOException {   
  6.          Configuration conf = new Configuration();   
  7.          HTable table = new HTable(conf, "index_table");   
  8.          List<KeyValue> kv = put.get("data".getBytes(), "name".getBytes());   
  9.          Iterator<KeyValue> kvItor = kv.iterator();   
  10.          while (kvItor.hasNext()) {   
  11.              KeyValue tmp = kvItor.next();   
  12.              Put indexPut = new Put(tmp.getValue());   
  13.              indexPut.add("index".getBytes(), tmp.getRow(), Bytes.toBytes(System.currentTimeMillis()));   
  14.              table.put(indexPut);   
  15.          }   
  16.          table.close();   
  17.      }   
  18. }   

即继承BaseRegionObserver类,实现prePut方法,在插入订单详情表之前,向索引表插入索引数据。 

4.4索引表的使用 

先在索引表get索引表,获取tids,然后根据tids查询订单详情表。 
当有多个查询条件(多张索引表),根据逻辑运算符(and 、or)确定tids。 


4.5使用时注意 


1.索引表是一张普通的hbase表,为安全考虑需要开启Hlog记录日志。 
2.索引表的rowkey最好是不可变量,避免索引表中产生大量的脏数据。 
3.如上例子,column是横向扩展的(宽表),rowkey设计除了要考虑region均衡,也要考虑column数量,即表不要太宽。建议不超过3位数。 
4.如上代码,一个put操作其实是先后向两张表put数据,为保证一致性,需要考虑异常处理,建议异常时重试。 

4.6效率情况 


put操作效率不高,如上代码,每插入一条数据需要创建一个新的索引表连接(可以使用htablepool优化),向索引表插入数据。即耗时是双倍的,对hbase的集群的压力也是双倍的。当索引表有多个时,压力会更大。 
查询效率比filter高,毫秒级别,因为都是rowkey的查询。 
如上是估计的效率情况,需要根据实际业务场景和集群情况而定,最好做预先测试。 

4.7Coprocessor二级索引方案优劣 


优点:在put压力不大、索引region均衡的情况下,查询很快。 
缺点:业务性比较强,若有多个字段的查询,需要建立多张索引表,需要保证多张表的数据一致性,且在hbase的存储和内存上都会有更高的要求。

Hbase学习之——协处理Coprocessor的使用 一、Aggregation 协处理器Aggregation为了弥补Hbase作为列存储数据库,难以进行求和、计数、排序等操作,能够进行一些简单的聚合操作,Aggregation将计算放在了server端,即region上,减少了网络通讯开销。 Aggregation有以下两种开启方式: 修改hbase-site.xml配置文件,启动全局aggregation,能操纵所有的表上的数据 <property> <name>hbase.coprocess. 阅读详情

相关推荐

大数据HBase(十六):HBase的协处理器(Coprocessor)

全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点。 目录 系列历史文章 HBase的协处理器(Coprocessor) 一、起源 二、协处理器主要的分类 三、HBase的协处理器_ObServer 四、HBase的协处理器_Endpoint 五、概念总结 六、HBase的协处理器总结 系列历史文章 2021年大数据HBase(十六):HBase的协处理器(Coprocessor) 2021年大数据HBas..

Lansonli(蓝深李)的博客 4404

HBase的Coprocessor协处理器

相关的配置参数在使用时,可以通过配置参数进行相关设置:hbase.coprocessor.user.enabled:指定是否启用用户定义的Coprocessor,默认为false。hbase.coprocessor.region.classes:指定应用到RegionServer的Coprocessor类。hbase.coprocessor.master.classes:指定应用到HMaster的Coprocessor类。

互联网知识分享 841

pytorch实现手语识别

连续手语识别项目,中文数据集CSL

masteryi-0018的博客 1万+

hbase client访问的超时时间、重试次数、重试间隔时间的配置

socket超时你认为有几种? 1:建立连接的超时时间; 2:读数据的超时时间。 可以配置如下几个参数: 1. hbase.rpc.timeout:rpc的超时时间,默认60s,不建议修改,避免影响正常的业务,在线上环境刚开始配置的是3秒,运行半天后发现了大量的timeout error,原因是有一个region出现了如下问题阻塞了写操作:“Blocking updates …

dub_lys的博客 7090

思科模拟器Cisco Packet Tracer交换机的管理配置

一、交换机的管理方式:带内管理和带外管理 通过交换机的 Console 端口管理交换机属于带外管理;这种管理方式不占用交换机的网络端口,第一次配置交换机必须利用 Console 端口进行配置。 通过 Telnet、拨号等方式属于带内管理。 二、控制台配置思科交换机 1.新建拓扑图 新建拓扑,选择console线连接交换机和PC,一端接交换机的console口,一端接PC的RS 232 口(...

qq_37992321的博客 2万+

手把手教你用STM32实现SPWM逆变器控制(附完整代码)

本文详细介绍了如何使用STM32微控制器实现SPWM逆变器控制,包括硬件设计、PWM生成配置、正弦表生成与DMA传输,以及闭环控制与性能优化。通过完整的代码示例和实测数据,帮助开发者快速掌握SPWM技术,应用于新能源和电力电子领域。

weixin_29296241的博客 319

2021SC@SDUSC hbase源码分析(八)Coprocessor分析(2)

2021SC@SDUSC hbase源码分析(八)Coprocessor分析(2) 目录2021SC@SDUSC hbase源码分析(八)Coprocessor分析(2)Endpoint介绍Endpoint与Observer区别Endpoint工作流程Endpoint部分代码getMaxgetMingetSumgetAvgEndpoint使用Coprocessor加载1.静态加载2.动态加载 2021SC@SDUSC 2021SC@SDUSC 2021SC@SDUSC 2021SC@SDUSC Endpoi

weixin_45785943的博客 1967

基于Apache MINA SSHD配置及应用

Apache MINA SSHD是一个基于Java的开源SSH服务器/客户端实现,支持SSH2协议,提供文件传输、shell访问等功能。该代码实现了一个SftpClientService服务类,封装了SFTP文件操作,包括读取文件(readOnce/readLines)和写入文件(writeOnce)等核心功能。通过SftpProperties配置类管理连接参数,并采用Builder模式创建SSH会话。主要特点包括:支持大文件分块传输、自动创建目录、严格的异常处理和...

流沙QuickSand 945

HBase Coprocessor:扩展HBase功能的利器

想象你经营着一家大型超市(HBase集群),货架(Region)上摆满了商品(数据),顾客(Client)来购物时,收银员(RegionServer)负责找商品、结账。但如果顾客问:“今天所有饮料的总销售额是多少?” 收银员需要跑遍所有饮料货架逐个统计,效率很低;计算逻辑只能在客户端执行,大量数据需要跨网络传输,处理效率低下。

大数据洞察的博客 888

ptrade量化策略之ST股弱转强,回测年化115%

本策略的核心是精选ST股票,国九条过滤,防止直接暴雷退市,只做ST股票的弱转强

qq_29301281的博客 1788

WebDriverAgent 菜鸟解析篇

WebDriverAgent 是一个用于模拟移动设备浏览器的 Python 库,可以用来在 PC 上模拟移动设备的浏览器操作,从而进行自动化测试。下面是一个菜鸟对 WebDriverAgent 源码的解析篇,希望能对初学者有所帮助。

DJ355的博客 1223

理解HBASE COPROCESSOR笔记

What is Coprocessor? Simply stated, Coprocessor is a framework that provides an easy way to run your custom code on Region Server(HBase就是运行在RegionServer上的你可以定制程序).In a scenario like this it’s better to

cmdssd1的专栏 4381

2026.2.11:ollama api推理GLM-OCR模型识别图片

本文介绍了使用Ollama API调用GLM-OCR模型进行图片文字识别的过程。首先通过ollama pull glm-ocr:latest命令拉取模型,然后使用Python脚本调用API接口。代码示例展示了如何发送包含图片路径的请求,并处理返回的识别结果,支持文本、公式和表格三种识别模式。运行结果展示了模型对输入图片的识别效果,为开发者提供了便捷的OCR解决方案。

拥抱具身智能,昇腾Ascend C 370

hbase的coprocessor使用

1.起因(Why HBase  Coprocessor) HBase作为列族数据库最经常被人诟病的特性包括:无法轻易建立“二级索引”,难以执行求和、计数、排序等操作。比如,在旧版本的(计数据表的总行数,需要使用Counter方法,执行一次MapReduce Job才能得到。虽然HBase在数据存储层中集成了MapReduce,能够有效用于数据表的分布式计算。然而在很多情况下,做一些简单的

Hadoop、HBase、ElasticSearch、Storm、Kafka、Spark 8899

学Simulink——基于电能质量治理的场景实例:静止无功发生器(SVG)与并网逆变器的结合

本文详细介绍了基于Simulink的SVG与光伏并网逆变器联合仿真建模方法。系统包含光伏单元、SVG主电路、控制策略(无功检测+双闭环控制)等模块,通过ip-iq法实现动态无功补偿。仿真结果表明,SVG能快速响应负载变化,将功率因数提升至0.98以上,有效稳定母线电压。该方案为新能源并网系统提供了有功/无功协同控制解决方案,具有10ms级响应速度和±5kvar补偿能力。文章提供了完整的建模流程、控制算法实现和结果分析,可作为电力电子与电能质量治理领域的实践指导。

amy_mhd的博客 167

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

HBase Coprocessor实现HBase二级索引

用Coprocessor实现HBase的二级索引,遇到了很多问题,记录一下 首先本次的感想是: 官方文档很重要! 日志非常重要!!! 用的数据是POES粒子通量数据,选取其中的位置信息,mag_lat_sat, mag_lon_sat,时间信息time,L值IGRF_L和B值Btot,以及各能段0度和90度方向质子和电子的粒子通量数据存储,row key是通过L、lat、lon计算出来的索...

touziss的博客 1051

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

什么是hbase Coprocessor

HBase客户端查询存在的问题 Scan 用Get/Scan查询数据, Filter 用Filter查询特定数据 以上情况只适合几千行数据以及不是很多的列的“小数据”。 当表扩展为亿万行及百万列时,在通过网络传递移动大量的数据导致网络拥堵,且客户端需要足够多内存来处理这么大量数据的计算操作,另外,客户端代码也会变的大而复杂。 解决方案 移动计算比移动数据更划算 Coprocessor将运算移动到数据所处的节点。 什么是Coprocessor? 简单来说,Coprocessor是一个框架,

思考、总结、专注 615

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Hbase 协处理器 Coprocessor

Hbase 协处理器 CoprocessorCoprocessor简介HBase 是一款基于 Hadoop 的 key-value 数据库,它提供了对 HDFS 上数据的高效随机读写服务,完美地填补了 Hadoop MapReduce 仅适于批处理的缺陷,利用协处理器,用户可以编写运行在 HBase Server 端的代码。HBase 支持两种类型的协处理器,Endpoint 和 Observer。

Steve lock的blog记录之地 5349

hbase coprocessor 源码分析

关于HBaseCoprocessor HBaseCoprocessor是一套通信框架,能够在客户端向RegionServer注入代码并执行获取结果。基于HBaseCoprocessor,可以实现在RegionServer层面的聚合、访问控制及二次索引等功能,从服务端丰富HBase的功能。 HBase Coprocessor框架 HBaseCoprocessor的核心,是类似于

zhaokunwu的专栏 4239

Hbase coprocessor 初涉

HBase-Coprocessor 对于 HBase coprocessor 个人感觉最基础且最好的文章:Coprocessor Introduction. hbase coprocessor 可以大致分为两类:observers && endpoint. observer : 可以简单理解为触发器,trigger。 Region Observer : preGet, postG...

weixin_33850015的博客 434
上一篇: Hbase总结(五)-hbase常识及habse适合什么场景
下一篇: Hbase总结(十)Hhase性能调优
codepython
博客等级 码龄20年 125粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值