hbase 程序优化 参数调整方法
hbase读数据用scan,读数据加速的配置参数为:
Scan scan = new Scan();
scan.setCaching(500); // 1 is the default in Scan, which will be bad for MapReduce jobs
scan.setCacheBlocks(false); // don't set to true for MR jobs
其中,
public Scan setCacheBlocks(boolean cacheBlocks)//Set whether blocks should be cached for this Scan
默认值为true, 分内存,缓存和磁盘,三种方式,一般数据的读取为内存->缓存->磁盘;setCacheBlocks不适合MapReduce工作:
MR程序为非热点数据,不需要缓存,因为Blockcache is LRU,也就是最近最少访问算法(扔掉最少访问的),那么,前一个请求(比如map读取)读入Blockcache的
所有记录在后一个请求(新的map读取)中都没有用,就必须全部被swap,那么RegionServer要不断的进行无意义的swapping data,也就是无意义的输入和输出BlockCache,增加了无必要的IO。而普通读取时局部查找,或者查找最热数据时,会有提升性能的帮助。
public Scan setCaching(int caching)
//增加缓存读取条数(一次RPC调用返回多行记录),加快scaners读取速度,但耗费内存增加,设太大会响应慢、超时、或者OOM,
找到RPC操作的数据和内存占用情况的一个折中,默认使用Configuration setting HConstants.HBASE_CLIENT_SCANNER_CACHING,值为1
public void setBatch(int batch) //设置获取记录的列个数,默认无限制,也就是返回所有的列。实际上就是控制一次next()传输多少个columns,如setBatch(5)则每个Result实例返回5个columns,(http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Scan.html)
setBatch使用场景为,用客户端的scanner缓存进行批量交互从而提高性能时,非常大的行可能无法放入客户端的内存,这时需要用HBase客户端API中进行batching处理。
通过调整setCaching和setBatch这两个参数,可以观察对RPC交互数量的影响,也就是时间性能的影响:
一个简单的例子,一个表含两个column family,每个column family下10个column,10行数据,比较效果的组合
Caching: 1, Batch: 1, Results: 200, RPCs: 201
Caching: 200, Batch: 1, Results: 200, RPCs: 2
Caching: 5, Batch:100, Results: 10, RPCs: 3
Caching: 5, Batch:20, Results: 10, RPCs: 3
Caching: 10, Batch:10, Results: 20, RPCs: 3
计算RPC的次数:将行数result与column数相乘,再除以batch和column数中的较小值,最后除以caching大小。
===================================================
其他的参数优化配置:
参考http://joshuasabrina.iteye.com/blog/1798239
1. Write Buffer Size
HTable htable = new HTable(config, tablename);
htable.setWriteBufferSize(10 * 1024 * 1024);
htable.setAutoFlush(false);
2.map中间结果压缩
参考(
http://blog.csdn.net/yangbutao/article/details/8474731
http://m.blog.csdn.net/blog/u012875880/21874293
http://developer.51cto.com/art/201204/331337.htm
)
老版本中用
conf.setCompressMapOutput(true);
conf.setMapOutputCompressorClass(GzipCodec.class);
新的设置方法为
conf.setBoolean("mapred.compress.map.output", true);
//conf.setClass("mapred.map.output.compression.codec",GzipCodec.class, CompressionCodec.class);
默认使用GzipCodec,可以指定GzipCodec.class,SnappyCodec.class,LzopCodec.class,
其中lzo、snappy需要操作系统安装native库才可以支持。
数据格式为TextFile,Sequence,以及其他用户自定义的文件格式的文件都可以压缩,不同的场合用不同的压缩算法,bzip2和GZIP是比较消耗CPU的,压缩比最高。但GZIP不能被分块并行处理;
Snappy和LZO差不多,稍微胜出一点,cpu消耗的比GZIP少。
comparison between compression algorithms
Algorithm % remaining Encoding Decoding
GZIP 13.4% 21 MB/s 118 MB/s
LZO 20.5% 135 MB/s 410 MB/s
Snappy 22.2% 172 MB/s 409 MB/s
运行时报错处理
1,客户端收到报错
ScannerTimeoutException:org.apache.hadoop.hbase.client.ScannerTimeoutException
这是当从服务器传输数据到客户端的时间,或者客户端处理数据的时间大于了scanner设置的超时时间,scanner超时报错,可在客户端代码中设置超时时间
Configuration conf = HBaseConfiguration.create()
conf.setLong(HConstants.HBASE_REGIONSERVER_LEASE_PERIOD_KEY,120000)
但由于scan超时时间是配在Region Server上的,所以此配置无用。修改该值必须在Region Server上修改hbase-site.xml,重启集群。
2,报错org.apache.hadoop.hbase.regionserver.LeaseException: org.apache.hadoop.hbase.regionserver.LeaseException: lease ” does not exist
首先介绍,租约(Lease)过期或租约不存在,指的是hbase client端每次和regionserver交互时,服务器端会生成一个租约(Lease),其有效期时间由参数hbase.regionserver.lease.period确定。
原理如下:
客户端在regionserver取数据时,如果hbase中存的数据过大且很多region时,客户端请求的region不在内存中,或是没有被cache住,需要从磁盘中加载。而当加载时间超过了hbase.regionserver.lease.period的设置时间,且客户端没有和regionserver报告其还活着,那么regionserver就会认为本次租约已经过期,并从LeaseQueue中删掉本次租约,当regionserver加载完成后,拿已经被删除的租约再去取数据的时候,就会出现如上的错误现象。
解决办法一般是增加租约时间,设置hbase.regionserver.lease.period参数(默认为60000,一分钟)
conf.setLong(HConstants.HBASE_REGIONSERVER_LEASE_PERIOD_KEY,120000)。
如果还报错,则可能是hbase.rpc.timeout的问题,增大hbase.regionserver.lease.period的时候应该同时增大hbase.rpc.timeout,同时hbase.rpc.timeout应该等于或大于hbase.regionserver.lease.period
conf.setLong("hbase.rpc.timeout", 1200000);
hbase 程序优化 参数调整方法的更多相关文章
- Odoo环境下Ubuntu服务器性能优化--参数调整
公司在使用Odoo进行内部信息化管理,随着业务增长,服务器性能问题变成了瓶颈,为了解决这些问题,最近的工作重点将移到性能调整上来,同时也会在此记录整个处理过程,以便日后回顾. 1.根据相关资料建议,在 ...
- 我的四轴专用PID参数整定方法及原理---超长文慎入(转)
给四轴调了好久的PID,总算是调好了,现分享PID参数整定的心得给大家,还请大家喷的时候手下留情. 首先说明一下,这篇文章的主旨并不是直接教你怎么调,而是告诉你这么调有什么道理,还要告诉大家为什么'只 ...
- HBase性能优化方法总结(转)
本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法.有关HBase系统配置级别的优化,这里涉及的不多,这部分可以参考:淘宝Ken Wu同学的博客. 1. 表的设计 1.1 Pr ...
- HBase性能优化方法总结(转)
原文链接:HBase性能优化方法总结(一):表的设计 本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法.有关HBase系统配置级别的优化,可参考:淘宝Ken Wu同学的博客. ...
- HBase性能优化方法总结(三):读表操作
本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法.有关HBase系统配置级别的优化,可参考:淘宝Ken Wu同学的博客. 下面是本文总结的第三部分内容:读表操作相关的优化方法 ...
- [转帖]PostgreSQL 参数调整(性能优化)
PostgreSQL 参数调整(性能优化) https://www.cnblogs.com/VicLiu/p/11854730.html 知道一个 shared_pool 文章写的挺好的 还没仔细看 ...
- HBase性能优化方法总结(三):读表操作(转)
转自:http://www.cnblogs.com/panfeng412/archive/2012/03/08/hbase-performance-tuning-section3.html 本文主要是 ...
- HBase性能优化方法总结(二):写表操作
转自:http://www.cnblogs.com/panfeng412/archive/2012/03/08/hbase-performance-tuning-section2.html 本文主要是 ...
- HBase性能优化方法总结
1. 表的设计 1.1 Pre-Creating Regions 默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数 ...
随机推荐
- 51 nod 1023 石子归并 V3(GarsiaWachs算法)
1023 石子归并 V3基准时间限制:2 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一 ...
- hdu 5463(水水)
Sample Input 2 3 2 33 3 33 2 33 10 5 467 6 378 7 309 8 499 5 320 3 480 2 444 8 391 5 333 100 499 S ...
- oracle 分页查询数据重复问题
最近在做项目的时候发现一个问题,oracle 在查询分页数据的时候,有几条数据重复查询了,并且有几条数据在分页的时候消失了.百度了一下发现,ORACLE 在查询数据的时候返回的行不是固定的,他只是按照 ...
- 使用PL/SQL Developer连接远程DB(本机不安装Oracle客户端)
本文内容亲测可行环境: 服务端:centos6.7 ,oracle 11g r2 ,动态注册,监听端口号:1521 用户端:win7 ,没有安装ORACLE及其客户端 准备文件:plsql ...
- windows server 2008 R2 禁用ipv6和隧道适配器
在windows server 2008 R2操作系统下部署weblogic web application,部署完成后进行测试,发现测试页的地址使用的是隧道适配器的地址,而不是静态的ip地址,而且所 ...
- Cisco 的基本配置实例之四----vlan的规划及配置(核心交换机)
4.vlan的规划及配置 在本节中我们讲解vlan的规划及具体的配置命令.在此例中我们用的是vtp(VLAN Trunking Protocol)server的模式,在这种模式中我们需要配置核心交换机 ...
- RTX 无法刷新组织架构的处理方法总结
文章一: 刷新组织架构问题1."客户端不能获取正确的组织架构"或"新增加的人员刷新不了组织架构"首先要判断是RTX服务器引起的异常还是一些客户端出现的异常,判断 ...
- js去掉最后一个字符
console.log(("0,1,2,3,4,5,".slice(0,-1)))
- String String Buffer String Builder
如题,在java中这是一个典型的问题. 在stackoverflow上已经有很多相似的问题被提问,并且有很多不正确或不完整的答案.如果你不往深处想,这是一个很简单的问题.但如果深入思考,它却很让人迷惑 ...
- HTMLParser使用简介
HTMLParser具有小巧,快速的优点,缺点是相关文档比较少(英文的也少),很多功能需要自己摸索.对于初学者还是要费一些功夫的,而一旦上手以后,会发现HTMLParser的结构设计很巧妙,非常实用, ...