`

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系统性能优化与功能增强综述_董新华.pdf

    在给出Hadoop系统基本框架的基础上,阐述了MapReduce并行计算框架优化、作业调度优化、HDFS性能优化、HBase性能优化和Hadoop功能增强等研究现状,分析已有技术的优势和不足,并探讨了未来的研究方向.

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

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

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

    NULL 博文链接:https://aperise.iteye.com/blog/2282670

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

    Hadoop 集群(第 12 期副刊)-HBase性能优化.pdf 这个是pdf高清文字版,内容可以复制的哦。

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

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

    HBase的性能优化

    HBase的性能优化测试,应各自环境不同参照设置自己的数据库参数

    大数据框架(HADOOP、HIVE、HBASE)优化和简历项目编写(视频+讲义+笔记)

    大数据框架(HADOOP、HIVE、HBASE)优化和简历项目编写(视频+讲义+笔记),内容包括但不限于: ... 09_Hive中groupBy数据倾斜面试详解及HBase 性能优化详解 10_大数据项目简历编写指导及HADOOP 项目业务需求补充说明

    HBase性能调优

    HBase,性能调优,hadoop,主要是HBASE的各种内部参数的设置,以便优化HBASE的性能。

    基于Hadoop的海量交易记录查询系统研究

    Hadoop 云计算框架中的 HDFS 分布式文件系统和 HBase 分布式数据库,分别介绍了 HDFS 的特性、系统框架、副本存放策略和 HBase 的系统框架及数据模型。其次,重点分析了 HBase 的存储特点,通过分析 HBase 的数据...

    HBase负载均衡分析及优化策略

    HBase作为Hadoop分布式开源云数据库因其高可用性等优势越来越受到青睐,但是随着大量数据的注入,HBase对负载的分配状况将直接影响到整个集群的性能优劣.针对原有负载均衡算法在负载分配过程中可能产生的负载严重不...

    面向HBase的大规模数据加载研究

    基于Hadoop分布式平台搭建HBase环境,并优化自定义数据加载算法.首先,分析HBase底层数据存储,实验得出HBase自带数据加载方式在效率和灵活性方面存在不足;进而,提出了自定义并行数据加载算法,并针对集群进行优化.实验...

    基于Hadoop的Apriori算法研究与优化

    为解决传统数据挖掘算法在大量数据处理时面临的内存占用、计算性能等方面的问题,基于Hadoop平台,应用HBase文件存储系统对海量数据分布式存储以及Map Reduce框架进行分布式计算,实现Apriori经典数据挖掘算法。...

    Hadoop大数据处理_刘军

    《Hadoop大数据处理》以大数据处理系统的三大关键要素――“存储”、“计算”与“容错”为起点深入浅出地介绍了如何使用Hadoop这一高性能分布式技术完成大数据处理任务。本书不仅包含了使用Hadoop进行大数据处理的...

    Hadoop实战中文版

    4.5 Hadoop 的Streaming 4.5.1 通过Unix命令使用Streaming 4.5.2 通过脚本使用Streaming 4.5.3 用Streaming处理键/值对 4.5.4 通过Aggregate包使用Streaming 4.6 使用combiner 提升性能 4.7 温故知新 4.8 小...

    细细品味Hadoop集群11-15

    特别好的Hadoop教程,基本上等于手把手教了,每一步都非常详细 (第11期)_HBase简介及安装 ...(第12期副刊)_HBase性能优化 (第13期)_Hive简介及安装 (第14期)_Hive应用开发 (第15期)_HBase、Hive与RDBMS

    HBase企业应用开发实战

    从如何用好HBase出发,首先介绍设计原理和应用场景,让读者了解HBase适合什么场景不适合什么场景,然后再介绍应用编程、性能优化和生产环境中的运维经验,可谓由浅入深,循序渐进,值得推荐!, —— 查礼 博士, 中国...

    Hadoop实战(第2版)

    技术点5 使用Sqoop 从MySQL 导入数据 2.2.4 HBase 技术点6 HBase 导入HDFS 技术点7 将HBase 作为MapReduce 的数据源2.3 将数据导出Hadoop 2.3.1 将数据导入本地文件系统技术点8 自动复制HDFS 中的文件...

    Hadoop实战中文版.PDF

    206第11章 Hive及Hadoop群 20711.1 Hive 20711.1.1 安装与配置Hive 20811.1.2 查询的示例 21011.1.3 深入HiveQL 21311.1.4 Hive小结 22111.2 其他Hadoop相关的部分 22111.2.1 HBase 22111.2.2 ...

    Hadoop技术选型分析报告.pdf

    根据市场上目前比较流行的几款Hadoop产品综合分析,从部署的便捷性、功能、性能及成本等方面综合考量,推荐使用CDH与HDP。然后再根据我们具体的使用场景来进行选择,如果我们追求功能全面与部署案例参考推荐使用CDH...

Global site tag (gtag.js) - Google Analytics