本文章只针对“微型集群处理大数据”的场景。

场景描述:

硬件:5个节点,每个节点可用硬盘1块(700G、500G等)、8核cpu,实验室环境(有时候还要跑其他程序跟你抢占资源),16G内存。

软件:hadoop-0.20.2-cdh3u2,hbase-0.90.4-cdh3u2。

业务:sina微博12亿转发微博,700w用户信息。bzip压缩后共150G。要求就是将这些数据入库并且恢复关注和粉丝列表,建立userId与昵称映射,找出Message的转发关系等等。

上述业务实际上比描述的复杂,后续需要做各种分析,再次略去,只说明一下跟入库效率相关的影响因素:

1.批量导入数据,需要入库一定要均衡

2.恢复关注和粉丝列表,需要在入库时遍历其中的一个来恢复另一个(因为只给出了关注列表),也就是说入库一条用户信息可能会随之入库千百条信息。

分析:

1.入库均衡。首先要使rowkey均衡,原始数据只能顺序读取,若id连续则会产生hot region的问题,所以方案就是:rowkey=md5(id)+id。我并没有做简单的md5,而是用了另一种方式,详细可见文章:http://www.cnblogs.com/colorfulkoala/archive/2013/05/14/3077390.html

2.避免region split。入库是持续进行的,region入库过程region过大则会导致region的分裂,另外,集群的数量一定,预切分region可以保证初始rigion个数,这样我们就可以了解每个节点支持并发的能力了。所以我的做法是:设置region的hbase.hregion.max.filesize 为100g,基本可以保证region不再分裂,保证平均每个节点有1000region。

3.本地入库客户端。为了节约磁盘,客户端选择了直接读取压缩文件,读取原始数据完全不会成为入库的瓶颈。应该采用多点入库,然是事实上,带宽并不是瓶颈,所以从一个zk入库完全够用了。对于客户端采取多线程入库,建议最好打印读取记录的位置(可以每隔1000个打印一次),这样使入库程序支持断点。

4.hbase配置

开启lzo压缩

为确保并发支持hbase.regionserver.handler.count设置为100.

zookeeper.session.timeout 180000000

hbase.rpc.timeout 180000000  为了建表时不超时。

hfile.block.cache.size 0.1 可以设置小一些,因为入库主要是写操作。

hbase.regionserver.global.memstore.upperLimit 0.5

hbase.regionserver.global.memstore.lowerLimit 0.45 这两个参数要尽量大(upperLimit+block.cache<=0.6),因为写效率提升需要很大的内存,如果设置的过小,会造成内存中的memstore过快的flush到硬盘,从而短时间内产生很多的storefiles,超过阈值后会触发compaction,compaction的瓶颈在硬盘,如果硬盘不给力,compaction时间过长就是造成dn和rs的连接一直占用。一方面storfiles会逐渐增高(因为compact没完又flush进来很多的storefiles),一方面连接数越来越多,导致too many openfiles错误的发生。

hbase.zookeeper.property.maxClientCnxns 500 同一个ip与zk连接数限制

hbase.hregion.memstore.flush.size 默认是64m,可以翻倍,也可以不变,如果内存小基本上用不到这个配置,如果入库过快,没等到攒到64m就开始强制flush,最终你会看到flush进去的全是5m、6m等等。这对不给力的硬盘上的compaction是致命的。

5.关闭autoflush, 设置buffersize(10*1024*1024)。

运行状况

消息入库设置了50个线程,每次1000条(可能要比1000多,因为需要恢复转发关系)

用户信息50个线程,每次100条。(可能一条会连续入库上千条,因为user可能关注了很多人)

运行时发现,内存和硬盘的瓶颈非常大,内存小导致强制flush,产生storefiles的速度很快。从而导致需要更多的compaction操作。dn rs 连接数以及storefiles的数量持续增加。后来每写500w条就休息一个小时,可以保证入库程序的良好运行。

需要指出的是,150G(user3G,message120g)的压缩数据入库之后居然快接近1T,2备份。说明数据结构占用了不少空间。

HBase入库调优的更多相关文章

  1. hbase性能调优_表设计案例

    hbase性能调优案例 1.人员-角色   人员有多个角色  角色优先级   角色有多个人员   人员 删除添加角色   角色 可以添加删除人员   人员 角色 删除添加   设计思路 person表 ...

  2. OpenTSDB/HBase的调优过程整理

    背景 过年前,寂寞哥给我三台机器,说搞个新的openTSDB集群.机器硬件是8核16G内存.3个146G磁盘做数据盘. 我说这太抠了,寂寞哥说之前的TSDB集群运行了两年,4台同样配置的机器,目前hd ...

  3. hbase性能调优(1)

    hbase性能调优 标签: hbase 性能调优 | 发表时间:2014-05-17 15:10 | 作者:无尘道长 分享到: 出处:http://www.iteye.com 一.服务端调优 1.参数 ...

  4. hbase性能调优案例

    hbase性能调优案例 1.人员-角色   人员有多个角色  角色优先级   角色有多个人员   人员 删除添加角色   角色 可以添加删除人员   人员 角色 删除添加   设计思路 person表 ...

  5. HDP之HBase性能调优

    (官方文档翻译及整理) 一.系统级调优 1.保证充足的RAM 2.64位的操作系统 3.Linux的swappiness设置为0 : sysctl vm.swappiness=10 vim /etc/ ...

  6. hbase参数调优

    @ 目录 HBase参数调优 hbase.regionserver.handler.count hbase.hregion.max.filesize hbase.hregion.majorcompac ...

  7. HBase性能调优

    因官方Book Performance Tuning部分章节没有按配置项进行索引,不能达到快速查阅的效果.所以我以配置项驱动,重新整理了原文,并补充一些自己的理解,如有错误,欢迎指正. 配置优化 zo ...

  8. hbase性能调优之压缩测试

    文章概述: 1.顺序写 2.顺序读 3.随机写 4.随机读 5.SCAN数据 0 性能测试工具 hbase org.apache.hadoop.hbase.PerformanceEvaluation ...

  9. HBase性能调优(转)

    原文链接:http://www.blogjava.net/ivanwan/archive/2011/06/15/352350.html 因官方Book Performance Tuning部分章节没有 ...

随机推荐

  1. Effective Java 25 Prefer lists to arrays

    Difference Arrays Lists 1 Covariant Invariant 2 Reified at runtime Erased at run time 3 Runtime type ...

  2. SQL Server 2008 R2——VC++ ADO 操作 事务

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  3. Java学习总结:飘逸的字符串

    Java学习:飘逸的字符串 前言 相信不管我们运用Java语言来开发项目还是进行数据分析处理,都要运用到和字符串相关的处理方法.这个社会处处有着和字符串相关的影子:日志.文档.书籍等.既然我们离不开字 ...

  4. internet connection sharing has been disabled by the network administrator

    Start > Run > gpedit.msc Locate; Computer Configuration/Administrative Templates/Network/Netwo ...

  5. python 小程序练习

    还有一些小bug 基本有 输入用户名密码 认证成功后显示欢迎信息 输出三次后锁定 # -*- coding:utf-8 -*- account_file=('C:\Users\guigu\Deskto ...

  6. 通过beego快速创建一个Restful风格API项目及API文档自动化

    通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...

  7. 字符设备驱动——memory编译问题及解决办法

    1.fatal error:asm/system.h:No such file or directory #include <linux/version.h> #if LINUX_VERS ...

  8. puppet学习笔记(二)

    在puppet安装完成之后我们就可以动手开始第一个puppet实验了,此实验就以批量推送文件为例吧. 1.获取module路径 这里的module就是指一个模块,可以把puppet想象成一个个项目的部 ...

  9. zookeeper适用场景:分布式锁实现

    问题导读:1.zookeeper如何实现分布式锁?2.什么是羊群效应?3.zookeeper如何释放锁? 在zookeeper应用场景有关于分布式集群配置文件同步问题的描述,设想一下如果有100台机器 ...

  10. Web安全--XSS模版

    [XSS基本探测pyload]   <script>alert("xss")</script> <script>alert(/xss/)< ...