个人主页:500佰
个人专栏:大数据组件性能调优-登上高阶
#HBase #HBase性能调优 #大数据 #生产情况真实案例 #列式数据库 #整理 #履历总结
说明:此篇总结HBase性能调优引导 结合自身经历 总结不易 +关注 +收藏 接待各位大拿留言
本专题:HBase性能调优引导 说明:此篇整理比较丰富 发起收藏学习
目次
1.1 模块架构模子
2.1 典型业务的调优
2.1.1 提升写效率
2.1.1.1 客户端相关配置
2.1.1.2 Memstore相关配置
2.1.1.3 内存相关配置
2.1.1.4 HFile相关配置
2.1.1.5 Compaction相关配置
2.1.1.6 HLog相关配置
2.1.1.7 表设计相关配置
2.1.2 提升读效率
2.1.2.1 客户端相关配置
2.1.2.2 缓存相关配置
2.1.2.3 HDFS相关配置
2.1.3 常用配置参数调整
2.1.3.1 HMaster启动
2.1.3.2 WAL split
3.1HBase开辟业务应用引导
3.1.1 RowKey设计
3.1.2 预分区
4.1 性能调优常用方法
4.1.1 POC调优引导
1.1 模块架构模子
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储体系。HBase适合于存储大表数据(表的规模可以达到数十亿行以及数百万列),并且对大表数据的读、写访问可以达到实时级别。
图1-1 HBase架构
表1-1 模块说明
模块名称功能描述Master又叫HMaster,在HA模式下,包罗主用Master和备用Master。1.主用Master:负责HBase中RegionServer的管理,包罗表的增删改查;RegionServer的负载平衡,Region分布调整;Region分裂以及分裂后的Region分配;RegionServer失效后的Region迁移等。2. 备用Master:当主用Master故障时,备用Master将取代主用Master对外提供服务。故障规复后,原主用Master降为备用。ClientClient利用HBase的RPC机制与Master、RegionServer举行通信。Client与Master举行管理类通信,与RegionServer举行数据操作类通信。RegionServerRegionServer负责提供表数据读写等服务,是HBase的数据处理和计算单元。RegionServer一般与HDFS集群的DataNode部署在一起,实现数据的存储功能。ZooKeeper集群(强依赖)ZooKeeper为HBase集群中各进程提供分布式协作服务。各RegionServer将自己的信息注册到Zookeeper中,主用Master据此感知各个RegionServer的健康状态。HDFS集群(强依赖)HDFS为HBase提供高可靠的文件存储服务,HBase的数据全部存储在HDFS中。
2.1 典型业务的调优
2.1.1 提升写效率
2.1.1.1 客户端相关配置
配置场景
在往HBase写入数据时,可以调整客户端的相关参数来提高写入的效率。
配置描述
配制方法详见描述。
参数说明
参数描述默认值调优发起Put List客户端调用的一个API接口,利用该接口,可以批量举行Put操作。-如果需要实验Put的操作非常频仍,发起利用该接口来实验导入数据。
2.1.1.2 Memstore相关配置
配置场景
在往HBase写入数据时,可以调整服务端的相关参数来提高写入的效率。
配置描述
配制方法详见描述。
参数说明
参数描述默认值调优发起hbase.hregion.memstore.flush.size在RegionServer中,当写操作内存中存在超过memstore.flush.size巨细的memstore,则MemStoreFlusher就启动flush操作将该memstore以hfile的情势写入对应的store中。128M1. 如果RegionServer的内存充足,而且活跃Region数量也不是很多的时候,可以适当增大该值,可以减少compaction的次数,有助于提升体系性能。2. 这种flush产生的时候,并不是紧急的flush,flush操作可能会有一定延迟,在延迟期间,写操作还可以举行,Memstore还会继续增大,最大值 =“memstore.flush.size” * “hbase.hregion.memstore.block.multiplier”。3. 当超过最大值时,将会阻塞写操作。适当增大“hbase.hregion.memstore.block.multiplier”可以减少阻塞,减少性能波动。hbase.regionserver.global.memstore.sizeRegionServer中,负责flush操作的是MemStoreFlusher线程。该线程定期检查写操作内存,当写操作占用内存总量达到阈值,MemStoreFlusher将启动flush操作,按照从大到小的次序,flush若干相对较大的memstore,直到所占用内存小于阈值。阈值 = “hbase.regionserver.global.memstore.size” * “hbase.regionserver.global.memstore.size.lower.limit” * “HBase_HEAPSIZE”0.4该配置与“hfile.block.cache.size”的和不能超过0.8,也就是写和读操作的内存不能超过HeapSize的80%,如许可以包管除读和写外别的操作的正常运行。hbase.hstore.blockingStoreFiles在region flush前首先判断file文件个数,是否大于hbase.hstore.blockingStoreFiles。如果大于需要先compation 并且让flush延时90s(这个值可以通过hbase.hstore.blockingWaitTime举行配置),在延时过程中,将会继续写从而使得Memstore还会继续增大超过阈值(“memstore.flush.size” * “hbase.hregion.memstore.block.multiplier”),导致写操作阻塞。当完成compation后,可能就会产生大量写入。如许就导致性能激烈震荡。15增加hbase.hstore.blockingStoreFiles,可以减低BLOCK几率。
2.1.1.3 内存相关配置
配置场景
HBase利用内存完成读写操作。提高HBase内存可以有用提高HBase性能。
配置描述
配制方法详见描述。
参数说明
参数描述默认值调优发起GC_OPTSHBase利用的内存和GC配置参数,分为hmaster和regionserver的按实际情况举行配置1. 调整HeapSize巨细的时候,发起将Xms和Xmx设置成相同的值,如许可以制止JVM动态调整HeapSize巨细的时候影响性能。2. 调整NewSize巨细的时候,发起把其设置为HeapSize巨细的1/9。3. HMaster:当HBase集群规模越大、Region数量越多时,可以适当调大HMaster的GC_OPTS参数。4. RegionServer:RegionServer需要的内存一般比HMaster要大。在内存充足的情况下,HeapSize可以相对设置大一些。
2.1.1.4 HFile相关配置
配置场景
可以对Hfile的相关配置型举行调整来提高写入效率。
配置描述
配制方法详见描述。
参数说明
参数描述默认值调优发起hbase.regionserver.hfile.durable.sync控制HFile文件在写入到HDFS时的同步水平。如果为true,HDFS在把数据写入到硬盘后才返回;如果为false,HDFS在把数据写入OS的缓存后就返回。true把该值设置为false比true在写入性能上会更优。
2.1.1.5 Compaction相关配置
配置场景
Compact会大大降低写入的性能,但是Compact本身对于HBase是不可或缺的过程,可以通过调整相关的参数来控制Compact的触发条件。
配置描述
配制方法详见描述。
参数说明
参数描述默认值调优发起hbase.regionserver.thread.compaction.throttle控制一次Minor Compaction时,举行compation的文件总巨细的阈值。1.5GCompaction时的文件总巨细会影响这一次compaction的实验时间,如果太大,可能会阻塞别的的compaction或flush操作。hbase.hstore.compaction.min当一个Store中文件超过该值时,会举行compact。6适当增大该值,可以减少文件被重复实验compaction。但是如果过大,会导致Store中文件数过多而影响读取的性能hbase.hstore.compaction.max控制一次compaction操作时的文件数量的最大值。10与“hbase.hstore.compaction.max.size”的作用根本相同,主要是控制一次compaction操作的时间不要太长。hbase.hstore.compaction.max.size如果一个HFile文件的巨细大于该值,那么在Minor Compaction操作中不会选择这个文件举行compaction操作,除非举行Major Compaction操作。2.5G这个值可以防止较大的HFile到场compaction操作。在禁止Major Compaction后,一个Store中可能存在几个HFile,而不会合并成为一个HFile,如许不会对数据读取造成太大的性能影响。hbase.hregion.majorcompaction由于实验Major Compaction会占用较多的体系资源,如果正在处于体系繁忙时期,会影响体系的性能。6048000001. 如果业务没有较多的更新、删除、回收逾期数据空间时,发起设置为0,以禁止Major Compaction。2. 如果必须要实验Major Compaction,以回收更多的空间,可以适当增加该值,同时配置参数“hbase.offpeak.end.hour”和“hbase.offpeak.start.hour”以控制Major Compaction发生在业务空闲的时期。
2.1.1.6 HLog相关配置
配置场景
RegionServer上有一个 Write-ahead Log (以下简称WAL),数据会持续的默认写到这个文件中。它包罗了所有已经提交到RS的,已经保留在memstore中但是尚未flush到storefile的数据编辑汗青。在数据写入的过程中,默认也会将所有的相关操作同步到WAL里面,可以调整相关参数来提高写入速度。
配置描述
配制方法详见描述。
参数说明
参数描述默认值调优发起hbase.regionserver.wal.durable.sync控制HLog文件在写入到HDFS时的同步水平。如果为true,HDFS在把数据写入到硬盘后才返回;如果为false,HDFS在把数据写入OS的缓存后就返回。true把该值设置为false比true在写入性能上会更优。setWriteToWAL在实验Put的时候可以指定是否将这条数据写入时同步到WAL里面。true如果对数据写入的速度要求极高,并且可以接受HBase节点出现异常后的数据丢失,可以把这个关闭,可以极大地提高写入速度。
2.1.1.7 表设计相关配置
配置场景
在表设计的时候可以指定一些参数,一定水平上可以提高读写性能。
配置描述
配制方法详见描述。
参数说明
参数描述默认值调优发起COMPRESSION配置数据的压缩算法,这里的压缩是HFile中Block级别的压缩。对于可以压缩的数据,配置压缩算法可以有用减少磁盘的IO,从而达到提高性能的目的。None并非所有数据都可以举行有用压缩。比方一张图片的数据,由于图片一般已经是压缩后的数据,以是压缩效果有限。保举利用SNAPPY,由于它有较好的Encoding/Decoding速度和可以接受的压缩率。Eg: create 'test_table',{NAME => 'cf1', COMPRESSION => 'SNAPPY'}BLOCKSIZE配置HFile中Block块的巨细,不同的Block块巨细,可以影响HBase读写数据的效率。越大的Block块,共同压缩算法,压缩的效率就越好;但是由于HBase的读取数据是以Blcok块为单位的,以是越大的Block块,对于随机读的情况,性能可能会比较差。64K如果要提升写入的性能,一般扩大到128KB或者256KB,可以提升写数据的效率,也不会影响太大的随机读性能。Eg: create 'test_table',{NAME => 'cf1', BLOCKSIZE => '32768'}IN_MEMORY配置这个表的数据优先缓存在内存中,如许可以有用提升读取的性能。false对于一些小表,而且需要频仍举行读取操作的,可以设置此配置项。Eg: create 'test_table',{NAME => 'cf1', IN_MEMORY => 'true'}
2.1.2 提升读效率
2.1.2.1 客户端相关配置
配置场景
在利用客户端读取HBase的数据时,可以通过在代码利用上举行配置和优化,做到读取速度的提高。
配置描述
配制方法详见描述。
参数说明
参数描述默认值调优发起hbase.client.scanner.caching客户端默认缓存的数据巨细,调用Scanner.next的时候会先从缓存中取数据,如果缓存中数据取完后才向regionserver举行scan请求。100(条)增大该值可以提高客户端读取数据的速度,并且大大降低对regionserver的请求个数。hbase.client.scanner.max.result.sizeclient请求rs上每次返回结果的最大巨细。2MB可以增大该数值来增加每次请求regionserver上得到数据量,从而降低到regionserver的请求。
2.1.2.2 缓存相关配置
配置场景
在RegionServer端可以配置Block的缓存区巨细,一定水平提高查询效率。
配置描述
配制方法详见描述。
参数说明
参数描述默认值调优发起hfile.block.cache.sizeHBase 缓存区巨细,主要影响查询性能。根据查询模式以及查询记载分布情况来决定缓存区的巨细。0.25如果接纳随机查询使得缓存区的掷中率较低,此时缓存区的性价比其实并不高,这种情况下可以适当降低缓存区巨细。
2.1.2.3 HDFS相关配置
配置场景
客户端通过HBase读取数据,可以调整服务端的相关参数来提高读取的效率。
配置描述
配制方法详见描述。
参数说明
参数描述默认值调优发起dfs.client.read.shortcircuit是否启动shortcircuit读功能。HDFS shortcircuit读允许直接读HDFS的DataNode。true把该值设置为true比false在读取性能上会更优。
2.1.3 常用配置参数调整
2.1.3.1 HMaster启动
配置场景
当前HBase启动的主要瓶颈是在HMaster的启动上,由于在HMaster启动过程中,它会启动相称多的流程,尤其是在集群规模大,负载高的情况下,hmaster的预加载表信息、读取HFile的blockLocation、region的重新分配、WAL文件的split都会斲丧比较长的时间。 可以调整相关的参数,来包管HMaster可以或许正常地启动。
配置描述
配制方法详见描述。
参数说明
参数描述默认值调优发起hbase.master.preload.tabledescriptors在hbase1.x以后的版本,为了减少对HDFS上的访问频率,默认将在HMaster启动的时候加载好所有table的descriptor信息。。false关闭之后会一定水平上加速启动速度,但是当前的HBase机制是需要在启动时加载表描述,不发起关闭。hbase.master.initializationmonitor.timeoutHMaster启动时初始化的超时时间,超时将导致HMaster启动失败。1200000ms如果集群的负载比较高(region个数、表个数、单个RegionServer上的region个数比较多),会影响整个HMaster的启动时间,此时需要适当调整此参数。hbase.master.namespace.init.timeoutHMaster启动的时候,此参数控制初始化namespace的超时时间,超时将导致HMaster启动失败。1200000ms如果在启动过程中有体系相关的region在做assginment比较慢,可适当地调整此参数来包管HMaster可以或许正常启动。
2.1.3.2 WAL split
配置场景
当HBase中的某一个RegionServer意外故障或者HMaster重启时,在HMaster侧会举行WAL文件的split,当集群中单个RegionServer的负载比较高(region个数太多)或者访问HDFS比较缓慢时,会影响WAL split的速度,甚至失败。
配置描述
配制方法详见描述。
参数说明
参数描述默认值调优发起hbase.splitlog.manager.timeoutHMaster在实验分布式WAL split的时候,会在ZK上创建和发布task,之后所有的Worker会抢占此task再实验,此参数控制hmaster在Worker抢占task后实验WAL split的超时时间,如果超时,将重新发布task。600000ms如果集群中的region个数比较多,或者访问和写入HDFS的速度缓慢,可适当调整此参数来包管WAL split可以或许正常完成。hbase.regionserver.hlog.splitlog.writer.threads在Worker实验WAL split的task的时候,会对该WAL文件相关的所有region分别创建rocover-edit文件,此参数控制同时写入HDFS的线程个数。3如果集群中的region个数特别多,需要包管WAL split的速度(如果WAL split太慢会直接导致hmaster失败),可以适当地加大此线程数。但是如果当前HDFS上的负载已经很高,加大此参数并不能改善WAL split的速度。
3.1HBase开辟业务应用引导
3.1.1 RowKey设计
Rowkey作用:
设计Rowkey思量因素:
1. 用户最有价值/频率最高的查询场景是基于哪个字段举行的。
2. 查询时是否需要按照某个字段举行排序。
3. 被选定作为RowKey的字段,是否可以或许唯一的识别一行记载。
3.1.2 预分区
默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region充足大了才举行切分。一种可以加速批量写入速度的方法是通过预先创建一些空的regions,如许当数据写入HBase时,会按照region分区情况,在集群内做数据的负载平衡。
Region预分的目的:
- 在表数据量不断增长的情况下,Region自动分裂期间会有很短暂的时间该Region不能提供读写服务。因此,预分Region可以尽量减少或制止在线体系的Region自动分裂。
- 提高数据写入性能。如果接纳BulkLoad方式举行数据导入时,Reduce的个数等于用户表的Region个数(主索引的Region个数+二级索引的Region个数)。Reduce的个数也很大的影响着BulkLoad的性能。如果接纳Java接口举行实时数据的写入,Region分布在多个物理节点上也可以提高写入性能。
- 提高数据读取性能。每个Region管理的数据是根据Rowkey范围确定的,因此该范围内的数据读取则必然经过该Region,因此当该多个Rowkey预分成多个Region之后,通过该Rowkey读取请求则可以由多台呆板节点来分担,从而提高读取性能。
- 使得数据尽可能的匀称分布在各个Region中,从而使读写请求可以或许比较匀称的分布在各个物理节点上。
4.1 性能调优常用方法
4.1.1 POC调优引导
配置参数表
配置项(方法)设置值说明hbase.regionserver.wal.durable.syncfalse不启用WAL文件历久性以将WAL数据长期化到磁盘。hbase.regionserver.hfile.durable.syncfalse不启用HFile历久性以将数据长期化到磁盘。dfs.replication1副本数。 末了
谢谢各人 @500佰
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |