HBASE表设计

走向云计算之HBase模式设计及表设计案例 一、概述 HBase有以下几个特点: HBase列的可以动态增加,并且列为空就不存储数据,节省存储空间. hbase自动切分数据,使得数据存储自动具有水平scalability. Hbase可以提供高并发读写操作的支持。 HBase不能支持条件查询,只支持按照Row key来查询. 暂时不能支持Master server的故障切换,当Master宕机后,整个存储系统就会挂掉. 因为HBa 阅读详情

1. 表的设计

1.1 Pre-Creating Regions

默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这 个region足够大了才进行切分。一种可以加快批量写入速度的方法是通过预先创建一些空的regions,这样当数据写入HBase时,会按照 region分区情况,在集群内做数据的负载均衡。

预分区的一个例子:

public static boolean createTable(HBaseAdmin admin, HTableDescriptor table, byte[][] splits) throws IOException { try {

    admin.createTable(table, splits); return true;

  } catch (TableExistsException e) {

    logger.info("table " + table.getNameAsString() + " already exists"); // the table already exists...  return false;  

  }

} public static byte[][] getHexSplits(String startKey, String endKey, int numRegions) { byte[][] splits = new byte[numRegions-1][];

  BigInteger lowestKey = new BigInteger(startKey, 16);

  BigInteger highestKey = new BigInteger(endKey, 16);

  BigInteger range = highestKey.subtract(lowestKey);

  BigInteger regionIncrement = range.divide(BigInteger.valueOf(numRegions));

  lowestKey = lowestKey.add(regionIncrement); for(int i=0; i < numRegions-1;i++) {

    BigInteger key = lowestKey.add(regionIncrement.multiply(BigInteger.valueOf(i))); byte[] b = String.format("%016x", key).getBytes();

    splits[i] = b;

  } return splits;

}

1.2 Row Key

HBase中row key用来检索表中的记录,支持以下三种方式:

· 通过单个row key访问:即按照某个row key键值进行get操作;

· 通过row key的range进行scan:即通过设置startRowKey和endRowKey,在这个范围内进行扫描;

· 全表扫描:即直接扫描整张表中所有行记录。

在HBase中,row key可以是任意字符串,最大长度64KB,实际应用中一般为10~100bytes,存为byte[]字节数组,一般设计成定长的。

row key是按照字典序存储,因此,设计row key时,要充分利用这个排序特点,将经常一起读取的数据存储到一块,将最近可能会被访问的数据放在一块。

举个例子:如果最近写入HBase表中的数据是最可能被访问的,可以考虑将时间戳作为row key的一部分,由于是字典序排序,所以可以使用Long.MAX_VALUE - timestamp作为row key,这样能保证新写入的数据在读取时可以被快速命中。

1.3 Column Family

不要在一张表里定义太多的column family。目前Hbase并 不能很好的处理超过2~3个column family的表。因为某个column family在flush的时候,它邻近的column family也会因关联效应被触发flush,最终导致系统产生更多的I/O。感兴趣的同学可以对自己的HBase集群进行实际测试,从得到的测试结果数 据验证一下。

1.4 In Memory

创建表的时候,可以通过HColumnDescriptor.setInMemory(true)将表放到RegionServer的缓存中,保证在读取的时候被cache命中。

1.5 Max Version

创建表的时候,可以通过HColumnDescriptor.setMaxVersions(int maxVersions)设置表中数据的最大版本,如果只需要保存最新版本的数据,那么可以设置setMaxVersions(1)。

1.6 Time To Live

创建表的时候,可以通过HColumnDescriptor.setTimeToLive(int timeToLive)设置表中数据的存储生命期,过期数据将自动被删除,例如如果只需要存储最近两天的数据,那么可以设置 setTimeToLive(2 * 24 * 60 * 60)。

1.7 Compact & Split

在HBase中,数据在更新时首先写入WAL 日志(HLog)和内存(MemStore)中,MemStore中的数据是排序的,当MemStore累计到一定阈值时,就会创建一个新的 MemStore,并且将老的MemStore添加到flush队列,由单独的线程flush到磁盘上,成为一个StoreFile。于此同时, 系统会在zookeeper中记录一个redo point,表示这个时刻之前的变更已经持久化了(minor compact)。

StoreFile是只读的,一旦创建后就不可以再修改。因此Hbase的更新其实是不断追加的操作。当一个Store中的StoreFile达到一定的阈值后,就会进行一次合并(major compact),将对同一个key的修改合并到一起,形成一个大的StoreFile,当StoreFile的大小达到一定阈值后,又会对 StoreFile进行分割(split),等分为两个StoreFile。

由于对表的更新是不断追加的,处理读请求时,需要访问Store中全部的StoreFile和MemStore,将它们按照row key进行合并,由于StoreFile和MemStore都是经过排序的,并且StoreFile带有内存中索引,通常合并过程还是比较快的。

实际应用中,可以考虑必要时手动进行major compact,将同一个row key的修改进行合并形成一个大的StoreFile。同时,可以将StoreFile设置大些,减少split的发生。

大数据处理中HBase的表设计最佳实践 对表设计极度敏感。如果把HBase比作一个超级仓库,表设计就是仓库的"货架布局图"——布局合理,工人(查询请求)能快速找到货物(数据);布局混乱,即使仓库再大,找东西也像大海捞针。用通俗易懂的语言,带读者从0到1掌握HBase表设计的核心原则和最佳实践,包括RowKey设计、列族划分、Region分区、版本控制等关键环节,同时规避热点写入/查询、数据倾斜等经典问题。 阅读详情

相关推荐

DeepSpeed Zero3 Offload实战:从GCC版本检查到环境配置的完整避坑指南

本文是一份针对DeepSpeed Zero3 Offload部署的完整避坑指南。针对训练中常见的`AttributeError: ‘DeepSpeedCPUAdam‘ object has no attribute ‘ds_opt_adam`报错,文章深入剖析了其根源在于GCC编译器版本过低。指南提供了从系统GCC版本深度探查、安全启用高版本GCC环境,到DeepSpeed一致性安装验证的全链路实战方案,旨在帮助用户构建稳定的大模型训练环境。

weixin_29070721的博客 474

Hbase中表结构的设计

Hbase表设计

qq_37400096的博客 2272

别再为GEE注册发愁了!用谷歌Cloud Project,5分钟搞定谷歌地球引擎账户(保姆级图文)

本文提供2024最新版谷歌地球引擎(GEE)账户注册的保姆级教程,通过谷歌Cloud Project快速完成注册,5分钟极速通关。详细解析注册前的准备、分步图解流程、常见误区及解决方案,帮助用户避开90%的注册陷阱,直达GEE核心功能区。

weixin_42557830的博客 202

HBase表设计

设计表保存应用中用户互粉的信息。

qq_41810183的博客 668

手把手教你用GD32F407VET6的EXMC驱动外部SRAM,搞定大内存需求

本文详细介绍了如何使用GD32F407VET6的EXMC外设驱动外部SRAM,解决嵌入式开发中的大内存需求问题。通过硬件连接方案、EXMC时序配置与初始化步骤,以及软件集成与内存管理技巧,帮助开发者快速实现内存扩展。特别适合需要处理图形显示缓冲、音频处理等大内存场景的GD32F407开发者。

weixin_30752699的博客 348

处理SAP资产折旧AFAB 过账报错:“科目 8019010100 要求一个成本会计分配”

本文介绍如何处理资产折旧报错 ““科目XXXXXXX 要求一个成本会计分配””

IT小职员 2777

Hbase实战处理(一)关于hbase的表设计和集成

hbase集群的HA配置(假如有3台机器(同时是regionserver角色),master、slaver1、slaver2)stop-hbase.sh cd /home/hadoop-twq/bigdata/hbase-1.2.6/conf vi backup-masters 在master机器上文件增加如下的记录:slave1 ---backup master的节点ip---把backup的信息同步给其余的slave。jps验证访问: http://slave1:16010。

sheep8521的博客 1769

R语言机器学习算法实战系列(十五)随机森林生存预后模型+SHAP值 (Random Survival Forest + SHAP)

本教程运用随机森林生存分析筛选与患者生存状态显著相关特征。该方法借随机森林这一强大机器学习算法,构建多棵决策树并集成结果,以提高生存分析准确性,识别关键生物标志物。接着,利用选定特征构建风险得分,将多个特征转化为单一数值,量化患者风险水平。之后,依据风险得分将患者分为高、低风险亚型,为临床治疗提供个性化指导。最后,通过分析时间依赖的 ROC 曲线评估模型长期预测能力。此曲线计算不同阈值下的真正例率与假正例率,在多个时间点评估,全面展现模型长期稳定性与准确性。。并且增加了SHAP值评估特征重要性

专注生信领域 2627

HBase表结构设计(结构、创建、压缩、分区、命名空间等)

HBase表结构设计(结构、创建、分区、命名空间等) 任务表述: 如果用户点击某一行数据则触发接口写数据进入HBase。那么当用户再次读取数据的时候数据A和数据B返回的数据就需要给返回的数据另外增加一个字段说明,即当前信息是否已阅。 需要接口及参数: 记录已阅写入HBase表的接口,需要请求参数,userid及id[其中id以逗号分隔可以多个];其中的功能也包括删除该记录的功能。 修改原有数据A和数据B接口,请求参数增加userid字段,返回内容增加是否已阅字段; HBase表结构设计 表名.

data+scenario+science+insight 2401

效果炸裂_安装midscene_copw基于midscene操作电脑_基于视觉的软件测试执行_MIDSCENE的安装和使用---AI大模型应用探索0012

摘要:本文介绍了如何通过安装MidSceneJS来增强Copaw的屏幕操作能力。首先需要安装Node.js和npm,并配置淘宝镜像源加速安装。然后全局安装MidScene CLI工具(npm install @midscene/cli -g)。接着配置视觉大模型服务,通过设置环境变量指定模型API密钥、名称、基础URL和家族类型(如qwen3.5-27b),配置文件需存放在C:\Users\Administrator.copaw目录。安装成功后,MidScene已能成功识别并操作屏幕,使用效果良好。文中还提

添柴程序猿的专栏 644

基于YOLOv8的违规抽烟/打电话检测系统:从数据集构建到部署实战

模型优点缺点精度高速度慢(5 FPS)SSD速度快小目标检测差YOLOv5平衡性好官方支持停止YOLOv8最新、最快、最准需要PyTorch环境YOLOv8相比前代:骨干网络升级(C2f模块)无锚框检测(Anchor-Free)动态任务对齐分配(TaskAlignedAssigner)支持分类/检测/分割/姿态估计。

YOLO 98

分布式存储学习——HBase表结构设计

本节将介绍如何设计HBase的模式(Schema),将对比HBase与RDBMS的模式设计的异同,重点介绍模式设计中的两个要点——Rowkey和Column Family,并结合4个实例介绍如何进行HBase的模式设计。数据库的模式设计并不是一个新概念,在关系型数据库之前,模式设计的范式已经存在。其实,只要是可以称为“数据库”的系统,都存在模式设计的问题。作为一种典型的列式存储数据库,HBase的模式设计同样非常重要。

Future_yzx的博客 1696

NVIDIA Isaac GR00T N1 人形机器人强化学习入门教程(二)详细步骤

LeRobot 格式 1.1 加载数据集 要加载数据集,我们需要定义以下 3 项内容: 在数据中显示图像帧 我们还可以对 LeRobotSingleDataset 类中的数据进行一系列转换。下面展示了如何对数据进行转换。 现在看看应用转换后的数据有何不同。 例如,对状态和操作进行规范化和串联,对视频图像进行裁剪、调整大小和颜色抖动。 二、GR00T 推断 本教程介绍如何使用 GR00

2506_90492529的博客 3014

HBase与MapReduce整合及HBase表设计深度解析

输入格式Table,输出格式Table。Scan巧配置,Filter减负担。Map清洗,Reduce聚合,结果写回表。

IT技术学习与工作笔记分享 999

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Hbase表设计策略

Hbase表设计策略

zhdan~的专栏 312

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Hbase学习之四】Hbase表设计案例

环境  虚拟机:VMware 10   Linux版本:CentOS-6.5-x86_64   客户端:Xshell4  FTP:Xftp4  jdk8  hadoop-2.6.5  hbase-0.98.12.1-hadoop2 HBase中表的设计 主要是将原来的关系解开 问题: 例子: 表设计一: 表设计二: 这是一个双向查询,根据人员查角色,根据角...

weixin_30730053的博客 217

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

HBase 表设计

本篇来自 《HBase 实战》之 “HBase 表设计”。 我们需要思考几个问题: 一张表需要多少列族? 一个列族需要多少列? 什么数据应当存入列名中? 什么数据应当存入单元? 这里将会学习一下 HBase 的模式设计,讨论 HBase 设计模式和行键应该考虑的东西,为了应对系统的访问模式需要进行性能优化。 模式简单会有更多的调整空间:有些模式的写性能很棒,但是读取数据...

weixin_30343157的博客 165

HBase表设计介绍

概述在不久的过去,大数据的应用越来越多。为了支持这些应用以及扩展老的应用,很多新的数据管理系统被开发出来,被称作大数据革命。这些系统中很多都是开源和社区驱动的。Apache Hbase就是这样的一个系统,是一个开源的分布式的数据库,和Google Bigtable类似。并且发展迅速,为那些需要快速随机访问的大数据应用提供了好的选择。建立在Apache Hadoop之上,并且和Hadoop紧密的集成。

貌似君子的专栏 1万+

Hbase的表设计

一、应用背景 微博:用户表users、微博表weibos、用户关系表relations,和具体哪个公司的微博没关系。 微博中的用户想关注其他用户的微博,首先要维护一个特定用户的关注列表,例如张三关注了李四和王五。 为了要的得到张三应该看到的所有微博,你需要查找列表{李四、王五},然后读出列表中每个用户的所有微博,这个信息需要保存在hbase中。 二、表模式(Schema)设计应该...

dmr91325的博客 341

hbase表设计

xianrenqiu1234的博客 447

HBASE部分:HBASE中的表设计

HBase中表的设计 主要是将原来的关系解开 问题: 例子: 表设计一:  表设计二:  这是一个双向查询,根据人员查角色,根据角色查人员  问题: 0为顶级部门,1为子部门 放到一张表中不会对效率产生影响,因为HBASE是海量存储,海量读写的。  Redis是一个内存数据库,新浪微博是使用Redis用的最好的一家公司 Redis可以持久化到本地,可以...

wyqwilliam的博客 4709

Hbase表设计

典型的数据库一对一,一对多,多对多映射以及二级索引如何组织

everlasting_188-java从业者 678

HBase学习——3.HBase表设计

1.建表高级属性 建表过程中常用的shell命令 1.1 BLOOMFILTER 默认是 NONE 是否使用布隆过虑及使用何种方式,布隆过滤可以每列族单独启用 使用HColumnDescriptor.setBloomFilterType(NONE|ROW|ROWCOL)对列族单独启用布隆 - Default = ROW 对行进行布隆过滤 - 对 ROW,行键的哈希在每次插入行时将被添加到布隆...

weixin_30855761的博客 269
上一篇: HIVE RCFile高效存储结构
下一篇: Hbase实施方案估算方法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值