HBase写入通常会遇到两种问题:

# 写的性能很差

# 根本写不进去

一 HBase写入性能优化

1.1 是否需要写WAL? WAL是否需要同步写?

WAL机制可以确保数据即使写入缓存的数据丢失了,也可以恢复;另外是为了集群之间的异步复制。默认WAL机制开启,且使用同步机制写入WAL. 我们可以考虑是否需要写入WAL,通常大多数企业业务都会开启,但是对于部分业务可能并不特别关心异常情况下部分数据的丢失,而更关心数据写入吞吐量,不能造成数据队列堵塞。这种场景可以选择关闭WAL写入;或者看能否接受异步写入

所以应该根据业务关注点在WAL机制和写入吞吐量之间做一个抉择

1.2 PUT是否可以同步批量提交

HBase分别提供了单条put以及批量put的API接口,使用批量put接口可以减少客户端到RegionServer之间的RPC连接数,提高写入性能。另外需要注意的是,批量put请求要么全部成功返回,要么抛出异常。

所以建议使用批量PUT写入请求

1.3 PUT是否可以异步批量提交

业务如果可以接受异常情况下少量数据丢失的话,还可以使用异步批量提交的方式提交请求。提交分为两阶段执行:用户提交写请求之后,数据会写入客户端缓存,并返回用户写入成功;当客户端缓存达到阈值(默认2M)之后批量提交给RegionServer。需要注意的是,在某些情况下客户端异常的情况下缓存数据有可能丢失。

所以在业务可以接受的情况下开启异步批量提交

1.4 Region数量少于RegionServer数量

当前集群中表的Region个数如果小于RegionServer个数,可以考虑切分Region并尽可能分布到不同RegionServer来提高系统请求并发度,如果Num(Region of Table) > Num(RegionServer),再增加Region个数效果并不明显

所以在Num(Region of Table) <Num(RegionServer)的场景下切分部分请求负载高的Region并迁移到其他RegionServer

1.5 写入请求是否均衡

另一个需要考虑的问题是写入请求是否均衡,如果不均衡,一方面会导致系统并发度较低,另一方面也有可能造成部分节点负载很高,进而影响其他业务。分布式系统中特别害怕一个节点负载很高的情况,一个节点负载很高可能会拖慢整个集群,这是因为很多业务会使用Mutli批量提交读写请求,一旦其中一部分请求落到该节点无法得到及时响应,就会导致整个批量请求超时。

所以建议检查Rowkey 和预分区策略

1.6 写入的KeyValue数据是否太大

KeyValue大小对写入性能的影响巨大,一旦遇到写入性能比较差的情况,需要考虑是否由于写入KeyValue数据太大导致。KeyValue大小对写入性能影响曲线图如下:

KeyValue太大会导致HLog文件写入频繁切换、flush以及compaction频繁触发,写入性能急剧下降。

如果是大字段scan导致RegionServer宕机,那么客户端在访问的时候对返回结果大小做限制(scan.setMaxResultSize(2*1024*1024)),并且对列数量做限制(scan.setBatch(100))

二 写异常问题

2.1 MemStore相关的配置是否合理

以RegionServer级别flush进行解析,HBase设定一旦整个RegionServer上所有Memstore占用内存大小总和大于配置文件中upperlimit时,系统就会执行RegionServer级别flush,flush算法会首先按照Region大小进行排序,再按照该顺序依次进行flush,直至总Memstore大小低至lowerlimit

Region规模与Memstore总大小设置是否合理?如果RegionServer上Region较多,而Memstore总大小设置的很小(JVM设置较小或者upper.limit设置较小),就会触发RegionServer级别flush

列族是否设置过多,通常情况下表列族建议设置在1~3个之间,最好一个。如果设置过多,会导致一个Region中包含很多Memstore,导致更容易触到高水位upperlimit

2.2 Store中HFile数量是否大于配置参数blockingStoreFile

对于数据写入很快的集群,还需要特别关注一个参数:hbase.hstore.blockingStoreFiles,此参数表示如果当前hstore中文件数大于该值,系统将会强制执行compaction操作进行文件合并,合并的过程会阻塞整个hstore的写入。通常情况下该场景发生在数据写入很快的情况下,在日志中可以发现”Waited 3722ms on a compaction to clean up ‘too many store files“

参数设置是否合理?hbase.hstore.compactionThreshold表示启动compaction的最低阈值,该值不能太大,否则会积累太多文件,一般建议设置为5~8左右。hbase.hstore.blockingStoreFiles默认设置为7,可以适当调大一些。

HBase写性能优化策略相关推荐

  1. HBase读性能优化策略

    使用HBase可能会遇到各种问题,有些是系统本身的设计的问题,有些是使用的问题,常见的问题:FULL GC异常导致宕机,RIT问题,写吞吐量太低以及读延迟较大. 这篇文章就以读延迟优化为核心内容展开, ...

  2. HBase最佳实践-读性能优化策略

    任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...

  3. HBase最佳实践-HBase中的读性能优化策略

    任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...

  4. 亿级PV,常见性能优化策略总结与真实案例

    作者:晓明 来自:美团技术团队 0 题记 美团网是国内最大的O2O服务平台,虽然经常面临高并发.大流量等问题,但在用户体验优化上美团APP仍被众多IT同行所推崇,他们在性能优化方面积累的宝贵经验尤其值 ...

  5. 阿里P8架构师谈:多线程、架构、异步消息、Redis等性能优化策略

    常见性能优化策略分类 1.代码 之所以把代码放到第一位,是因为这一点最容易引起技术人员的忽视.很多技术人员拿到一个性能优化的需求以后,言必称缓存.异步.JVM等.实际上,第一步就应该是分析相关的代码, ...

  6. 52条SQL语句性能优化策略

    本文会提到 52 条 SQL 语句性能优化策略. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 WHERE 及 ORDER BY 涉及的列上建立索引. 2.应尽量避免在 WHERE 子句中对字 ...

  7. sql加上唯一索引后批量插入_阿里大佬总结的52条SQL语句性能优化策略,建议收藏...

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 cnblogs.com/SimpleWu/p/9929043.html 推荐:h ...

  8. 90 % Java 程序员被误导的一个性能优化策略

    转载自   90 % Java 程序员被误导的一个性能优化策略 我们经常看到一些 Java 性能优化的书或者理念,说不要在循环内定义变量,这样会占用过多的内存影响性能,而要在循环外面定义.接触 Jav ...

  9. 【MySQL】47 条SQL语句性能优化策略

    本文会提到 47 条 SQL 语句性能优化策略. 1. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 WHERE 及 ORDER BY 涉及的列上建立索引. 2. 应尽量避免在 WHERE 子句中 ...

最新文章

  1. android byte[] 转string 好多问号_java程序员面试遇到string题如何不凉?
  2. 【CORE JAVA】反射应用:通用方法-扩展数组长度
  3. Pycharm Pro 2018.2 汉化专业激活破解
  4. 3部世界顶级宇宙纪录片,献给对宇宙万物充满好奇的你
  5. iOS sqlite
  6. 谁是ASML的最大股东?为何荷兰光刻巨头要听美国的话?
  7. 华三模拟器hcl实验手册_实验室 | # 实验室废气处理系统的设计#
  8. java中RIGHT的值_java循环遍历, reduce(),reduceRight()方法和Object,keys遍历对象的属性...
  9. NPOI 读取excel到DataTable 读取隐藏列 读取公式列
  10. 计算机网络技术知识点
  11. Azure:云平台概述
  12. 论文解读:Cycle ISP Real Image Restoration via Improved Data Synthesis
  13. javascript中的字符串编码转换
  14. 关于2048小游戏的开发感想
  15. win7 找不到 本地用户和组
  16. 《CTF竞赛权威指南》|Off-By-One
  17. 推荐一款超级好用的AI模型训练平台——Tesra超算网络!
  18. python项目练习四:新闻聚合
  19. 美国加州中学课本 教材介绍 - Glencoe系列- 美国初中语文 数学 科学 健康
  20. Win10 + WSL2 (ubuntu18.04 LTS) + vscode开发环境,win上linux图形化界面劝退实录

热门文章

  1. python列表赋值 连续整数_列表切片赋值,小技巧(Python基础)。
  2. 敏捷开发_敏捷开发之看板
  3. 06MySQL基本函数的使用
  4. mysql 创建分区索引吗_MySQL分区字段列有必要再单独建索引吗?
  5. Java 并发编程之 Atomic 类
  6. python使用t-sne算法降维,方便可视化
  7. python使用xlwt创建与保存excel文件
  8. Lethean结点搭建
  9. 使用LDA模型对新的文档进行分类
  10. Overleaf 显示中文