优化hbase的查询提升读写速率优化案例及性能提升的几种方法

查询MYSQL和查询HBASE速度比较 MySQL,关系型数据库; HBase,NoSql数据库。 查询Mysql和查询HBase,到底哪个速度快呢? 与一些真正的大牛讨论时,他们说HBase写入速度,可以达到每秒1W。而HBase的理想速度为每秒10W。 来个实验说明一下,此实验只能表明,当前环境下运行状态。我的实验效果,没有到1W,还在优化中…   环境: 有3台虚拟机,运行Hadoop集群 阅读详情

优化hbase的查询提升读写速率优化案例及性能提升的几种方法

原创  2016年12月13日 23:14:09
  • 2053
在初期,我们采用的逻辑是:将A表中的数据读取一行,根据其中的某个字段去组织一个GET,然后立刻提交,从B表取得要查询的字段的值,组织成一个PUT,并提交到A表。那么这么做的话,
1.完全发挥不出hbase的效率的原因是什么?
--------------------------------
2.使用bloomfilter和mapfile_index_interval如何提升性能?
3.如何设置hbase的内存?
4.如何增大RPC的数量?
扩展:

5.为什么HBase是基于列模式的存储?





1.优化案例


环境 :suse  8G内存,8核,12T磁盘
          hbase master 占一台,其他7台作为hbase的region server
注意 :此处不讨论hadoop

情景 :
          我们有7亿的数据,需要做查询操作,需要从1.7亿的表中查找一个字段,并写入到7亿数据的表中。
          这里为了描述方便,将7亿数据的表称为:A表,1.7亿数据的表称为B表。

          在初期,我们采用的逻辑是:将A表中的数据读取一行,根据其中的某个字段去组织一个GET,然后
          立刻提交,从B表取得要查询的字段的值,组织成一个PUT,并提交到A表。
          那么这么做的话,完全发挥不出hbase的效率,因为每个get之间它的key不一定连续,或者说是在同一范围
          而hbase的服务端会根据每个请求去加载数据到内存,由于请求的块分散,那么数据在内存中的替换过多的频繁。
          很有可能和直接读取磁盘数据差不多。
          并且采用这种逻辑去处理数据,需要花费时间太多。差不多是10W行读写数据需要40分钟。这对于A表的更新操作
          完全是不能接受的。

          之后,通过读数据的读取操作进行封装,组织成一个ArrayList<Get> 当到一定程度的时候采取提交。这里还有一个情况就是
          有些数据查询不到,那么需要去连接数据库去申请一个自动分配的值,并立刻提交,因为后面可能有请求这个数据。
          这就需要分开处理。
          在组织GET 列表的时候需要先查询,注意,不要采用table.get去取一个cell的值并判断是否为null来处理。
          而是用table.exist(get) 去查询,这是在server-side跑的,效率要高很多。
          对于查询不到的值立刻申请值并写入A表。
          对于查询的到的,那么就可前面说的组织get 加入到GET列表中,到一定程度再去一次提交,在取到值之后,
          在根据将循环数据的记录,将这些组织成put,数量和GET列表一样,不要去具体指定,在循环一次后直接table.put

          其他参数修改方面,写的都很多,这里就不提了。

处理速度(取至其中一台服务器中跑的任务):
2011-12-30 17:10:03 Start Write Lines:1700000
2011-12-30 17:14:10 Writed Lines:1700000
2011-12-30 17:14:11 Start Write Lines:1800000
2011-12-30 17:18:21 Writed Lines:1800000
2011-12-30 17:18:22 Start Write Lines:1900000
2011-12-30 17:22:29 Writed Lines:1900000
2011-12-30 17:22:29 Start Write Lines:2000000
2011-12-30 17:26:37 Writed Lines:2000000
2011-12-30 17:26:37 Start Write Lines:2100000

大约是查询,写入速度是4分钟处理10W行数据。

也就是4000/s的速率,较之前的处理方式提升了一个量级





性能提升方法

1、使用bloomfilter和mapfile_index_interval
  
Bloomfilter(开启/未开启=1/0)
  
mapfile_index_interval
Exists(0-10000)/ms
Get(10001 - 20000)/ms
0
128
22460
23715
0
0
11897
11416
0
64
13692
14034
1
128
3275
3686
1
64
2961
3010
1
0
3339
3498


测试环境为:单机,规模为10万条数据。随机在10000条数据中有99条存在的情况下。
结论:开启bloomfilter比没开启要快3、4倍。而适当的减少mapfile_index_interval可以提升性能

注意:在1.9.3版本的hbase中,bloomfilter是不支持的,存在一个bug,可以通过如下的修改加以改正:
    (1)、在方法org.apache.hadoop.hbase.regionserver.HStore.createReaders()中,找到如下行
    BloomFilterMapFile.Reader reader = file.getReader(fs, false, false);
    将其改成
    BloomFilterMapFile.Reader reader = file.getReader(fs, this.family.isBloomfilter(), false);
    (2)、在方法org.apache.hadoop.hbase.HColumnDescriptor.toString()中,找到如下的代码行
      if (key != null && key.toUpperCase().equals(BLOOMFILTER)) {
        // Don't emit bloomfilter.  Its not working.
        continue;
      }
    将其注释掉

2、hbase对于内存有特别的嗜好,在硬件允许的情况下配足够多的内存给它。
    通过修改hbase-env.sh中的
    export HBASE_HEAPSIZE=3000 #这里默认为1000m

3、修改java虚拟机属性
    (1)、在环境允许的情况下换64位的虚拟机
    (2)、替换掉默认的垃圾回收器,因为默认的垃圾回收器在多线程环境下会有更多的wait等待
    export HBASE_OPTS="-server -XX:NewSize=6m -XX:MaxNewSize=6m -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode"

4、增大RPC数量
    通过修改hbase-site.xml中的    
    hbase.regionserver.handler.count属性,可以适当的放大。默认值为10有点小

5、做程序开发是注意的地方
    (1)、需要判断所求的数据行是否存在时,尽量不要用HTable.exists(final byte [] row) 而用HTable.exists(final byte [] row, final byte[] column)等带列族的方法替代。
    (2)、不要使用HTable.get(final byte [] row, final byte [] column) == null来判断所求的数据存在,而是用HTable.exists(final byte [] row, final byte[] column)替代
    (3)、HTable.close()方法少用.因为我遇到过一些很令人费解的错误

6、记住HBase是基于列模式的存储,如果一个列族能搞定就不要把它分开成两个,关系数据库的那套在这里很不实用.分成多个列来存储会浪费更多的空间,除非你认为现在的硬盘和白菜一个价。

7、如果数据量没有达到TB级别或者没有上亿条记录,很难发挥HBase的优势,建议换关系数据库或别的存储技术。


推荐资源:HBase性能深度分析和性能调优



上文提到了Bloom Filter,这里补充一下:
Bloom Filter原理及在Hbase上的应用

首先最重要的是要搞清楚Bloom Filter是做什么的,看了几篇文章的表述,其实最根本的就是:
判断一个元素是否属于这个集合。

如果这个集合中的元素足够多,那么通过传统方法进行如上判断耗时会很多,Bloom Filter就是一种利用很少的空间换取时间的非常实用的方法。但是要说明的是:Bloom Filter的这种高效是有一定代价的,在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。

下面描述下Bloom Filter的原理:
Bloom Filter是m位的数组,且这m个数组的每一位都是零。
 
Step 1 映射:假如我们有A={x1,x2,x3….xn} n个元素,那么我们需要k个相互独立的哈希函数,将其中每个元素进行k次哈希,他们分别将这个元素映射到m位的数组中,而其映射的位置就置为1,如果有重复的元素映射到这个数组的同一个元素,那么这个元素只会记录一次1,后续的映射将不会改变的这个元素的值。如图:
 
Step 2 判断:在判断B={y1,y2} 这两个元素是否属于A集合时,我们就将这两个元素分别进行上步映射中的k个哈希函数的哈希,如果结果全为1,那么就判断属于A集合,否则判断其不属于A集合。如下图 y2属于,y1则不属于。
汽车OTA自动化测试解决方案 目前OTA远程升级技术已成为众多汽车制造商的标配。由于OTA升级可能会带来潜在的风险(特别是包含ECU固件更新的FOTA升级),针对OTA系统的测试过程就尤为重要。 阅读详情

相关推荐

保姆级教程:用PCAN-View监控汽车CAN总线,从硬件连接到报文分析(附快捷键大全)

本文提供了一份详细的PCAN-View使用教程,涵盖从硬件连接到报文分析的全流程,特别适合汽车电子工程师和初学者。内容包括硬件准备、软件安装、核心功能操作、高级技巧及故障排查,并附有实用的快捷键大全,帮助用户高效监控和分析CAN总线数据。

weixin_42542669的博客 498

大数据系列——HBase理论

大数据系列——HBase理论

mql007007的博客 4588

从Google到LLVM:5种主流clang-format预设风格横向对比(含代码对比图)

本文横向对比了LLVM、Google、Chromium、Mozilla和WebKit五种主流的clang-format预设代码风格。通过同一段C++代码的格式化效果对比图,直观展示了它们在指针对齐、大括号换行、缩进等关键细节上的差异,并提供了基于团队背景与项目基因的选型决策指南。

weixin_28828243的博客 445

HBASE为什么查询快(在数据量比较多的情况下又是怎么处理的)

如果没有,则从磁盘中读取,同时将读取到的数据存储到缓存中,以便后续查询。针对数据量较大的情况,HBase 采用列式存储结构,可以支持对 PB 级别数据的处理,并且还具备分布式存储和基于索引的高效查询能力。1. 列式存储结构:HBase是一种基于列式存储的数据库,与传统的行式数据库不同,HBase将同一列的数据存储在一起,相同的数据被存储在相邻的单元格中。3. 基于索引的查询:HBase支持对行键(rowkey)的索引,可以通过检索行键来快速定位数据,避免了全表扫描和遍历的过程,从而大大提高了查询速度。

比起日出,我更喜欢日落。我的意思是比起遇见你,我更喜欢与你终老 1848

DeepSeek Harness接入QQ实战:把DSH变成赛博群友

大模型应用正从单机问答走向多平台集成,如何将模型能力嵌入即时通讯工具成为工程实践的热点。消息接入、会话管理、插件扩展是构建智能群聊机器人的核心三要素。DeepSeek Harness(DSH)作为一款模型会话工作流管理工具,凭借多会话管理、模型调用编排以及灵活的插件机制,能够在QQ群聊场景中实现“接收消息→模型生成→回复推送”的完整闭环。本文从基础概念切入,详解DSH接入QQ的两种实现路线——外部API转发与原生插件适配,覆盖环境准备、启动调试、接口调用与性能观察,并给出常见问题排查清单。无论是本地AI助理

weixin_27427619的博客 1978

Pyside6实战:3种.ui文件加载方式对比(附完整代码示例)

本文深入解析Pyside6中3种.ui文件加载方式的优劣与性能优化策略,包括动态加载QUiLoader、预编译方案及混合策略。通过实测数据和完整代码示例,帮助开发者根据项目需求选择最优解,提升界面加载效率与内存管理。

weixin_30897233的博客 91

面对百亿数据,Hbase为什么查询速度依然非常快?

HBase适合存储PB级别的海量数据(百亿千亿量级条记录),如果根据记录主键Rowkey来查询,能在几十到百毫秒内返回数据。 那么Hbase是如何做到的呢? 接下来,介绍一下数据的查询思路和过程。 查询过程: 第1步: 项目有100亿业务数据,存储在一个Hbase集群上(由多个服务器数据节点构成),每个数据节点上有若干个Region(区域),每个Region实际上就是Hbase中一批数据的集合(比如20万条数据)。 我们现在开始根据主键RowKey来查询对应的记录,Hbase的Master帮我们迅速定位到该

洪文聊架构 2481

巧妙解决网页弹窗重复出现问题

本文探讨了网页弹窗关闭后刷新重现的问题及解决方案。通过分析原生JavaScript实现的弹窗代码存在的缺陷,提出了使用jQuery改进的方法。关键点包括:利用event.preventDefault()阻止默认行为避免刷新,采用jQuery的hide("slow")方法实现优雅的关闭动画,确保关闭状态持久化。改进后的方案既解决了弹窗重复出现的问题,又提升了用户体验,为网页弹窗交互提供了更优的实现方式。文中提供了完整的HTML、CSS和JavaScript代码示例,便于开发者直接应用。

2501_90323865的博客 182

hbase数据读取优化_优化hbase的查询提升读写速率优化案例及性能提升的几种方法...

上文提到了Bloom Filter,这里补充一下:Bloom Filter原理及在Hbase上的应用首先最重要的是要搞清楚Bloom Filter是做什么的,看了几篇文章的表述,其实最根本的就是:判断一个元素是否属于这个集合。如果这个集合中的元素足够多,那么通过传统方法进行如上判断耗时会很多,Bloom Filter就是一种利用很少的空间换取时间的非常实用的方法。但是要说明的是:Bloom Fil...

weixin_39562928的博客 109

MuJoCo 入门教程(八)Model仓库

一个物理仿真器的好坏取决于它所仿真的模型,而在像 MuJoCo 这样功能强大、建模选项众多的仿真器中,很容易创建出行为与预期不符的 "坏 "模型。MuJoCo Menagerie 的目标是为社区提供一个设计精良、开箱即用的模型集。更多信息,请访问 Menagerie 资源库。

机器人控制与仿真应用 1940

VS Code下载安装与使用教程

VSCode下载安装与使用教程

weixin_46713695的博客 4万+

优化hbase的查询操作-大幅提升读写速率

环境:suse  8G内存,8核,12T磁盘           hbase master 占一台,其他7台作为hbase的region server 注意:此处不讨论hadoop 情景:           我们有7亿的数据,需要做查询操作,需要从1.7亿的表中查找一个字段,并写入到7亿数据的表中。           这里为了描述方便,将7亿数据的表称为:A表,1.7亿数据的

chlaws的专栏 1万+

全国(山东、安徽)职业技能大赛--信息安全管理与评估大赛题目+答案讲解——windows应急响应篇

保护数据,捍卫安全,展现技能,赢得荣耀!全国职业技能大赛-信息安全与评估大赛,挑战你的技术,揭示黑客的秘密!加入我们,成为信息安全的守护者!

人若无名,便可专心练剑 909

优化hbase的查询优化-大幅提升读写速率(转)

问题导读: 1.本文通过什么方法优化查询效率的? 2.如何增大RPC数量? 3.如何调整hbase内存?环境:suse8G内存,8核,12T磁盘 hbase master 占一台,其他7台作为hbase的region注意:此处不讨论hadoop情景: 我们有7亿的数据,需要做查询操作,需要从1.7亿的表中查找一个字段,并写入到7亿数据的表中。 ...

linux下安装配置 MySQL5.6 511

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蓝牙模块HM-10手册

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

优化Hbase查询速度

环境:suse 8G内存,8核,12T磁盘 hbase master 占一台,其他7台作为hbase的region server 注意:此处不讨论hadoop 情景: 我们有7亿的数据...

chuteng3602的博客 2459

OV9734 DATASHEET,完整规格书

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

优化hbase的查询优化-大幅提升读写速率

环境:suse  8G内存,8核,12T磁盘           hbase master 占一台,其他7台作为hbase的region server 注意:此处不讨论hadoop 情景:           我们有7亿的数据,需要做查询操作,需要从1.7亿的表中查找一个字段,并写入到7亿数据的表中。           这里为了描述方便,将7亿数据的表称为:A表,1.7亿数据的表称

xuefengmiao的专栏 985

Hbase 读写流程

一 Hbase 读写 Region是HBase数据存储和管理的基本单位。在HBase的一个表中,可以包含一个或多个region。对于一个region,每个列族都会对应一个store,用来存储该列族的数据。每个store都有一个写缓存memstore,用于缓存写入的数据。 【写过程】 1、客户端向RegionServer发送写入数据请求。Client先从缓存中定位region,如果没有缓存则需访问zookeeper,从.META.表获取要写入的region信息 2、定位写入region。找到小于row

zhanggf的博客 1633

HBase表读写效率的技巧(持续更新)

一. 建表技巧 1. 合理设计列族 一张HBase表的列族数量最好控制在三个以内,因为当一个列族的MemStore中的数据量达到阈值时,会引起同一个region的所有columnFamily的MemStore进行flush操作,即使其中某些列族MemStore中的数据量还很小。因此,如果有很多列族的话,会产生许多小文件,可能会引起很多不必要的flush和compact操作,导致不必要的I/O负载。...

文武傲群雄,彳亍定江山 1417

使用hbase自带工具测试读写速率

性能测试结果  hbase/bin/hbase org.apache.hadoop.hbase.PerformanceEvaluation sequentialWrite 1 org.apache.hadoop.hbase.PerformanceEvaluation$SequentialWriteTest in 66382ms at offset 0 for 1048576 rows

i am me,haha,么么哒。。。 3103

HBase | HBase 列族优化总结

随着大数据的越来越普及,HBase 也变得越来越流行。使用 HBase 并不困难,但是如何用好 HBase,这确是一个难点。为了合理地使用 HBase,尽可能发挥 HBase 的功能,我们需要根据不同的场景对 HBase 进行不同地优化以最大程度上提升系统的性能。本文重点介绍列族设计有关的优化。我们先来了解下 HBase 列族具有哪些属性配置。 列族属性配置 版本数量(VERSIONS) ...

sofeld的博客 1396

HBase系列(六)优化

HBase优化一、HBase高可用Hmaster高可用部署HLog二、预分区三、Rowkey优化四、 一、HBase高可用 Hmaster高可用部署 在 HBase 中 Hmaster 负责监控 RegionServer 的生命周期,均衡 RegionServer 的负载,如果 Hmaster 挂掉了,那么整个 HBase 集群将陷入不健康的状态,此时的工作状态并不会维持太久。所以需要配置 Hmaster 的高可用 HLog 几乎所有的数据库(无论是关系型还是分布式的),都采用WAL的方式来保障服务异常时候

Wei_HHH的博客 855
上一篇: Hbase万亿级存储性能优化总结
下一篇: HBase读性能优化策略
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值