hbase列族不能太多的真相(一个table有几个列族就有几个store)

yaohaitao yaohaitao     2022-12-24     604

关键词:

今天和同事聊到这个问题,发现者自己理解上有点错误。借此机会记录下

HRegionServer内部管理了一系列HRegion对象,每个HRegion对 应了table中的一个region,HRegion中由多 个HStore组成。每个HStore对应了Table中的一个column family的存储,可以看出每个columnfamily其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个column family中,这样最高效。

HStore存储是HBase存储的核心,由两部分组成,一部分是MemStore,一 部分是StoreFile。MemStore是 Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile)。


进行split的条件:该regiion下所有的storeFile中最大的storeFile大小超过阀值即进行spliet
在文件层次上,不同的列族,存储在不同的文件中。但是不同的列族,可能会共享一个region。



/hbase/zz/3917ebd872c0adcb9d6c5a9cfd30b87f/a

/hbase/zz/3917ebd872c0adcb9d6c5a9cfd30b87f/a/9210131397650425238
/hbase/zz/3917ebd872c0adcb9d6c5a9cfd30b87f/b
/hbase/zz/3917ebd872c0adcb9d6c5a9cfd30b87f/b/7083844554431109536

如上所示:两个不同的列族,共享了同一个region(3917ebd872c0adcb9d6c5a9cfd30b87f)。

由于不同的列族会共享region,所以有可能出现,一个列族已经有1000万行,而另外一个才100行。当一个要求region分割的时候,会导致100行的列会同样分布到多个region中。
这样就出现了基数问题。(如果表存在多个列族,列族A有100万行,列族B有10亿行,那么列族A可能会被分散到很多个Region上,这会导致扫描列族A的性能低下)


(某个column family在flush的时候,它邻近的column family也会因关联效应被触发flush,最终导致系统产生更多的I/O)
所以,一般建议不要设置多个列族。














hbase-2hbase的原理和架构

...以表的形式存储数据,表由行和列组成。列划分为若干个列族,????RowKey:Hbase使用Rowkey来唯一的区分某一行的数据。如图中"rk001"????列族:Hbase通过列族划分数据的存储,列族下面可以包含任意多的列,实现灵活的数据存... 查看详情

hbase表的设计

...之前,我们需要先考虑的几个问题:这个表应该有多少个列族?列族使用的是什么数据?每个列族应该有多少列?列名应该是什么?尽管列名不必在建表的时候定义,但是后期读写数据时是需要知道的。单元存放什么数据?每个... 查看详情

hbase-hbase简介

...存储提供了便利。2.列式存储这里的列式存储其实说的是列族存储,Hbase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。HBase的面向列存储,有利于分析MySQL关系型数据库,面向行存储,有利... 查看详情

从存储在 hbase 中的 json 对象中查询多个列

...-07-1421:10:50【问题描述】:我们有一个json数据存储在一个列族下,它有几个名称/值对。我们使用不同的名称/值组合查询这些数据,这些查询并不特别倾向于任何名称/值对(这使得很难将它们分成列族)。提高这些查询性能的最... 查看详情

hbase原理总结

HBase分布式数据库,面向列存储(准确的说是面向列族),支持实时、随机读写。HDFS为Hbase提供可靠的底层数据存储服务,MapReduce为Hbase提供高性能的计算能力,Zookeeper为Hbase提供稳定服务和Failover机制,因此,Hbase是一个通过大量廉... 查看详情

将多个列族从 hbase 导入到 hive

】将多个列族从hbase导入到hive【英文标题】:Importmultiplecolumnfamiliesfromhbasetohive【发布时间】:2016-11-1508:16:12【问题描述】:我正在尝试将具有两个列族的hbase表移动到hive表中。我可以移动一个列族,但如何在同一个配置单元表... 查看详情

hbase--知识点总结3

Hbase知识点总结: hbase表中为什么列族的数量不能太多?因为当一个列族数据溢写的时候,其他列族也会发生数据溢写,但是其他列族中数据的数量还没有达到溢写的阈值,就会导致产生的小文件数量增多.而hbase有小文件合... 查看详情

hbase(代码片段)

...‘2‘,‘f2:ff3‘,‘hellohbase5‘scan表scan‘my_table‘删除一个列族alter‘my_table2‘,‘delete‘=>‘f2‘alter‘my_table2‘,N 查看详情

hbase学习笔记

...应的regionserver来负责.它是面向列的存储,具体来说是面向列族的存储,每一个列族的数据,根据rowkey进行分发,分给特定的region.Hbase是面向列族存储的,同属一个列族的数据是存在一起的。建议同一个列族的成员尽可能属性和大小近... 查看详情

hbase功能原理简述

...表(上亿行,上百万列)行(row):每一行由唯一的行键确定列族(columnFamily):每一行包含一个或多个列族,是列的集合列(column):列式存储,列是最基本单位,可能有多个版本的值时间戳(Timestamp):列的不同版本之间用时间戳区分单... 查看详情

HBase 列族:有多少?

】HBase列族:有多少?【英文标题】:HBasecolumnfamilies:howmany?【发布时间】:2012-10-0715:19:35【问题描述】:可能有很多类似的问题,但他们没有回答我的场景(至少我无法理解这一点)。比方说,我在HBase中有一个包含4个列族的表... 查看详情

Bigtable / HBase:丰富的列族与单个 JSON 对象

】Bigtable/HBase:丰富的列族与单个JSON对象【英文标题】:Bigtable/HBase:RichcolumnfamilyvsasingleJSONObject【发布时间】:2016-10-2102:08:15【问题描述】:我想在GoogleCloudBigtable(几个PetaBytes)上存储大量数据以供服务。我计划使用主键访问数... 查看详情

hbase名词解析及关系梳理

...多个行组成.rowkey: hbase中行由一个rowkey和一个或多个列族组成,行在存储时按行键的的字典顺序排序.column列:hbase的列由列族名+列名组成例如:C1:User_id,C1:sex.列族(columnfamily):列族将一组列名及其值组织在一起,表中的每一行列族必... 查看详情

hbase从入门到精通11:hbase数据保存过程和region分裂

...的数据是存储在RegionServer上的一个个Region中的,表的一个列族对应于一个Region。Region是按照数据行键Rowkey的字典序来存储数据的。假如我们有一张表Bigdata,该表有一个列族Info,该列族下有一个列Name,且为了便于说明,假设行键... 查看详情

hbase基础和伪分布式安装配置

...主键,行键是HBase表天然自带的,创建表时不需要指定1.3列族(columnfamily),列的集合。一张表中有多个行健,一个行健读取出来的是一条记录,列族和MySQL中的列差不多,但是它是列的集合HBase中列族是需要在定义表时指定的,列... 查看详情

hbase基本架构及原理(代码片段)

...结构化的松散数据(列存NoSQL数据库)​数据模型列族    权限控HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。如create‘test’,‘course’         列名以列族作为前缀&#... 查看详情

hbase的架构原理核心概念

Hbase的架构原理、核心概念1.Hbase的表、行、列、列族2.核心组件:Table和region  Table在行的方向上分割为多个HRegion,  一个region由[startkey,endkey)表示,每个HRegion分散在不同的RegionServer中client作用:  提供用户操作hbase的接口... 查看详情

hiveonhbase中列族的列名不固定(代码片段)

问题:列族中列名的数量不固定,随时变化问题分析:这种情况,在hive中提前做好映射是不可能的;解决:可以用hive中的map映射案例:hbase中建表:create‘user_profile‘,‘cf‘hive建表:CREATEEXTERNALTABLEuser_profile(usernameSTRING,labelsmap&l... 查看详情