hbase性能优化

标签: hbase 性能优化 | 发表时间:2015-05-26 00:16 | 作者:crxy2014
出处:http://blog.csdn.net
1)配置
  当你调用create方法时将会加载两个配置文件:hbase-default.xml and hbase-site.xml,利用的是当前的java类路径, 代码中configuration设置的这些配置将会覆盖hbase-default.xml和hbase-site.xml中相同的配置,如果两个配置文件都存在并且都设置好了相应参上面的属性下面的属性即可
2)关于建表
   
public void createTable(HTableDescriptor desc)
HTableDescriptor 代表的是表的schema, 提供的方法中比较有用的有
setMaxFileSize,指定最大的regionsize
setMemStoreFlushSize 指定memstoreflush到HDFS上的文件大小
增加family通过 addFamily方法
  
public void addFamily(final HColumnDescriptor family)
HColumnDescriptor 代表的是column的schema,提供的方法比较常用的有
setTimeToLive:指定最大的TTL,单位是ms,过期数据会被自动删除。
setInMemory:指定是否放在内存中,对小表有用,可用于提高效率。默认关闭
setBloomFilter:指定是否使用BloomFilter,可提高随机查询效率。默认关闭
setCompressionType:设定数据压缩类型。默认无压缩。
setMaxVersions:指定数据最大保存的版本个数。默认为3。
注意的是,一般我们不去setInMemory为true,默认是关闭的
3)关于入库
   官方建议
table.setAutoFlush(false);//数据入库之前先设置此项为false
table.setflushCommits();//入库完成后,手动刷入数据
注意:
  在入库过程中,put.setWriteToWAL(true/flase);
  关于这一项如果不希望大量数据在存储过程中丢失,建议设置为true,如果仅是在测试演练阶段,为了节省入库时间建议设置为false
4)关于获取表实例
HTablePool pool = new HTablePool(configuration, Integer.MAX_VALUE);
HTable table = (HTable) pool.getTable(tableName);
建议用表连接池的方式获取表,具体池有什么作用,我想用过数据库连接池的同学都知道,我就不再重复
不建议使用new HTable(configuration,tableName);的方式获取表
5)关于查询
建议每个查询语句都放入try catch语句块,并且finally中要进行关闭ResultScanner实例以及将不使用的表重新放入到HTablePool中的操作,具体做法如下
Java代码

  • public static void QueryAll(String tableName) {       
  •         HTablePool pool = new HTablePool(configuration, Integer.MAX_VALUE);       
  •         HTable table = null;       
  •         ResultScanner rs = null;       
  •         try {       
  •             Scan scan = new Scan();       
  •             table = (HTable) pool.getTable(tableName);       
  •             rs = table.getScanner(scan);       
  •             for (Result r : rs) {       
  •                 System.out.println("获得到rowkey:" + new String(r.getRow()));       
  •                 for (KeyValue keyValue : r.raw()) {       
  •                     System.out.println("列:" + new String(keyValue.getFamily())       
  •                             + "====值:" + new String(keyValue.getValue()));       
  •                 }       
  •             }       
  •         } catch (IOException e) {       
  •             e.printStackTrace();       
  •         }finally{       
  •             rs.close();// 最后还得关闭   
  •             pool.putTable(table); //实际应用过程中,pool获取实例的方式应该抽取为单例模式的,不应在每个方法都重新获取一次(单例明白?就是抽取到专门获取pool的逻辑类中,具体逻辑为如果pool存在着直接使用,如果不存在则new)   
  •         }       
  •     }  
public static voidQueryAll(String tableName) {
    HTablePool pool = new HTablePool(configuration,Integer.MAX_VALUE);
    HTable table = null;
    ResultScanner rs = null;
    try {
      Scan scan = new Scan();
      table = (HTable) pool.getTable(tableName);
      rs = table.getScanner(scan);
      for (Result r : rs) {
        System.out.println("获得到rowkey:" + new String(r.getRow()));
        for (KeyValue keyValue : r.raw()) {
          System.out.println("列:" + newString(keyValue.getFamily())
              + "====值:" + new String(keyValue.getValue()));
        }
      }
    } catch (IOException e) {
      e.printStackTrace();
    }finally{
      rs.close();// 最后还得关闭
      pool.putTable(table); //实际应用过程中,pool获取实例的方式应该抽取为单例模式的,不应在每个方法都重新获取一次(单例明白?就是抽取到专门获取pool的逻辑类中,具体逻辑为如果pool存在着直接使用,如果不存在则new)
    }
  }
更多精彩内容请关注:http://bbs.superwu.cn 
关注超人学院微信二维码:

作者:crxy2014 发表于2015/5/25 16:16:30 原文链接
阅读:0 评论:0 查看评论

相关 [hbase 性能优化] 推荐:

Hbase 性能优化

- - CSDN博客云计算推荐文章
因 官方Book Performance Tuning部分章节没有按配置项进行索引,不能达到快速查阅的效果. 所以我以配置项驱动,重新整理了原文,并补充一些自己的理解,如有错误,欢迎指正. 默认值:3分钟(180000ms). 说明:RegionServer与Zookeeper间的连接超时时间.

hbase性能优化

- - CSDN博客推荐文章
  当你调用create方法时将会加载两个配置文件:hbase-default.xml and hbase-site.xml,利用的是当前的java类路径, 代码中configuration设置的这些配置将会覆盖hbase-default.xml和hbase-site.xml中相同的配置,如果两个配置文件都存在并且都设置好了相应参上面的属性下面的属性即可.

HBase性能优化

- - zzm
本文主要介绍软件层面的性能调优. 硬盘推荐SSD,一般SATA即可. 可以安装Ganglia等工具,检查各节点的各硬件的运作状态:CPU,Memo,网络等等. 入门级的调优可以从调整参数开始.  设置buffer的容量,例子中设置了6MB的buffer容量. * 必须禁止auto flush. * 6MB是经验值,可以上下微调以适应不同的写场景.

Hbase性能优化之配置

- - 博客园_首页
减少zk超时时间(建议1分钟). Rs与zk的timeout默认为3分钟,由zookeeper.session.timeout property决定. 也就是说,如果一个rs挂了,那么master需要3分钟之后才能对其进行重启和恢复. 然而,你调低之前应该先确保JVM的配置合理,保证不会引发较长的gc,JVM配置之后会给出,也可以只这样,只要你超时时间可以忍受gc停顿即可.

HBase性能优化方法总结

- - IT技术博客大学习
标签:   HBase.     本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法. 有关HBase系统配置级别的优化,这里涉及的不多,这部分可以参考: 淘宝Ken Wu同学的博客.     默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进行切分.

Hbase性能优化 - 季石磊

- - 博客园_stanley's blog
以下为使用hbase一段时间的几个思考,由于在内存充足的情况下hbase能提供比较满意的读性能,因此写性能是思考的重点.     无论是官方还是很多blog都提倡为了提高hbase的写入速度而在应用代码中设置autoflush=false,然后在在线应用中应该谨慎进行该设置.     a autoflush=false的原理是当客户端提交delete或put请求时,将该请求在客户端缓存,直到数据超过2M(hbase.client.write.buffer决定)或用户执行了hbase.flushcommits()时才向regionserver提交请求.

HBase最佳实践-写性能优化策略 – 有态度的HBase/Spark/BigData

- -
上一篇文章主要介绍了HBase读性能优化的基本套路,本篇文章来说道说道如何诊断HBase写数据的异常问题以及优化写性能. 和读相比,HBase写数据流程倒是显得很简单:数据先顺序写入HLog,再写入对应的缓存Memstore,当Memstore中数据大小达到一定阈值(128M)之后,系统会异步将Memstore中数据flush到HDFS形成小文件.

HBase最佳实践-读性能优化策略 – 有态度的HBase/Spark/BigData

- -
任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题. HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少. 总结起来,大家遇到的主要问题无非是Full GC异常导致宕机问题、RIT问题、写吞吐量太低以及读延迟较大.

Pora2应用中HBase高并发读写性能优化

- - 搜索技术博客-淘宝
淘宝搜索的个性化离线实时分析系统Pora已升级至Pora2,Pora2是在基于Yarn的流式计算框架IStream基础上开发的,同时为保证数据和消息的实时处理系统中较多地使用了HBase,是一个典型的高并发读写HBase的分布式应用. 系统在发布之初遇到了比较严重的性能问题,表现为处理速度跟不上实时日志,并且整个Hadoop/HBase集群压力大,连带其它应用受影响.