注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

影响HBase运维的几个因素:开启lzo压缩  

2013-01-09 18:17:20|  分类: 数据库 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
影响HBase运维的几个因素

一.WriteBufferSize

static final Configuration conf = HBaseConfiguration.create();
static final String table_log_name = “user_log”;
wTableLog = new HTable[tableN];
for (int i = 0; i < tableN; i++) {
    wTableLog[i] = new HTable(conf, table_log_name);
    wTableLog[i].setWriteBufferSize(5 * 1024 * 1024); //5MB
    wTableLog[i].setAutoFlush(false);
}

二.lzo压缩

在hbase中开启lzo压缩

三.备份恢复

导出到本地或者hdfs
导入回hbase
导入tsv文件
mozilla开发的backup工具

四.region server的region数目

五.bloomfilter打开

默认情况下创建的table是不打开bloomfilter的(可通过describe table来确认,如看到BLOOMFILTER => ‘NONE’则表示未打开),对于随机读而言这个影响还是比较明显的,由于bloomfilter无法在之后动态打开,因此创建表时最好就处理好,方法类似如此:create ‘t1′, { NAME => ‘f1′, BLOOMFILTER => ‘ROWCOL’ }。 

六.Compact,Split的控制

在HBase中,数据在更新时首先写入WAL 日志(HLog)和内存(MemStore)中,MemStore中的数据是排序的,当MemStore累计到一定阈值时,就会创建一个新的MemStore,并且将老的MemStore添加到flush队列,由单独的线程flush到磁盘上,成为一个StoreFile。于此同时, 系统会在zookeeper中记录一个redo point,表示这个时刻之前的变更已经持久化了(minor compact)

StoreFile是只读的,一旦创建后就不可以再修改。因此Hbase的更新其实是不断追加的操作。当一个Store中的StoreFile达到一定的阈值后,就会进行一次合并(major compact),将对同一个key的修改合并到一起,形成一个大的StoreFile,当StoreFile的大小达到一定阈值后,又会对 StoreFile进行分割(split),等分为两个StoreFile。

由于对表的更新是不断追加的,处理读请求时,需要访问Store中全部的StoreFile和MemStore,将它们按照row key进行合并,由于StoreFile和MemStore都是经过排序的,并且StoreFile带有内存中索引,通常合并过程还是比较快的。

实际应用中,可以考虑必要时手动进行major compact,将同一个row key的修改进行合并形成一个大的StoreFile。同时,可以将StoreFile设置大些,减少split的发生。



hbase只支持对gzip的压缩,对lzo压缩支持不好。在io成为系统瓶颈的情况下,一般开启lzo压缩会提高系统的吞吐量。但这需要参考具体的应用场景,即是否值得进行压缩、压缩率是否足够等等。 


想要hbase支持lzo压缩,参照以下步骤: 
1 首先要让系统支持lzo动态库,安装lzo-2.00以上版本:http://www.oberhumer.com/opensource/lzo/download/ 
2 默认安装完后应该在系统的/usr/local/lib/找到liblzo*等几个so 
3 到http://code.google.com/p/hadoop-gpl-compression/下载lzo相关的native库 
4 拷贝3中下载的 hadoop-gpl-compression-0.1.0-dev.jar 或 hadoop-gpl-compression-0.1.0.jar 到 hbase/lib以及hadoop/lib 中 
5 拷贝3中下载的 lib/native/* 到 hadoop/lib/native 及 hbase/lib/native 
6 确保以上4/5中的文件同步到了每台regionserver上 
7 在core-site.xml中加上: 
Xml代码 
  1. <property>  
  2. <name>io.compression.codecs</name>  
  3. <value>com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec</value>  
  4. </property>  
  5. <property>  
  6. <name>io.compression.codec.lzo.class</name>  
  7. <value>com.hadoop.compression.lzo.LzoCodec</value>  
  8. </property>  

8 重启dfs及hbase,建表时使用: 
Java代码 
  1. create 'mytable', {NAME=>'colfam:', COMPRESSION=>'lzo'}  

此时这个column即为lzo了,往它读写数据会自动进行lzo压缩和解压缩。 

P.S: 
1 如果不清楚你的hbase是否配置好了支持lzo,可以执行以下命令检查之,如果不支持的话这个命令会提示你还缺什么文件: 
Java代码
  1. hbase org.apache.hadoop.hbase.util.CompressionTest hdfs://namenode:9000/test_path lzo  

2 如果你和我一样使用了CDH3版本的hdfs,那么该版本的hdfs与hadoop-gpl-compression会有冲突,原因是CDH3修改了compression.java,增加了reinit()接口。 
此时需要重新编译hadoop-gpl-compression工程,修改 src/java/com/hadoop/compression/lzo/LzoCompressor.java,增加以下行: 
Java代码 
  1. public void reinit(Configuration conf) {  
  2.   // do nothing  
  3. }  

  然后重新编译工程,将生成的jar包替换以上第4步中的那个jar包
  评论这张
 
阅读(1129)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016