HBase ORM SimpleHBase设计

HBase源码分析之Simple权限验证 有了用户的机制,见HBase源码分析之用户,就可以对用户进行权限控制了,HBase提供了AccessController作为自带的认证方式,HBase称之为simple。 1. 配置AccessController HBase自带了AccessController,所以只要在conf/hbase-site.xml中设置好以下属性,即可生效。 property> name>hba 阅读详情

目前企业软件开发占据主流的开发模式为面向对象模式。无论是建立在集合论之上的传统关系型数据库,还是以CAP定理/Hadoop/BigTable为基石的HBase,都面临以下的基本问题:

  • 如何保存对象到数据存储?
  • 如何从数据存储获取对象?
  • 如何更新数据存储中的现有数据?数据存储的类型系统和开发语言(Java)的类型系统之间如何相互转换?

简而言之,数据存储如何提供增、删、改、查的服务能力,应用如何方便的使用该能力。关系型数据库给出的答案为SQL,JDBC和各种ORM框架(典型例子为Hibernate和MyBatis)。

HBase ORM

ORM即Object-Relational mapping,对于HBase而言不存在Relational,因此该名称不准确,只是ORM做为一个术语使用太过广泛,这里泛指数据存储和Object之间的映射。

HBase的设计和RDBMS差异较大,因此除了上一小节的问题外,还需要解决如下问题:

  • 如何映射HTable的RowKey?
  • 如何映射HTable的bytes到Java类型?
  • 如何映射HTable的多版本能力?

本文着重介绍HBase ORM SimpleHBase框架,并和另一个HBase ORM Phoenix(http://phoenix.incubator.apache.org/)做比较。

SimpleHBase简介

SimpleHBase(https://github.com/zhang-xzhi/simplehbase)是Java和HBase之间的轻量级中间件,主要包含以下功能:

  • 数据类型映射:Java类型和HBase的bytes之间的数据转换。
  • 简单操作封装:封装了HBase的put,get,scan等操作为简单的Java操作方式。
  • HBase query封装:封装了HBase的filter,可以使用SQL-like的方式操作HBase。
  • 动态query封装:类似于mybatis,可以使用xml配置动态语句查询hbase。
  • insert,update支持: 建立在HBase的checkAndPut之上。
  • HBase多版本支持:提供接口可以对HBase多版本数据进行查询,映射。
  • HBase原生接口支持。
  • HTablePool管理。
设计理念

Phoenix的设计理念为:We put the SQL back into NoSql。该理念的优点如下:

  1. SQL做为大众熟悉的API,用户学习成本较低。
  2. 减少程序员的代码开发量。
  3. 性能优化对用户透明。
  4. 兼容既有的基于SQL的工具。

该理念的缺点如下:

  1. SQL屏蔽了HBase和RDBMS设计上的差别,抽象泄露的风险较高。关于抽象泄露参考http://www.joelonsoftware.com/articles/LeakyAbstractions.html。
  2. 为了SQL兼容,引入了JDBC层。由于RDBM和HBase的设计与模型本身差异较大,引入JDBC后,导致部分HBase的特性难以友好的支持。
  3. 大部分的应用不会直接使用JDBC,而是使用ORM,技术栈较深,导致抽象泄露问题更加严重。

SimpleHBase的设计理念为:贴近HBase的ORM设计,简化HBase之上的Java app开发。

该理念的优点如下:

  1. 设计紧贴HBase的逻辑模型,提供一站式HBase ORM解决方案。
  2. 减少程序员的代码开发量。
  3. 用户友好的HBase特征支持。

该理念的缺点如下:

1. 不兼容SQL,有一定的学习成本。

SimpleHBase和Phoenix的技术栈如下所示。

类型转换

Phoenix支持如下类型,目前不支持自定义类型。每种类型的序列化(转化为bytes保存到HBase中)和反序列化为固定的方式。

INTEGER

UNSIGNED_INT

BIGINT

UNSIGNED_LONG

TINYINT

UNSIGNED_TINYINT

SMALLINT

UNSIGNED_SMALLINT

FLOAT

UNSIGNED_FLOAT

DOUBLE

UNSIGNED_DOUBLE

DECIMAL

BOOLEAN

TIME

DATE

TIMESTAMP

UNSIGNED_TIME

UNSIGNED_DATE

UNSIGNED_TIMESTAMP

VARCHAR

CHAR

BINARY

VARBINARY

SimpleHBase支持如下类型。每种类型的序列化和反序列化方式,可以使用SimpleHBas提供的默认方式,也可以用户自定义。

boolean

byte

short

char

int

long

float

double

String

Date

Enum

用户自定义类型:

通过TypeHandler支持自定义类型扩展。

SimpleHBase的rowkey和类型映射如下:

RowKey支持

Phoenix把rowkey内化为table的PRIMARY KEY处理。

如

CREATE TABLE IF NOT EXISTS us_population ( state CHAR(2) NOT NULL, city VARCHAR NOT NULL, population BIGINT CONSTRAINT my_pk PRIMARY KEY (state, city));

同时,Phoenix的Salted Tables技术可以解决region server的热点问题。

SimpleHBase认为rowkey的设计是HBase应用设计中最重要的一环。因此,对于RowKey单独建模,给用户提供较高的灵活性。实际上,对于HBase而言,任何可以转换为bytes的对象都可以做为rowkey使用。

简单场景支持

对于简单的put,scan,delete场景。

Phoenix提供的方案为:

Java app -> ORM(可选) -> SQL -> phoenix -> HBase

SimpleHBase提供的方案为:

Java app -> SimpleHBase-> HBase

无需SQL这一层,直接用类似如下代码即可实现。

simpleHbaseClient.putObject(new PersonRowKey(1), person);

Person result = simpleHbaseClient.findObject(new PersonRowKey(1),

Person.class);

简单SQL支持

Phoenix做为HBase上面的SQL封装,这块的功能比较丰富。SimpleHBase提供SQL-Like方式的查询。支持常见的简单查询场景。目前,SimpleHBase提供的运算符如下:

lessequal

less

greaterequal

greater

notequal

equal

notmatch

match

in

notin

between

notbetween

isnull

Isnotnull

Ismissing

isnotmissing

and

or

()

复杂SQL支持

对于group by, join等较为复杂的SQL语法,Phoenix支持,SimpleHBase目前不支持。

动态SQL支持

动态查询可以避免应用代码中大量if-else之类的判断,拼接查询条件,提高代码质量。

Phoenix的方案:

引入其他ORM框架(如hibernate或mybatis)。

Simplehbase的方案:

类似mybatis,提供动态查询能力。

目前simplehbase提供的动态查询标签如下:

isNull

isNotNull

isEmpty

isNotEmpty

isPropertyAvailable

isNotPropertyAvailable

isEqual

isNotEqual

isGreaterThan

isGreaterEqual

isLessThan

isLessEqual

Dynamic

HBase时间戳和多版本支持

Phoenix方案:

时间戳,由HBase管理,或在connection建立时指定一个时间戳,该connection上所有操作就是基于该时间戳。

不支持多版本,只能支持最新值。

Simplehbase方案:

时间戳可以由HBase管理,或者由应用自行指定。版本数,可以选择最新版本,或者多版本支持,由应用指定。

rowkey

timestamp

name

Age

key1

t4

d

 

key1

t3

c

3

key1

t2

 

2

key1

t1

a

1

假设name和age映射为一个Person类型对象。SimpleHBase支持如下映射方式:

  • 一个rowkey对应的所有最新值映射为一个object。
    例:该数据被映射为Person(name=d,age=3)。
  • 一个rowkey对应的时间戳范围内(由用户指定)的最新值映射为一个object (Phoenix只提供一个时间戳,而不是时间戳范围) 。例:指定时间戳范围(左闭右开)为 [t1,t3),该数据被映射为Person(name=a,age=2)。
  • 一个rowkey对应的所有值,以时间戳为维度,映射成一个object list。
    例:指定maxVersion(控制最大版本数)为4,该数据被映射为一个person的列表,按照时间戳排序。
    Person(name=d)
    Person(name=c,age=3)
    Person(age=2)
    Person(name=a,age=1)
  • 一个rowkey对应的时间戳范围内的所有值,以时间戳为维度,映射成一个object list。
    例:指定时间戳范围为 [t1,t3),maxVersion为4,该数据被映射为一个person的列表,按照时间戳排序。
    Person(age=2)
    Person(name=a,age=1)
其他

SimpleHBase中包含了一些HBase特性的封装或增强。

如:

SimpleHBase支持批量put操作,以提升性能。

HTable的autoflush设置为false,同时,有一个线程定期做flush。既可以提高应用的吞吐能力,也可以有一定的flush保证。

小结

目前,SimpleHBase已经在阿里的多个项目中得到应用。从设计理念看,SimpleHBase并不是Phoenix的一个重复轮子,而是有着自己清晰的目标。即贴近HBase的ORM设计,简化HBase之上的Java app开发。同时,又可以把HBase的一些核心概念暴露给用户,方便用户对HBase特性的使用。

关于作者:

张信之,支付宝高级工程师,目前负责支付宝消费数据组,西安交通大学计算机科学与技术专业硕士。兴趣广泛,近期工作聚焦在HBase ORM框架Simplehbase上。

hbase orm simplehbase v1.0 simplehbase是java和hbase之间的轻量级中间件。 主要包含以下功能。 数据类型映射:java类型和hbase的bytes之间的数据转换。 简单操作封装:封装了hbase的put,get,scan等操作为简单的java操作方式。 hbase query封装:封装了hbase的filter,可以使用sql-like的方式操作hbase。 动态query封装:类似于myibatis,可以使用xml配置动态语句查询hbase。 insert,update支持: 建立在hbase的checkAndPut之上。 hbase多版本支持:提供接口可以对hbase多版本数据进行查询,映射。 hbase批量操作支持。 hbase原生接口支持。 HTablePool管理。 HTable count和sum功能。 立即下载

相关推荐

hbase轻量级中间件simplehbase v0.1简介

NULL 博文链接:https://zhang-xzhi-xjtu.iteye.com/blog/1953939

ORM-HBASE 一个轻量级映射框架

基于hbase使用复杂原因,所以我有了想写一个类似于hibernate那种对象关系映射框架(ORM)的想法,像操作对象一样方便的操作HBase数据库,但是它要是轻量级的,无侵入的,只提供简单的CURD、分页、映射功能的一个基础功能。

6800

基于注解的hbase orm小工具,目前比较简单

基于注解的hbase orm小工具,目前比较简单

hbase安装包_开源工具 | HBase表管理系统——HBaseManager2.0.2

1. 前言在之前的文章中已经为大家简单介绍过HBaseManager,它提供界面化的方式来帮助我们有效地管理我们集群的HBase表信息。在HBase的维护工作中,绝大多数需要在HBase Shell下执行的命令,都可以选择在系统中完成。HBaseManager部署方便,一键启动,界面美观大方,功能流畅友好,绝对能成为你HBase运维工作中的一大助力。经过近一个月的开发迭代与BUG修复,系...

weixin_39559119的博客 659

S32DS3.5图形化配置实战:从零构建S32K144通信接口工程

本文详细介绍了如何使用S32DS3.5图形化配置工具从零构建S32K144通信接口工程。通过实战演示引脚配置、时钟树设置、SPI接口搭建等关键步骤,帮助开发者快速掌握NXP S32K系列开发技巧,提升嵌入式开发效率。特别针对S32DS3.5版本的新特性进行了深度解析,包括智能代码生成和调试优化方法。

weixin_26834815的博客 200

告别天价授权!手把手教你用TwinCAT 3.1搭建EtherCAT主站(Windows 10/11保姆级教程)

本文详细介绍了如何在Windows 10/11系统上使用TwinCAT 3.1免费搭建EtherCAT主站,帮助中小企业和个人开发者低成本实现工业自动化。从环境准备、许可证策略到安装配置和实战开发,提供保姆级教程,涵盖PLC编程、运动控制及硬件选型建议,助您轻松入门工业控制领域。

weixin_30664615的博客 363

hbase orm中间层hbasedao

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34247299的博客 203

避坑指南:Qwen2.5-VL图片预处理中常见的5个尺寸错误

本文深入解析了Qwen2.5-VL模型在图片预处理环节中开发者最常遇到的五个尺寸错误,包括动态分辨率对齐、宽高比超标、像素数限制等问题。文章结合源码解读,详细剖析了`process_vision_info`函数和`resize`逻辑,并提供了具体的排查流程图与参数设置建议,旨在帮助开发者构建健壮的预处理流水线,有效规避显存溢出与推理失败的风险。

weixin_29290379的博客 178

HBase学习记录

最近对于HBase的学习,先是对于之前学习的Hadoop相关内容的复习,再是对于HBase相关架构,特性的学习,最后是根据需求,使用SimpleHBase进行的开发任务实践,大概完成了对于消费记录的HBase,MySQL双写存储。hadoop生态圈: Pig:一种操作hadoop的轻量级脚本语言,用来快速轻松的处理巨大的数据。 Hive:满足了数据仓库的需求,适用于离线的进行数据处理与分析工作。 H

[2,+∞)的博客 589

C语言由scanf(“%d“,)非法输入字符造成的死循环及其解决方案

声明:此文章仅作为C语言学习历程中的思路整理,用于解决入门阶段较为浅显的问题,如有错误还请指正。 现象描述: 代码要求实现用户输入1或2,通过scanf("%d",&a)读取这个值,从而判断分属于1或2的两种情况。输入非1,2的数字都应该返回"Invalid Number!",并且要求重新输入数字。 while(a!=1&&a!=2) { printf("Invalid Number!\n"); printf("Enter the number:"); scan

weixin_49764077的博客 8721

YOLOv10改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型

本文记录的是基于MobileNet V3的YOLOv10目标检测轻量化改进方法研究。的模型结构是通过得来的,其中的基础模块结合了的深度可分离卷积、的线性瓶颈和倒置残差结构以及MnasNet中基于挤压和激励的轻量级注意力模块,使模型在性能、效率和灵活性方面都具有显著的优势。本文在替换骨干网络中配置了原论文中的small和large2种模型,以满足不同的需求。

Limiiiing的博客 515

新系统创建如何搭建一个简单的框架

背景:最近在搭建新的系统,因此在搭建系统的时候,我主要做了以下几个方面的事情 步骤: (1)首先实现一个模版回调做为一个业务入口,实现统一参数校验、业务执行、统一异常处理、统一监控埋点日志打印处理 (2)业务执行步骤:可以使用自己编写简单的工作工作流引擎和并发调用框架,做为基础公共模块供业务层使用。 (3)针对DB的操作,使用统一的mybatis自动代码生成框架生成代码,如果db是Hbas...

红豆和绿豆的博客 1680

【测开求职】面试题:计算机网络 详细版整理

本篇文章是笔者为准备研究生复试和校招而写,因此主要针对问答,注重理解,而不在于细节计算。读者可以先查看上面的链接走一遍计算机网络的整体框架结构。其中,重点难点以及易混淆的知识点,笔者会用其他文章进行了详述,在知识点处贴好了链接,有需要的可以查阅。

vector的博客 5937

【Apache HBase系列】HBase ORM框架GORA使用文档

HBase ORM框架GORA使用文档: 开源框架 Apache GORA 提供了一个内存中的大数据的数据模型和持久性。 Gora 支持列存储,关键值存储,文档存储和关系数据库管理系统,具有广泛的Apache Hadoop的MapReduce的支持和分析数据。 本文主要介绍了GORA 基于HBase的使用方法,主要参考文献来自于GORA官网。

Jonathan.Wei的专栏 5123

[自动化工具] 解放双手的利器:「自动邮件平台」工具助你高效搞定重复通知任务

摘要:自动邮件平台是一款零门槛自动化工具,帮助用户高效处理重复性邮件任务。该平台支持两种调度模式(指定日期和间隔天数),无需编码即可快速设置账单提醒、活动通知等任务。提供免费托管版(小时级调度)和自主部署版(分钟级调度),满足不同精度需求。典型应用场景包括客户跟进、系统监控等周期性任务。用户只需三步即可完成设置,还能扩展定制化功能。该工具让非技术人员也能轻松实现邮件自动化,释放时间专注更重要的工作。

每日出拳老爷子的博客 109

【OpenClaw企业级智能体实战】第04篇:OpenClaw成本优化实战——Token消耗降96%!claude-mem+OpenViking从入门到精通

OpenClaw作为企业级智能体框架,凭借强大的自动化能力成为企业数字化转型的热门工具,但原生机制导致的上下文冗余问题,让众多用户面临“Token消耗失控”的困境——单周账单数千元的案例屡见不鲜。本文基于阿里云实测数据与开源工具官方文档,先深度拆解OpenClaw成本黑洞的核心成因(记忆碎片化、Token指数级膨胀),再系统讲解两款核心优化工具(claude-mem单Agent记忆管理、OpenViking多Agent集群底座)的底层原理、算法架构与实现逻辑,提供从环境搭建、工具集成、参数调优到安全部署

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 706

探索阿里巴巴开源的SimpleHBase:让HBase更简单易用

探索阿里巴巴开源的SimpleHBase:让HBase更简单易用 项目简介 是阿里巴巴开源的一个轻量级HBase连接器,它旨在简化与Apache HBase的数据交互,为开发者提供更加简洁、高效的API接口。通过封装和优化原生HBase的操作,SimpleHBase可以在保持高性能的同时降低开发门槛,提高开发效率。 技术分析 简化API SimpleHBase对HBase的CRUD操作进行了高度抽...

gitblog_00028的博客 396

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

hbase simple权限一

一:shell执行: grant授权: 查看commands目录下grant.rb文件: security_admin.grant(user, permissions, table_name, family, qualifier) 进入security.rb文件执行: org.apache.hadoop.h...

weixin_33725722的博客 285

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java连接hbase_HBase 工具 | hbasesdk 推出HQL功能

hbase-sdk基于HBase Client的相关API开发而来的一款轻量级的HBase ORM框架。提供SQL查询功能,以类SQL的方式——HQL读写HBase数据。?针对HBase 1.x和2.xAPI的不同之处,在其上做了一层统一的封装。hbase-sdk分为spring-boot-starter-hbase和hbase-sdk-core两部分。SpringBoot项目中引入sp...

weixin_39922868的博客 374

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Hbase-checkAndPut()方法

Hbase中关于表中数据的添加(修改)的方法,常用的是void put(Put put),没有返回值 但是如果put了相同的数据,那么就会报错,其实不是很友好 所以,还有checkAndPut()方法 * Atomically checks if a row/family/qualifier value matches the expected * value. If it d...

BugEveryday的博客 1492

Hbase中checkAndPut操作

Hbase中Insert和Update操作没有明显的差别。 如果误操作,是否可以恢复数据? 方法:通过timeStamp找回数据。但是,如果我们可以在源头实现,是否更好呢? 问题: 客户端1: row1: family 1 : qulifier1(1) qulifier2(2) 客户端2: row1: family 1 : qulifier1(-1) qulifier2(-2)

u011163372的博客 7242

myhbse:hbase for orm

http://code.google.com/p/myhbase/ 最近用hbase开发系统,没有好的数据库维护工具,很不方便,就自己写了一个类似于orm for hbase ,数据建模已经基本够用。

supermy的专栏 296

Hbase框架简介

HBase ORM框架概念: HBase是一个构建在 Apache Hadoop和 Apache ZooKeeper之上面向列存储、的分布式数据库. HBase是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列存储的动态模式数据库。 和传统关系数据库不同,HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键

旧时明月 719

HBase ORM框架GORA使用文档

开源框架 Apache GORA 提供了一个内存中的大数据的数据模型和持久性。 Gora 支持列存储,关键值存储,文档存储和关系数据库管理系统,具有广泛的Apache Hadoop的MapReduce的支持和分析数据。 GORA使用步骤: 1、配置gora.properties文件 [java] view plaincopy

每天积累一点,一年后你会发现,自己变化很大 967
上一篇: HBase总结(十九)数据导入方式
下一篇: Windows下安装HBase
codepython
博客等级 码龄20年 125粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值