hbase的优化的一点经验,一直没做这个笔记,是因为hbase自身也有设计缺陷,所以有些配置不能说优化,只能说因为hbase自身缺陷可以将就着用,不说废话了,以下就是优化的一点笔记
hbase配置修改:
(split是因为hfile过多,进行split,split之后进行compact
可以可能要有人喷了,hfile多了应该compact才对啦。贴出0.98.1的代码,大致逻辑是region没有block的compact(优先级大于等于1的),则进行split)
private boolean flushRegion(final FlushRegionEntry fqe) { HRegion region = fqe.region; if (!region.getRegionInfo().isMetaRegion() && isTooManyStoreFiles(region)) {//这个函数使用了参数 if (fqe.isMaximumWait(this.blockingWaitTime)) { LOG.info("Waited " + (System.currentTimeMillis() - fqe.createTime) + "ms on a compaction to clean up 'too many store files'; waited " + "long enough... proceeding with flush of " + region.getRegionNameAsString()); } else { // If this is first time we've been put off, then emit a log message. if (fqe.getRequeueCount() <= 0) { // Note: We don't impose blockingStoreFiles constraint on meta regions LOG.warn("Region " + region.getRegionNameAsString() + " has too many " + "store files; delaying flush up to " + this.blockingWaitTime + "ms"); if (!this.server.compactSplitThread.requestSplit(region)) {//这里是关键的逻辑,逻辑是region没有block的compact(优先级大于等于1的),则进行split;否则进行compact try { this.server.compactSplitThread.requestSystemCompaction( region, Thread.currentThread().getName()); } catch (IOException e) { LOG.error( "Cache flush failed for region " + Bytes.toStringBinary(region.getRegionName()), RemoteExceptionHandler.checkIOException(e)); } } } // Put back on the queue. Have it come back out of the queue // after a delay of this.blockingWaitTime / 100 ms. this.flushQueue.add(fqe.requeue(this.blockingWaitTime / 100)); // Tell a lie, it's not flushed but it's ok return true; } } return flushRegion(region, false); }
hbase.hstore.blockingStoreFiles hfile数量上限,如果超过,则进行阻塞写,进行split | compact
hbase.hstore.blockingWaitTime 阻塞写的时间上限 ,到时间没进行split或compact(就是没锁上,则继续)
最大region 500G,禁止常规的split情况
<property>
<name>hbase.hregion.max.filesize</name>
<value>536870912000</value>
</property>
一个store中30个hfile的上限
<property>
<name>hbase.hstore.blockingStoreFiles</name>
<value>30</value>
</property>
一分半的写的阻塞上限
<property>
<name>hbase.hstore.blockingWaitTime</name>
<value>90000</value>
</property>
hbase.regionserver.regionSplitLimit region包含的最大region数, split需要检查现有region不大于这个
compact Priority逻辑
初始化为int.minvalue,user为1,被block>1
-----------------------------------------------
DEBUG [LruStats #0] hfile.LruBlockCache: Total=11.78 GB, free=1.01 GB, max=12.79 GB,
memcache设置256
memcache使用mslb
使用mslb
<property>
<name>hbase.hregion.memstore.mslab.enabled</name>
<value>true</value>
</property>
memcash的flush的条件256M
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>268435456</value>
</property>
安全检查memstore使用region_heap的百分比 , 强制flush
</property>
base.regionserver.global.memstore.lowerLimit
<property>
<name>hbase.regionserver.global.memstore.lowerLimit</name>
<value>0.36</value>
<description>
一个RS中所有的memstore的总容量超过堆的该百分比限制后,将被强制flush到磁盘。
Maximum size of all memstores in a region server before flushes are forced. Defaults to 35% of heap. 这个值与
hbase.regionserver.global.memstore.upperLimit相等,以减小由于到达该值触发flush的几率,因为这种flush会block写请求
</description>
</property>
安全检查memstore使用region_heap的百分比 , 强制flush,并阻塞写请求
<property>
<name>hbase.regionserver.global.memstore.upperLimit</name>
<value>0.4</value>
<description>
一个region中所有memstore的总大小超过堆的该百分比限制时,会发生强制flush,并block更新请求。
默认是堆大小的40%。更新会被阻塞,并发生强制flush,直到所有memstore的大小达到
hbase.regionserver.global.memstore.lowerLimit的限制。
</description>
</property>
达到flushsize指定倍数时,会强制flush,并阻塞请求
<property>
<name>hbase.hregion.memstore.block.multiplier</name>
<value>2</value>
<description>
当一个region的memstore达到hbase.hregion.memstore.block.multiplier * hbase.hregion.flush.size的指定倍数时,阻塞写请求。
这是一个避免在写请求高峰时期避免memstore耗尽的有效设置。如果没有上限限制,memstore被填满后发生flush时,
会消耗大量的时间来处理合并和分割,甚至导致OOM。
</description>
</property>
----------------------------------------------------
gc的问题
3.5分钟挂掉
11 分钟
(70)提前gc,减少每个gc耗时
hbase-env.sh中
export HBASE_REGIONSERVER_OPTS="-Xmx16g -Xms16g -Xmn128m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:$HBASE_HOME/logs/gc-hbase.log"
----------------------------------------------------
compact时间是否过长??
compact的时候gc过长
2015-02-25 11:54:50,670 WARN [regionserver60020.periodicFlusher] util.Sleeper: We slept 565427ms instead of 10000ms, this is likely due to a long garbage collecting pause and it's usually bad, se
e http://hbase.apache.org/book.html#trouble.rs.runtime.zkexpired
2015-02-25 11:54:50,670 WARN [DataStreamer for file /hbase/WALs/host64,60020,1422073827259/host64%2C60020%2C1422073827259.1424835178059 block BP-1540478979-192.168.5.117-1409220943611:blk_1097821
214_24084365] hdfs.DFSClient: Error Recovery for block BP-1540478979-192.168.5.117-1409220943611:blk_1097821214_24084365 in pipeline 192.168.5.64:50010, 192.168.5.95:50010: bad datanode 192.168.5.
64:50010
2015-02-25 11:54:50,670 WARN [regionserver60020.compactionChecker] util.Sleeper: We slept 565427ms instead of 10000ms, this is likely due to a long garbage collecting pause and it's usually bad,
see http://hbase.apache.org/book.html#trouble.rs.runtime.zkexpired
2015-02-25 11:54:50,670 INFO [regionserver60020-SendThread(host141:42181)] zookeeper.ClientCnxn: Client session timed out, have not heard from server in 577669ms for sessionid 0x44add78c8664fdb,
closing socket connection and attempting reconnect
转为手动compact,需要逐步手动compact
<property>
<name>hbase.hregion.majorcompaction</name>
<value>0</value>
</property>
------------------------------------------------------
regionserver里的handler数量 50
<property>
<name>hbase.regionserver.handler.count</name>
<value>50</value>
<source>hbase-site.xml</source>
</property>
--------------------------------------------------
wal大小,影响memcash flush
当前hbase.regionserver.hlog.blocksize * hbase.regionserver.maxlogs 128*32=4G
但是hbase.regionserver.global.memstore.lowerLimit * HBASE_HEAPSIZE 0.38*32=12.16G
hbase.regionserver.global.memstore.upperLimit * HBASE_HEAPSIZE 0.4*32=12.8
注意:确保hbase.regionserver.hlog.blocksize * hbase.regionserver.maxlogs 比hbase.regionserver.global.memstore.lowerLimit * HBASE_HEAPSIZE的值只高那么一点点。.
改为
<property>
<name>hbase.regionserver.maxlogs</name>
<value>104</value>
</property>
<property>
<name>hbase.regionserver.global.memstore.lowerLimit</name>
<value>0.36</value>
</property>
128*105=13G
0.36*32=11.52G
0.4*32=12.8G
原则是让memflush不阻塞,禁止因为wal触发的flush,wal会进行多region flush,并且阻塞,这是最坏的情况
---------------------------------------------------
blockcache是读取时使用内存
<property> <name>hfile.block.cache.size</name> <value>0.4</value> </property>
----------------------------------------------------
超时时间待验证,设置或过长
<property> <name>hbase.rowlock.wait.duration</name> <value>90000</value> <description> 每次获取行锁的超时时间,默认为30s </description> </property> <property> <name>hbase.regionserver.lease.period</name> <value>180000</value> <description> 客户端每次获得rs一次socket时间 </description> </property> <property> <name>hbase.rpc.timeout</name> <value>180000</value> <description> rpc超时时间 </description> </property> <property> <name>hbase.client.scanner.timeout.period</name> <value>180000</value> <description> 客户端每次scan|get的超时时间 </description> </property> <property> <name>hbase.client.scanner.caching</name> <value>100</value> <description> 客户端每次scan的一个next,获得多少行,默认1 </description> </property>
相关推荐
——HBase性能优化 1、从配置角度优化 1.1 修改Linux配置 Linux系统最大可打开文件数一般默认的参数值是1024,如果你不进行修改并发量上来的时候会出现“Too Many Open Files”的错误,导致整个HBase不可运行,你...
基于机器学习的HBase配置参数优化研究.pdf
9-1 Zookeeper安装与HBase配置优化 9-2 Hos开发逻辑梳理 9-3 Hos模块划分及mybatis配置 第10章 子模块-用户管理模块 Hos服务用户管理模块开发,基于第九章的数据库操作模块,开发相关的实体类对用户的增删改查操作...
│ Hbase性能优化-配置snappy压缩 │ Hbase中索引的介绍 │ PHoenix的编译及安装部署 │ PHoenix与Hbase表的关联使用 ├─03_笔记 │ [案例:Hbase的设计及企业优化].txt ├─04_代码 │ └─微博案例 ├─08_作业 ...
本文件内容适用于学习Hadoop时所需配置HBase的所有文件,包括以下内容: hbase-1.2.1-bin.tar.gz hbase-site.xml.txt 配置文件收集不易,有部分配置内容已单独复制出来! 希望大家点个收藏点个赞,谢谢大家!
本文档详细的描述了HBASE数据库优化思路及其一些配置优化,有详细的例子去演示如何优化
个人笔记整理(带目录),共8个章节: ...二.Apache HBase配置 三.Hbase数据存储 四.HBase协处理器与二级索引 五.PHOENIX操作HBASE 六.HBase设计与优化 七.HBase与Spark集成 八.Trafodion操作HBase 共146页
了扩展,提供了比 Lucene 更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能 进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。 Solr 可以高亮显示搜索结果,通过索引复制来...
随着大数据的越来越普及,HBase也变得...笔者总结至少有如下几个方面:HDFS相关配置优化,HBase服务器端优化(GC优化、Compaction优化、硬件配置优化),列族设计优化,客户端优化等,其中客户端优化在前面已经通过超
本文主要是从HBase安装配置和应用程序设计与开发的角度,总结几种常用的性能优化方法。
从如何用好HBase出发,首先介绍设计原理和应用场景,让读者了解HBase适合什么场景不适合什么场景,然后再介绍应用编程、性能优化和生产环境中的运维经验,可谓由浅入深,循序渐进,值得推荐!, —— 查礼 博士, 中国...
HBase性能调优方法。因官方BookPerformanceTuning部分章节没有按配置... 配置优化 zookeeper.session.timeout 默认值:3分钟(180000ms) 说明:RegionServer与Zookeeper间的连接超时时间。当超时时间到后,Reigo
HDFS)在海量样本数据集存储方面存在内存占用多、读取效率低的问题,以及分布式数据库HBase在存储文件名重复度和类似度高时产生访问热点的问题,结合样本数据集的特点、类型,提出一种面向样本数据集存取优化方案,...
的正确性,并优化算法以获得更好的性能。 执行 Themis 包含三个组件:时间戳服务器、客户端库、themis 协处理器。 时间戳服务器 Themis内部使用HBase的KeyValue的时间戳,时间戳必须是全局严格增量的。 Themis 依赖...
大数据平台运维服务方案是一个涵盖了大数据平台的安装、配置、监控、故障处理、优化和升级等多个环节的全面服务方案。以下是一个可能的知识研究或个人学习路径: 1. 学习大数据基础知识:包括大数据的概念、特点、...
余庆——分布式文件系统FastDFS架构剖析及配置优化 谭怀远—海量数据环境下的Oracle数据库系统架构设计和优化思路 专场4:数据挖掘 商业智能专场—演讲嘉宾及主题 黄志洪—大数据分析的案例、方法与挑战 韩卿——...
Solr的多种性能优化技巧,如索引的性能优化、缓存的性能 优化、查询的性能优化、JVM和Web容器的优化,以及操作系统级别的优化。 拓展知识中首先讲解了Solr的一些比较生僻的知识点,如伪域、多语种索引支持、安全认证...
Solr的多种性能优化技巧,如索引的性能优化、缓存的性能 优化、查询的性能优化、JVM和Web容器的优化,以及操作系统级别的优化。 拓展知识中首先讲解了Solr的一些比较生僻的知识点,如伪域、多语种索引支持、安全认证...