hbase中列簇和列_为什么不建议在hbase中使用过多的列簇

我们知道,hbase表可以设置一个至多个列簇(column families),但是为什么说越少的列簇越好呢?

官网原文:

HBase currently does not do well with anything above two or three column families so keep the number of column families in your schema low. Currently, flushing and compactions are done on a per Region basis so if one column family is carrying the bulk of the data bringing on flushes, the adjacent families will also be flushed even though the amount of data they carry is small. When many column families exist the flushing and compaction interaction can make for a bunch of needless i/o (To be addressed by changing flushing and compaction to work on a per column family basis).

回顾下hbase表,每张表会切分为多个region,每个region也就是表的一部分子集数据,region会分散到hbase 集群regionserver上;

region中每个columnFamily的数据组成一个Store。每个Store由一个Memstore和多个HFile组成(一个列簇对应一个memstore和N个HFile);

在达到flush条件时候,每个memstore都会flush生成一个HFile文件;另外随着HFile文件的生成,后台minorCompact线程会触发合并HFile文件;

重点来了!flush和compact都是在region的基础上进行的!!!

比如在flush时候,如果有多个memstore(多个列簇),只要有一个memstore达到flush条件,其他的memstore即使数据很小也要跟着执行flush,这也就导致了很多不必要的I/O开销。触发flush的条件如下:

Memstore级别限制:当Region中任意一个MemStore的大小达到了上限(hbase.hregion.memstore.flush.size,默认128MB),会触发Memstore刷新。

Region级别限制:当Region中所有Memstore的大小总和达到了上限(hbase.hregion.memstore.block.multiplier * hbase.hregion.memstore.flush.size,默认 2* 128M = 256M),会触发memstore刷新。

Region Server级别限制:当一个Region Server中所有Memstore的大小总和达到了上限(hbase.regionserver.global.memstore.upperLimit * hbase_heapsize,默认 40%的JVM内存使用量),会触发部分Memstore刷新。Flush顺序是按照Memstore由大到小执行,先Flush Memstore最大的Region,再执行次大的,直至总体Memstore内存使用量低于阈值(hbase.regionserver.global.memstore.lowerLimit * hbase_heapsize,默认 38%的JVM内存使用量)。

当一个Region Server中HLog数量达到上限(可通过参数hbase.regionserver.maxlogs配置)时,系统会选取最早的一个 HLog对应的一个或多个Region进行flush

HBase定期刷新Memstore:默认周期为1小时,确保Memstore不会长时间没有持久化。为避免所有的MemStore在同一时间都进行flush导致的问题,定期的flush操作有20000左右的随机延时。

同样在compact时候,由于是建立在region的基础上,同样会产生不必要的I/O开销,触发compcat(minor_compact)条件:

hbase.hstore.compactionThreshold

Description

Ifmore than this number of HStoreFiles in any one HStore (one HStoreFile is written per flush of memstore) thena compaction is run to rewrite all HStoreFiles files as one.     Larger numbers put off compaction but when it runs, it takes longer to complete.

default3

Where multiple ColumnFamilies exist in a single table, be aware of the cardinality (i.e., number of rows). If ColumnFamilyA has 1 million rows and ColumnFamilyB has 1 billion rows, ColumnFamilyA’s data will likely be spread across many, many regions (and RegionServers). This makes mass scans for ColumnFamilyA less efficient.

另外,如果一个表中存在多个列族,请注意数据量(即,行数)。如果ColumnFamilyA有100万行,而ColumnFamilyB有10亿行,ColumnFamilyA的数据很可能分布在许多许多regions(和regionservers)。这使得ColumnFamilyA的大规模scan效率降低。(我们知道hbase split是由参数hbase.hregion.max.filesize值来控制的,但是,触发region split不是说该region下所有的HFile文件大小达到这个值就会触发split,而是region下某个HFile文件达到了这个值才会执行split,也就是说这里ColumnFamilyB在做split时候,ColumnFamilyA的数据量还很小很小,但是也会被带着执行split,这也就会导致更多的HDFS小文件,并且分散到更多的region和regionservers上)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html怎么置顶导航栏,css怎么实现滚动页面导航栏固定在顶部

css怎么实现滚动页面导航栏固定在顶部(吸顶效果)功能:当网页向下滚动时,导航栏一直在固定在顶部一、css设置这里主要用到css中position中的relative与fixed;其中relative是生成相对定位的元素,相对于其正常位置进行定位。fixed是生…

numpy读取csv_Numpy——IO操作与数据处理

一、问题?大多数数据并不是我们自己构造的,存在文件当中。我们需要工具去获取,但是Numpy其实并不适合去读取处理数据,这里我们了解相关API,以及Numpy不方便的地方即可。二、Numpy读取genfromtxt(fname[, dtype, commen…

Pydiction : VIM上的PYTHON代码自动补全插件

http://www.vim.org/scripts/script.php?script_id850 1、下载Pydiction其中有4个文件:complete-dict //PYTHON 的KEYWORD集pydiction.pypython_pydiction.vim //让VIM认识PYTHONREADME.txt //说明书 2、把上面的python_pydiction.vim拷到ftplugin 目录下 3、把其它…

android 中radiogroup滑动切换,巧妙实现缺角radiogroup控制多个fragment切换和滑动

在android开发中,用一个radiogroup控制多个fragment切换是十分常见的需求。但是如果fragment是一个ListView,如何保证滑动的时候通过缺角可以看到下面的listview是一个难点。直接上图:(1)完美效果(2)较差效果另外,不妨假设缺角的高度是5dp&am…

java vo转map_JAVA Map转换为Bean或VO

JAVA Map转换为Bean或VOJava.util中的集合类包含Java中某些最常用的类。Map提供了一个更通用的元素存储方法。Map集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值,在java编程中使用的相当之多。但是当我们进行业务逻辑或数据库处理时&…

应用市场中包名(package name)的唯一性

一般的应用商店,在开发者上传应用(APP)的时候,都会对应用的包名进行唯一性的校验。如果此时,用户上传的应用的包名与数据库中的已有的APP的包名一样,那么正常情况下,该应用就不能上传,而弹出提示说&#xf…

linux中线程的挂起与恢复(进程暂停)

今 天 在网上查了一下 linux中对进程的挂起与恢复的实现,相关资料少的可怜,大部分都是粘贴复制。也没有完整详细的代码。故自己整理了一下程序流程为:主线程创建子线程(当前子线程状态为stop停止状态),5秒后…

荣耀智慧屏评测 鸿蒙OS加持,荣耀智慧屏评测:鸿蒙OS加持 面向未来的超智能电视...

原标题:荣耀智慧屏评测:鸿蒙OS加持 面向未来的超智能电视 来源:TechWeb.com.cn当华为选择在今年公布鸿蒙OS系统后,很多人都在期待它的庐山真面目。无论是以后非常时期不再受制于人,或是循序渐进将系统过渡给自家设备&a…

c位边上还有什么位_【一点资讯】那些有趣而搞笑的GIF动画:为让出c位,站边上拍照还是谦虚礼貌的 www.yidianzixun.com...

1_为让出c位,站边上拍照,还是谦虚礼貌的,2_最后都吓死我了!3_啥情况?4_今年工作太难了,回家种地卖水果吧5_除了电池差了一点,12应该是最完美的手机了吧精选搞笑图文:小王去女朋友家里…

两个有用的minicom命令

minicom执行后,一个屏幕显示的字符有限,如果需要查看之前的串口通讯记录,可以使用Ctrl-A B使用进入串口通讯记录查询模式。如果需要将minicom的串口通讯记录保存到某个文件,可以在minicom刚启动时用Ctrl-A L命令进入串口通讯捕捉模…

2021河南固高高考成绩查询,河南信阳最好的4所高中,前三所学霸如云,看看有没有你的母校?...

河南省信阳市处于豫之南,鄂之北。南边是连绵的群山,北边是广袤的平原。千里淮河,曲折盘旋,它的源头便是这里。都说信阳是一个神奇的地方,一点儿也不为过,狮河穿城而过,周围群山环抱,…

python库读取cif文件_Pymatgen读/写各种文件,pymatgen,读写

pymatgen读/写各种文件pymatgen是材料大数据计算的必备程序包了,其也作为API与materials project对接,可以批量下载自己想要的材料结构、性质,它也提供了大量VASP计算后的数据处理、计算,堪称材料基因组学的神器!pymat…

磁盘的磁道(Track)

写这篇文章,主要是为了解决长久以来的一个困惑。由此也可以看出偶以前确实不太聪明。 哈哈(虽然现在仍然还是) 以前见到的很多磁道的示意图都是这样的:注意标线的位置,“指向一条线”,我当时的理解好像是这条线就是磁道。还有的解…

Android SDK Manager 在win8.1上的闪退问题【转载】

全新安装的Windows 8.1的系统,Android SDK,JDK都是最新的版本,但是SDK Manager打开是命令行窗口一闪而过,就再没反映了。 通过搜索,确定了一个问题就是SDK目录tools\lib下有个find_java.bat,本来的作用是查…

centos 卸载_CentOS安装mysql

安装mysql第一步,查看是否安装:rpm -qa| grep mysql-server没有我们就开始安装,点击 这里,获取下载页面,按照图示选择合适的版本:第二步,进入/usr/local/soft/目录,在里面执行wget 下…

考公专业科目计算机,2017国考中国证监会专业科目考试大纲(计算机类)

一、考试目的考查考生是否具备证券期货监管工作所必需的计算机专业知识和相关知识的应用能力。二、考试内容与试卷结构考试形式为笔试,考试时间120分钟,满分100分。报考计算机类职位的考生参加本类别的专业科目考试。计算机类专业科目考试试题由以下两部…

qt 初学

1. qt4中没有setMainWidget函数&#xff0c;直接删除即可 2. 找不到QtNetWork头文件&#xff0c;在pro文件中增加 QT network 3. 打印QString qDebug() << QString对象 4. int 转 QString QString::number(int) 5. QStringList使用 QStringList wor…

细数改善WPF应用程序性能的10大方法

WPF(Windows Presentation Foundation)应用程序在没有图形加速设备的机器上运行速度很慢是个公开的秘密&#xff0c;给用户的感觉是它太吃资源了&#xff0c;WPF程序的性能和硬件确实有很大的关系&#xff0c;越高档的机器性能越有优势。 程序性能改善不是一蹴而就的&#xff…

javaweb宿舍管理系统源码_宿舍信息管理系统展示

宿舍信息管理系统今天整理学习笔记的时候发现了自己当时学SSM框架的时候写了一个简单的Javaweb宿舍信息管理系统&#xff0c;虽然现在看来写的不是很好&#xff0c;但今日写此文章也算是纪念自己的第一个SSM小项目了&#xff0c;话不多说&#xff0c;直接开始。项目简介&#x…

Qt UDP的初步使用

为了使用Qt自带的Socket进行网络编程&#xff0c;先必须熟悉Socket编程的原理&#xff0c;另外还需对Qt一些基本类的操作比较熟悉。由于刚接触不久&#xff0c;所以还是以看人家的代码来学习。这次主要是学Qt下UDP的编程&#xff0c;且熟悉一些Qt下代码的编写流程&#xff0c;所…