`

Hadoop HBase性能优化学习

 
阅读更多
一、调整参数

入门级的调优可以从调整参数开始。投入小,回报快。

1. Write Buffer Size
快速配置
HTable htable = new HTable(config, tablename);   
htable.setWriteBufferSize(6 * 1024 * 1024);  
htable.setAutoFlush(false);
  
设置buffer的容量,例子中设置了6MB的buffer容量。
* 必须禁止auto flush。
* 6MB是经验值,可以上下微调以适应不同的写场景。

原理
HBase Client会在数据累积到设置的阈值后才提交Region Server。这样做的好处在于可以减少RPC连接次数。同时,我们得计算一下服务端因此而消耗的内存:hbase.client.write.buffer * hbase.regionserver.handler.count。在减少PRC次数和增加服务器端内存之间找到平衡点。

2. RPC Handler
快速配置
修改hbase-site.xml的hbase.regionserver.handler.count配置项:

<property>  
<name>hbase.regionserver.handler.count</name>  
<value>100</value>  
</property> 


原理
该配置定义了每个Region Server上的RPC Handler的数量。Region Server通过RPC Handler接收外部请求并加以处理。所以提升RPC Handler的数量可以一定程度上提高HBase接收请求的能力。当然,handler数量也不是越大越好,这要取决于节点的硬件情况。

3. Compression 压缩
快速配置
HColumnDescriptor hcd = new HColumnDescriptor(familyName);   
hcd.setCompressionType(Algorithm.SNAPPY);  


原理
数据量大,边压边写也会提升性能的,毕竟IO是大数据的最严重的瓶颈,哪怕使用了SSD也是一样。众多的压缩方式中,推荐使用SNAPPY。从压缩率和压缩速度来看,性价比最高。

4. WAL
快速配置
Put put = new Put(rowKey);  
put.setWriteToWAL(false);
 

原理
其实不推荐关闭WAL,不过关了的确可以提升性能...因为HBase在写数据前会先写WAL,以保证在异常情况下,HBase可以按照WAL的记录来恢复还未持久化的数据。

5. Replication
虽然推荐replica=3,不过当数据量很夸张的时候,一般会把replica降低到2。当然也不推荐随便降低replica。

6. Compaction
在插数据时,打开HMaster的web界面,查看每个region server的request数量。确保大部分时间,写请求在region server层面大致平均分布。

在此前提下,我们再考虑compaction的问题。继续观察request数量,你会发现在某个时间段,若干region server接收的请求数为0(当然这也可能是client根本没有向这个region server写数据,所以之前说,要确保请求在各region server大致平均分布)。这很有可能是region server在做compaction导致。compaction的过程会block写。

优化的思路有两种,一是提高compaction的效率,二是减少compaction发生的频率。

提高以下两个属性的值,以增加执行compaction的线程数:
hbase.regionserver.thread.compaction.large  
hbase.regionserver.thread.compaction.small  

推荐设置为2。

7. 减少Region Split次数
region split是提升写性能的一大障碍。减少region split次数可以从两方面入手,一是预分配region(该内容会在下章节表设计优化里详述)。其二是适当提升hbase.hregion.max.filesize

提升region的file容量也可以减少split的次数。具体的值需要按照你的数据量,region数量,row key分布等情况具体考量。一般来说,3~4G是不错的选择。

8. HFile format version
0.92.0后的version都应该是2。v2比v1支持更大的region大小。一般经验是Region越大越少,性能更好(当然也不能过分大,否则major compaction的时候时间长的吃不消)。所以推荐把hfile.format.version改成2,并提高hfile大小。对于使用v1 format的用户,不用担心,数据迁移到v2上是有工具的。具体参见HBASE-1621。

9. hbase.ipc.client.tcpnodelay
设置成True。关闭Nagle,可能提高latency。当然HDFS也关掉TPC Nagle。

二、表设计优化
1. 预分配Region
之前有说防止region split的两大手段其中之一就是预分配region。

在此不重复region split的原理,请参见http://blog.sina.com.cn/s/blog_9cee0fd901018vu2.html。按数据量,row key的规则预先设计并分配好region,可以大幅降低region split的次数, 甚至不split。这点非常重要。

2. Column Family的数量
实测发现column family的数量对性能会有直接影响。建议减少column family的数量。单个cf是最好

3. Column Family MAX_VERSIONS/MAX_LENGTH
前者确定保存一个cell的最大历史份数,后者确定多少byte可以存进一个cell 历史记录。所以我们可以减低这些值。

4. Row Key的设计
Region的数据边界是start key和end key。如果记录的row key落在某个region的start key和end key的范围之内,该数据就会存储到这个region上。在写数据的时候,尤其是导入客户原有数据的时候,如果row key设计不当,很可能导致性能问题。之前我们也介绍了row key和region的关系。如果在某个时段内,很多数据的row key都处在某个特定的row key范围内。那这个特定范围row key对应的region会非常繁忙,而其他的region很可能非常的空闲,导致资源浪费。

那么,如何设计row key呢?举个比较实际的例子,如果有张HBase表来记录每天某城市的通话记录, 常规思路下的row key是由电话号码 + yyyyMMddHHmmSS(通话开始时间) + ... 组成。按电话号码的规律来划分region。但是这样很容易导致某时段row key极其不均匀(因为电话通话呈随机性)。但是,如果把电话号码倒序,数据在region层面的分布情况就大有改观。

设计row key的方法千变万化,宗旨只有一条,尽量保证单位时间内写入数据的row key对于region呈均匀分布。


分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    hadoop hbase性能报告(英文)

    ### Hadoop HBase性能报告分析 #### 引言与研究目标 本项目旨在评估Hadoop与HBase在实际集群环境中的性能表现。具体目标包括: 1. 在节点组成的集群上安装并配置Hadoop与HBase。 2. 研究Hadoop与HBase API,并...

    Hadoop2.7.1+Hbase1.2.1集群环境搭建(7)hbase 性能优化

    本篇将详细阐述如何在Hadoop 2.7.1环境下搭建HBase 1.2.1集群,并进行性能优化,以提升系统效率。 首先,我们需要了解Hadoop和HBase的基本概念。Hadoop是基于分布式文件系统HDFS(Hadoop Distributed File System)...

    Hadoop集群(第12期副刊)_Hbase性能优化

    ——HBase性能优化 1、从配置角度优化 1.1 修改Linux配置 Linux系统最大可打开文件数一般默认的参数值是1024,如果你不进行修改并发量上来的时候会出现“Too Many Open Files”的错误,导致整个HBase不可运行,你...

    hadoop-2.7.2-hbase-jar.tar.gz

    这一版本的Hadoop引入了YARN(Yet Another Resource Negotiator),它是Hadoop的资源管理和调度器,旨在提高集群资源利用率和系统整体性能。同时,Hadoop 2.7.2还对HDFS进行了优化,增强了其稳定性和安全性。 HBase...

    HadoopHbaseZookeeper集群配置

    【Hadoop Hbase Zookeeper集群配置】涉及到在Linux环境下搭建分布式计算和数据存储系统的流程,主要涵盖...同时,还需要关注安全性和性能优化,例如限制不必要的网络访问,调整内存和CPU资源分配,以及监控集群状态等。

    Hadoop 集群(第 12 期副刊)-HBase性能优化.pdf

    ### Hadoop集群(第12期副刊)-HBase性能优化 #### 一、从配置角度优化HBase性能 **1.1 修改Linux配置** Linux系统默认的最大可打开文件数通常设定为1024个,这对于大多数应用场景来说可能足够,但在高并发环境下...

    Hadoop HBase 配置 安装 Snappy 终极教程

    最后,我们可以通过监控工具(如Ambari或Ganglia)观察Hadoop和HBase的运行状态,以及Snappy压缩效果,以便进一步优化性能。同时,持续关注Hadoop和HBase的新版本发布,适时进行升级以获取最新的功能和性能改进。 ...

    hadoop hbase从入门到精通

    《Hadoop之HBase从入门到精通》是一个深入学习Hadoop和HBase的全面指南,旨在帮助初学者和有经验的开发者快速掌握这两个强大的大数据处理工具。Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在廉价...

    大数据 hdfs hadoop hbase jmeter

    结合标题和描述,我们可以看出这是一个关于使用JMeter测试Hadoop、HDFS和HBase连接性能的项目。在这个项目中,可能包含了配置JMeter测试计划、创建HDFS和HBase的连接、设置数据读写测试、收集和分析测试结果等内容。...

    hadoop+hbase+zookeeper集群配置流程及文件

    Hadoop2.8.4版本引入了YARN(Yet Another Resource Negotiator),优化了资源管理,增强了系统的稳定性和可扩展性。配置Hadoop集群主要包括以下几个步骤: 1. 安装Java环境:Hadoop依赖Java运行,确保所有节点上都...

    HDP3.1.5源码下载—hadoop hbase hive

    在hbase-release-HDP-3.1.5.0-152-tag.tar.gz文件中,包含了HBase的源代码,开发者可以深入学习其内部机制,进行性能优化或扩展。 Hive是基于Hadoop的数据仓库工具,提供了SQL-like查询语言HQL,方便用户对大数据...

    Hadoop与HBase部署文档

    而HBase是一款基于Hadoop的分布式、高性能、列式存储的NoSQL数据库,适用于实时查询和分析大规模数据。 1. **简介** 在部署Hadoop和HBase时,我们需要构建一个可靠的分布式环境,确保数据的高可用性和容错性。...

    大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第12期副刊_HBase性能优化_V1.0 共26页.pdf

    【大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第12期副刊_HBase性能优化_V1.0 共26页.pdf】 本文档主要关注Hadoop集群中的HBase性能优化,提供了从配置角度进行优化的建议。HBase是一个分布式列式存储...

    hadoop+hbase jar包

    6. 性能优化:在实际部署中,还需要关注Hadoop和HBase的性能优化,如设置合适的Block Size、副本数量、内存分配等参数,以及使用HBase的Region Split策略来提高数据访问效率。 总结,Hadoop和Hbase是大数据处理的...

    hbase性能优化

    综合来看,HBase性能优化是一个涉及多个层面的复杂过程。它需要开发者对HBase架构和其运行机制有深刻的理解,同时也需要对具体业务场景有充分的认识,才能进行合理的设计和有效的优化。本知识点内容对初学者而言是一...

    HBase性能优化指南

    ### HBase性能优化知识点汇总 #### HDFS优化 - **存储机制**: HBase使用HDFS存储WAL(Write-Ahead Log)和HFiles。默认情况下,HDFS不会实时同步数据到磁盘,而是写入临时文件后移动到最终位置,导致在断电情况下...

    Hadoop+HBase+Java API

    在实际项目中,可能还需要考虑数据模型设计、性能优化、故障恢复等方面。例如,为了提高HBase的查询效率,需要合理设计行键和列族,确保数据分布均匀。同时,可以通过调整Hadoop和HBase的配置参数,如BlockSize、...

    hadoop和hbase集成所需jar包

    在大数据处理领域,Hadoop和HBase是两个重要的开源组件,它们分别扮演着分布式存储和实时数据访问的角色。...在实际应用中,根据具体需求,你可能还需要关注性能优化、容错处理和数据一致性等方面的问题。

Global site tag (gtag.js) - Google Analytics