hbase scan超时设置_如何在优化生产环境的hbase
hbase 是hadoop生态圈的一员,在数据服务应用中具有举足轻重的地位,我们当然有必要掌握,hbase日常的大部分应用在数据查询服务中,因此查询的时候必然涉及到scan操作,因此在建表的时候就要对htable 进行优化,比如设置块缓存,设置过期时间等,设置保留的版本号,这些为什么如此重要?下面详细说,很多时候感觉hbase很多东西,单深入下去之后就会发现hbase设计实在太为精妙,很多东西都是具有强关联性和一致性。
HBASE 优化
- HBASE的优化分为通用型的优化和定制型的优化,通用型的优化部分就是不针对具体的业务场景,都会有好的优化效果,定制型的优化需要结合具体的使用场景。
先说下hbase的读流程:
- 客户端向Zookeeper(ZK)发起请求,从ZK获取meta表中region所在的位置,根据表的信息找到对应的RegionServer(RS)信息,
- 首先从RS的memstore缓存中读取数据,如果存在直接返回,如果查找不到从StoreFile中查找。
hbase的写流程:
- 客户端向发起写请求,根据写请求类型不同,如果是修改表结构,创建或者删除表,会与HMaster(HM)交互,如果是更新或者插入操作,则会与zk交互,从ZK获取meta表中region所在的位置,从
- 数据会写两份,一份到memstore中,一份到Hlog中,
- 当memstore中的文件大小超过阈值时,会把数据flush到storefile中,当storefile中文件数超过一定数目时,会按照某种文件合并策略触发compact操作,把多个storefile合并为一个大的storefile,当形成的storefile超过region 分裂的阈值,又回出发split操作,分裂成2个小的region
- 当memstore数据丢失,会从hlog中恢复,同样会执行compact和split操作。
关于compact的触发时机,大家可以看下源码,也有网友分享:
HBase源码分析之compact请求发起时机、判断条件等详情(一)_大数据_辰辰爸的博客-CSDN博客blog.csdn.net
后面我也会参照源码和自己的理解去写一篇文章,这个点很重要,面试经常问到。
现在读写流程已经分析了,那么开始讲如何优化了。
通用型的优化方法:
1.预先分区: 创建hbase表的时候自动创建多个region分区
2.rowkey优化:rowkey优化结合业务进行设计,考虑查询,
要遵循的几个原则,
- rowkey长度越小越好,减少存储空间,提高hbase存储效率,
- rowkey 按照字典排序存储,把经常访问的数据存放在一起,
- 如果涉及时间的查找,rowkey需要带上时间戳的
- 前缀加盐处理,写入性能提升,但是读性能会受到影响,主要看如何进行加盐处理(hash处理)。
3. 减少column family 数量,无论是从读和写角度,column family都不要超过2个。
关于这部分的优化,可以参考这篇文章:
HBase 优化,columnFamily和qualifierColumn的设计原则my.oschina.net
4. 缓存策略
创建表的时候,可以通过HColumnDescriptor.setInMemory(true)将表放在RS的缓存中,保证在读取的时候被cache命中
5. 设置存储生命周期
创建表的时候,可以通过 HColumnDescriptor.setTimeToLive(int timeToLive) 设置表中数据的存储生命期,过期数据将自动被删除,但是也有负作用,这样会导致major compaction的触发,影响regionserver的性能
6. 硬盘配置合理,提供更细粒度的冗余备份,更快速的单盘故障恢复,
每台 RegionServer 管理 10~1000 个 Regions,每个 Region 在 1~2G,则每台 Server 最少要 10G,最大要 1000*2G=2TB,考虑 3 备份,则要 6TB。方案一是用 3 块 2TB 硬盘,二是用 12 块 500G 硬盘,带宽足够时,后者能提供更大的吞吐率,更细粒度的冗余备份,更快速的单盘故障恢复。
7. 分配合适的内存给RS ,在不影响其他服务的情况下,越大越好。
例如在 HBase 的 conf 目录下的 hbase-env.sh 的最后添加 export HBASE_REGIONSERVER_OPTS="-Xmx16000m $HBASE_REGIONSERVER_OPTS”
8. 写备份数
备份数与读性能成正比,与写性能成反比,
且备份数影响高可用性。有两种配置方式,一种是将 hdfs-site.xml 拷贝到 hbase 的 conf 目录下,然后在其中添加或修改配置项 dfs.replication 的值为要设置的备份数,这种修改对所有的 HBase 用户表都生效,另外一种方式,是改写 HBase 代码,让 HBase 支持针对列族设置备份数,在创建表时,设置列族备份数,默认为 3,此种备份数只对设置的列族生效。
8. 批量写,增打客户端一次从服务器拉取的数量,当然要考虑到客户端的内存大小。
1)在 HBase 的 conf 配置文件中进行配置 hbase.client.scanner.caching;
2)通过调用 HTable.setScannerCaching(int scannerCaching) 进行配置;
3)通过调用 Scan.setCaching(int caching) 进行配置。三者的优先级越来越高。
9. RegionServer 的请求处理 IO 线程数
针对不同业务查询需求,设置合理的IO线程数
较少的 IO 线程适用于处理单次请求内存消耗较高的 Big Put 场景 (大容量单次 Put 或设置了较大 cache 的 Scan,均属于 Big Put) 或 ReigonServer 的内存比较紧张的场景。
较多的 IO 线程,适用于单次请求内存消耗低,TPS 要求 (每秒事务处理量 (TransactionPerSecond)) 非常高的场景。设置该值的时候,以监控内存为主要参考。
在 hbase-site.xml 配置文件中配置项为 hbase.regionserver.handler.count。
10. Region 大小设置
再配合 RegionSplitter 这个工具,在需要 split 时,手动 split。手动 split 在灵活性和稳定性上比起自动 split 要高很多,而且管理成本增加不多,比较推荐 online 实时系统使用
其他参数优化可参考:
https://www.ibm.com/developerworks/cn/java/j-lo-HBase/index.htmlwww.ibm.com
定制化优化方法参考这篇文章:
HBase Rowkey 设计指南www.iteblog.com
一般我们自己做业务,主要是预先分区,设计rowkey,调整缓存大小,加盐处理,手动split和compact尚未尝试过。
hbase scan超时设置_如何在优化生产环境的hbase相关推荐
- hbase scan超时设置_深入浅出HBase系列(二)
今天来讲讲HBase读的过程: 1.HBase读过程详解 2.1影响HBase读取命令的参数 HBase读包含两种命令:get ,基于确切的RowKey去获取一行数据,通常被称之为随机点查:scan, ...
- hbase scan超时设置_hbase scan超时问题
下面是异常信息: 2018-11-08 16:55:52,361 INFO [main] org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl ...
- hbase scan超时设置_HBase学习之路 (六)过滤器
点击上方蓝字 关注我们 HBase学习之路 (六)过滤器 过滤器(Filter) 基础API中的查询操作在面对大量数据的时候是非常苍白的,这里Hbase提供了高级的查询方法:Filter.Filte ...
- 写一段代码提高内存占用_记录一次生产环境中Redis内存增长异常排查全流程!...
点击上方 IT牧场 ,选择 置顶或者星标 技术干货每日送达 最近 DBA 反馈线上的一个 Redis 资源已经超过了预先设计时的容量,并且已经进行了两次扩容,内存增长还在持续中,希望业务方排查一下容量 ...
- linux ntp时间立即同步命令_记一次生产环境部署NTP服务及配置时间同步
概述 linux服务器在提供服务时,要和其他机器进行请求的交互,实际生产环境中,可能因为时间不同步,导致了服务异常. 下面介绍下怎么部署NTP服务来解决这个问题. ps:强烈吐槽下头条这个新排版功能, ...
- mysql 两张大表关联_详解mysql生产环境如何快速有效的删除大表,附实验说明
概述 我们很多时候都会去drop一些大表,特别是生产环境做操作时,这里主要提一些注意事项,仅供参考. 01 相关语法 1.删表 DROP TABLE SyntaxDROP [TEMPORARY] TA ...
- python 线程超时设置_爬虫基础知识(一)多线程与threading模块
点击上方"蓝字"关注我们,第一时间推送优质文章! 前言 "本期带来的文章是python中多线程与threading模块的主要内容.主要分为「并发与并行」,「进程与线程」, ...
- netty socket超时设置_彻底搞懂 netty 线程模型
编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo.Rocketmq.Hadoop等.本文就netty线程模型展开 ...
- java webservice超时设置_[CXF]Spring下设置CXF的WebService客户端超时时长
评论 # re: [CXF]Spring下设置CXF的WebService客户端超时时长 2010-01-05 21:47 Emily32Av A kind of good information a ...
最新文章
- 通过 “函数对象”看javascript函数
- 华为云设计语言_《好设计,有方法:我们在搜狐做产品体验设计》 —2.2 设计语言带来的好处...
- 两路服务器型号,两路服务器 核数
- JQuery------各种版本下载
- Python3条件判断
- python算法系列资料集(一)-2022.03.15
- 数据库SQL中的分钟表示应该使用MI(非常重要的一个问题,以前一直认为和java中一样,用mm就可以表示);校对规则(查询时区分大小写)
- pdf幻灯片:圆锥曲线中的“三定”问题探究(一)
- uni-app 变量赋值后被实时同步
- android viewholder模式,为什么在ViewHolder模式中ViewHolder类应该是静态的?
- 一脸懵逼搭建Zookeeper分布式集群
- win7电脑给手机开热点流程
- 苹果自研Apple M1芯片对机器学习意味着什么?
- [笔记] 关于通过鼠标滚轮设置缩放的技巧
- pg_rewind详解
- 华夫饼为什么不松软_华夫饼0添加太难了,在家才能做到,松软有营养,好吃又减肥...
- 力扣题解:45. 跳跃游戏 II
- 反爬虫之猫眼电影字体加密
- 音乐对计算机专业的影响,计算机网络技术对音乐发展的影响探讨
- Hbaseshell scan多种过滤操作
热门文章
- 快速上手关键词抽取的算法
- [Google API](1)简介
- Single Molecule Real-Time Sequencing
- 从FASTQ到BAM经历了什么?
- Fast and accurate short read alignment with Burrows-Wheeler transform
- Linux指定网卡优先级,如何在Ubuntu中设置网络连接的优先级?
- 关于短文本匹配的深度学习模型
- 延时函数介绍和呼吸灯的实现
- java+long.builder_Java LongStream.Builder accept()用法及代码示例
- 量化网络训练--Towards Effective Low-bitwidth Convolutional Neural Networks