`
836811384
  • 浏览: 542316 次
文章分类
社区版块
存档分类
最新评论

【HBase】提升HBase写性能

 
阅读更多
本文主要介绍软件层面的性能调优。故,在此之前,请检查硬件状况。硬盘推荐SSD,一般SATA即可。网络千兆以上。可以安装Ganglia等工具,检查各节点的各硬件的运作状态:CPU,Memo,网络等等。
调整参数
入门级的调优可以从调整参数开始。投入小,回报快。

1. Write Buffer Size

  • 快速配置

Java代码收藏代码
  1. HTablehtable=newHTable(config,tablename);
  2. htable.setWriteBufferSize(6*1024*1024);
  3. htable.setAutoFlush(false);
设置buffer的容量,例子中设置了6MB的buffer容量。
* 必须禁止auto flush。
* 6MB是经验值,可以上下微调以适应不同的写场景。
  • 原理
HBase Client会在数据累积到设置的阈值后才提交Region Server。这样做的好处在于可以减少RPC连接次数。
2. RPC Handler
  • 快速配置
修改hbase-site.xml的hbase.regionserver.handler.count配置项:
Xml代码收藏代码
  1. <property>
  2. <name>hbase.regionserver.handler.count</name>
  3. <value>100</value>
  4. </property>
  • 原理
该配置定义了每个Region Server上的RPC Handler的数量。Region Server通过RPC Handler接收外部请求并加以处理。所以提升RPC Handler的数量可以一定程度上提高HBase接收请求的能力。当然,handler数量也不是越大越好,这要取决于节点的硬件情况。
3. Compression
  • 快速配置
Java代码收藏代码
  1. HColumnDescriptorhcd=newHColumnDescriptor(familyName);
  2. hcd.setCompressionType(Algorithm.SNAPPY);
  • 原理
数据量大,边压边写也会提升性能的,毕竟IO是大数据的最严重的瓶颈,哪怕使用了SSD也是一样。众多的压缩方式中,推荐使用SNAPPY。从压缩率和压缩速度来看,性价比最高。
4. WAL
  • 快速配置
Java代码收藏代码
  1. Putput=newPut(rowKey);
  2. 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。
优化Client设计
以上都是些常见的参数调整。但是写性能差一般是源于Client端的糟糕设计。
1. 避免region split
不得不说,region split是提升写性能的一大障碍。减少region split次数可以从两方面入手。首先是预分配region。
预分配region
不在此重复region split的原理,请参见http://blog.sina.com.cn/s/blog_9cee0fd901018vu2.html。按数据量,row key的规则预先设计并分配好regioin,可以大幅降低region split的次数。这点非常重要。
适当提升hbase.hregion.max.filesize
提升region的file容量也可以减少split的次数。具体的值需要按照你的数据量,region数量,row key分布等情况具体考量。一般来说,3~4G是不错的选择。
2. 均匀分布每个Region Server的写压力
之前也提到了RPC Handler的概念。好的Data Loader需要保证每个RPC Handlder都有活干,每个handler忙,但不至超载。注意region的压力不能过大,否则会导致反复重试,并伴有超时异常(可以提高超时的时间设置)。
如何保证每个Region Server的压力均衡呢?这和region 数量,startKey设计, client数据插入顺序有关。
一般来说,简单的数据插入程序应该是多线程实现。让每个线程负责一部分的row key范围,而row key范围又和region相关,所以可以在数据插入时,程序控制每个region的压力,不至于有些region闲着没事干。
那么,如何设计row key呢?举个比较实际的例子,如果有张HBase表来记录每天某城市的通话记录,常规思路下的row key是由电话号码 + yyyyMMddHHmmSS + ... 组成。按电话号码的规律来划分region。但是这样很容易导致数据插入不均匀(因为电话通话呈随机性)。但是,如果把电话号码倒序,数据在region层面的分布情况就大有改观。
3. 分布式的数据插入程序
HBase客户端在单节点上运行,即使使用多线程,也受限于单节点的硬件资源,写入速度不可能很快。典型的思路是将客户端部署在多个节点上运行,提高写的并发度。MapReduce是个很好的选择。使用MapReduce把写入程序分布到集群的各个节点上,并在每个mapper中运行多线程的插入程序。这样可以很好的提高写并发度。
注意,不要使用reducer。mapper到reducer需要走网络,受限于集群带宽。其次,实际的应用场景一般是用户从关系型数据库中导出了文本类型的数据,然后希望能把导出的数据写到HBase里。在这种情况下,需要小心谨慎地设计和实现file split逻辑。
4. HBase Client太慢?BulkLoad!
请拿出HBase的API读读,HFileOutputFomart里有个叫configureIncrementalLoad的方法。API是这么介绍的:
Configure a MapReduce Job to perform an incremental load into the given table. This
Inspects the table to configure a total order partitioner
Uploads the partitions file to the cluster and adds it to the DistributedCache
Sets the number of reduce tasks to match the current number of regions
Sets the output key/value class to match HFileOutputFormat's requirements
Sets the reducer up to perform the appropriate sorting (either KeyValueSortReducer or PutSortReducer)
The user should be sure to set the map output value class to either KeyValue or Put before running this function.
这是HBase提供的一种基于MapReduce的数据导入方案,完美地绕过了HBase Client(上一节的分布式插入方法也是用mapreduce实现的,不过本质上还是用hbase client来写数据)
网上有不少文章叙述了使用命令行方式运行BulkLoad,比如
但是,不得不说,实际生产环境上很难使用这种方式。毕竟源数据不可能直接用来写HBase。在数据迁移的过程中会涉及到数据清洗、整理归并等许多额外的工作。这显然不是命令行可以做到的事情。按照API的描述, 可行的方案是自定义一个Mapper在mapper中清洗数据,Mapper的输出value为HBase的Put类型,Reducer选用PutSortReducer。然后使用HFileOutputFormat#configureIncrementalLoad(Job, HTable);解决剩余工作。
不过,这种实现也存在局限性。毕竟Mapper到Reducer比较吃网络。
至此,本文介绍了三种HBase数据写入的方法(1种多线程,2种mapreduce),并介绍了性能调优的方法。希望能对大家有所帮助。本文提供的所有数据导入方法,作者均亲手实现并使用TB级数据测试。限于篇幅,在此只提供实现思路。
如果有大家有更好的方法,不妨留言讨论,共同进步。
原文链接: http://joshuasabrina.iteye.com/blog/1798239】
分享到:
评论

相关推荐

    HBase最佳实践-写性能优化策略

    上一篇文章主要介绍了HBase读性能优化的...这两类问题的切入点也不尽相同,如下图所示:优化原理:数据写入流程可以理解为一次顺序写WAL+一次写缓存,通常情况下写缓存延迟很低,因此提升写性能就只能从WAL入手。WAL

    HBase海量数据存储实战视频教程

    2、对目前职业有进一步提升要求,希望从事大数据行业高薪工作的在职人员。 3、对大数据行业感兴趣的相关人员。 课程内容 第一章 HBase入门 1. 简介 2. 集群搭建 3. HBase数据模型 4. 常用shell操作 5. shell管理...

    HBase高性能复杂条件查询引擎

    该方案由一个智能交通解决方案演变而来,设计之初仅寄希望于通过二级索引提升查询性能,由于在前期架构时充分考虑了通用性以及对复杂条件的支持,在后来的演变中逐渐被剥离出来形成了一个通用的查询引擎。...

    HBase最佳实践-列族设计优化

    HBase是一个庞大的体系,涉及到很多方面,很多因素都会影响到系统性能和系统资源使用率,根据场景对这些配置进行优化会很大程度上提升系统的性能。笔者总结至少有如下几个方面:HDFS相关配置优化,HBase服务器端优化...

    集成Lucene和HBase

    因此,大家对任何能够提升Lucene的可伸缩性和性能的实现都很感兴趣。Lucene简介Lucene中可搜索的实体都表现为文档(document),它由字段(field)和值(value)组成。每个字段值都由一个或多个可搜索的元素——即...

    编程狂人第九期(2014-1-20)

    回顾2013:HBase的提升与挑战 memcached(十七)协议命令格式 nginx大流量负载调优 12306的技术革命 利用ElasticSearch和Redis检索和存储信息 程序人生 潜入蓝翔技校二十天,探究蓝翔黑客真正的奥秘 [评论]全栈...

    R的极客理想:工具篇

    书中介绍了各种性能奇特的R语言包,提升R语言性能的方法,以及R语言在实际使用时与Java、MySQL、MongoDB、Hive、HBase、Hadoop等技术的综合运用的解决方案。

    4399大数据笔试题.pdf

    操作系统将数据从socket缓冲区中复制到⽹卡缓冲区,以便将数据经⽹络发出 ⽣产者客户端缓存消息批量发送,消费者批量从broker获取消息,减少⽹络io次数,充分利⽤磁盘顺序读写的性能。 通常情况下kafka的瓶颈不是...

    Hadoop在人员定位软件系统中的应用研究

    针对现有人员定位系统难以满足大型煤矿大数据量访问需求的问题,提出将Hadoop应用于人员定位软件系统中,利用并行计算模型MapReduce和非...Hadoop的应用显著提升了人员定位软件系统的数据处理性能、实时性和可扩展性。

    基于大数据平台数据分析技术选型调研.pdf

    利⽤MapReduce计算引擎,提升了算法可处理的数据量和处理性能。 缺点: 1. 由于实现算法需要MR化,所以实现的算法相对较少 2. 学习资料较少,官⽹提供的相关⽂档并没有很详细的关于每个算法的使⽤教程。 3. 不⽀持...

    2013年中国数据库大会PPT第一部分

    15.eXtremeDB内存数据库性能提升方案分享.pdf 16.运用之妙 存乎一心—— Oracle优化器案例与算法解析.pdf 17.DM7 MPP架构——同时满足OLAP与OLTP需求.pdf 18.SAP 让大数据飞翔.pdf 19.阿里数据库关键技术.pdf 20....

    Hadoop大数据处理_刘军

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

    R的极客理想:工具篇,完整扫描版

    【编辑推荐】, 资深R语言用户多年实战经验的结晶,介绍了各种性能奇特的R语言包,提升R语言性能的方法,以及R语言在实际使用时与Java、MySQL、MongoDB、Hive、HBase、Hadoop等技术的综合运用的解决方案。, 【名家...

    由浅入深掌握大数据列式存储NoSQL数据库Kudu视频教程

    从零开始讲解大数据列式存储NoSQL数据库Kudu,基于Kudu构建高性能随机读写访问的数据存储系统,原理从入门到深入,搞定面试 课程亮点 1,知识体系完备,从小白到大神各阶段读者均能学有所获。 2,生动形象,化繁为...

    2013中国数据库大会ppt(1)

    eXtremeDB内存数据库性能提升方案分享.pdf 运用之妙 存乎一心—— Oracle优化器案例与算法解析.pdf DM7 MPP架构——同时满足OLAP与OLTP需求.pdf SAP 让大数据飞翔.pdf 阿里数据库关键技术.pdf 基于Oracle的SQL优化...

    2013中国数据大会ppt(2)

    eXtremeDB内存数据库性能提升方案分享.pdf 运用之妙 存乎一心—— Oracle优化器案例与算法解析.pdf DM7 MPP架构——同时满足OLAP与OLTP需求.pdf SAP 让大数据飞翔.pdf 阿里数据库关键技术.pdf 基于Oracle的SQL优化...

    Hadoop实战(陆嘉恒)译

    编写MapReduce基础程序4.1 获得专利数据集4.1.1 专利引用数据4.1.2 专利描述数据4.2 构建MapReduce 程序的基础模板4.3 计数4.4 适应Hadoop API...Streaming4.6 使用combiner 提升性能4.7 温故知新4.8 小结4.9 更多资源第5 章...

Global site tag (gtag.js) - Google Analytics