- 浏览: 353614 次
- 性别:
- 来自: 杭州
最新评论
-
penkee:
为何我启动 zookKeeper bookie 10 不能创 ...
bookkeeper安装及测试体验 -
Golden-jin:
1楼也好时髦呀
bookkeeper简单分析 -
xGss2000:
要是减少到300个 region,block就0.04s了。话 ...
多region下的hbase写入问题 -
brandom520:
请问lz,我从hbase0.94版本上的数据导入到0.96.1 ...
在不同版本hdfs集群之间转移数据 -
huanghaifeng1990:
您好,我想请问一下,我执行了会发生OOM溢出的Deflater ...
perftools查看堆外内存并解决hbase内存溢出
文章列表
hbase中的缓存分了两层:memstore和blockcache。
其中memstore供写使用,写请求会先写入memstore,regionserver会给每个region提供一个memstore,当memstore满64MB以后,会启动flush刷新到磁盘。当memstore的总大小超过限制时(heapsize * hbase.regionserver.global.memstore.upperLimit * 0.9),会强行启动flush进程,从最大的memstore开始flush直到低于限制。
blockcache主要提供给读使用。读请求先 ...
http://www.qconbeijing.com/download/Nicolas.pdf
重点看了下facebook做了哪些改进以及他们的运维经验,比较重要的有以下几点:
改进:
1 加强了行级的ACID约束
2 改善了数据的分布规则,可以配置hdfs的replicas所在节点
3 改写了master的assign规则,利用zk来进行assign
4 不用停机地重启cluster
5 改进了compaction策略
6 批量查询的优化
7 对压缩进行了改进
运维经验:
1 事先切分好的region,控制region数目以及split的时机
另 ...
以下为使用hbase一段时间的三个思考,由于在内存充足的情况下hbase能提供比较满意的读性能,因此写性能是思考的重点。希望读者提出不同意见讨论
1 autoflush=false的影响
无论是官方还是很多blog都提倡为了提高hbase的 ...
hbase-0.90.0的一个重要改进是引入了replication机制,使它的数据完整性得到了进一步的保障。虽然这一功能还不太完善,但是今后必然会变得更加重要。
hbase的replication机制很像mysql statement-based replication。它是通过WALEdit和hlog来实现的。当请求发送给master cluster时,hlog日志放入hdfs的同时进入replication队列,由slave cluster通过zookeeper获取并写入slave的表中。目前的版本仅支持一个slave cluster
具体配置如下:
1 需要保证主从cluster ...
zookeeper运行时间长了以后,日志会成为一个比较大的问题。比如作者压力测试hbase一周以后,zookeeper日志文件达到了10G的规模。由于zookeeper日志文件不能随意删除,因为一个长时间不更新的节点完全有可能存在于几天前的一个日志文件中。那么如何安全地删除它们呢?可以自己编写程序处理,但是zookeeper也提供给了我们一个方便的小工具:PurgeTxnLog
用法:
java -Djava.ext.dirs=lib org.apache.zookeeper.server.PurgeTxnLog log_path snap_path -n 10
其中- ...
hbase只支持对gzip的压缩,对lzo压缩支持不好。在io成为系统瓶颈的情况下,一般开启lzo压缩会提高系统的吞吐量。但这需要参考具体的应用场景,即是否值得进行压缩、压缩率是否足够等等。
想要hbase支持lzo压缩,参照以下步骤: ...
bulk-load的作用是用mapreduce的方式将hdfs上的文件装载到hbase中,对于海量数据装载入hbase非常有用,参考http://hbase.apache.org/docs/r0.89.20100621/bulk-loads.html:
hbase提供了现成的程序将hdfs上的文件导入hbase,即bulk-load方式。它包括两个步骤(也可以一次完成):
1 将文件包装成hfile,hadoop jar /path/to/hbase.jar importtsv -Dimporttsv.columns=a,b,c <tablename> <inputdir&g ...
对于稳定维护hbase,全面掌握分布式系统中的每一台主机状况,以及检测系统可能或正在出现的瓶颈,强大的监控是必须的。
比如:
region数、block住的内存大小、请求数、命中率、flush/split/compact次数和时间、读写响应时间分布、storefile数目、jvm状况、
本文介绍将hbase监控加入ganglia中
hbase本身集成了jmx进行数据采集,这也是沿用hadoop的机制。
配置还是比较简单的,参考http://hbase.apache.org/metrics.html,要点:
拷贝hbase/conf/hadoop-metrics.propert ...
HMaster的RPC接口,分两类:
HMaster与RegionServer通讯接口,总共只有两个
-->regionServerStartup: 当regionserver启动时会调用该接口
-->将发请起求的RS的信息写入serverInfo,注意这里的hostname为master所识别的hostname,而非RS告诉master的
-->调用serverManager的regionServerStartup方法处理该请求
-->check该RS是否deadServer,如果是,拒绝start请求,抛出YouAreDeadExcept ...
master启动过程:
-->首先初始化HMaster
-->创建一个rpcServer,其中并启动
-->启动一个Listener线程,功能是监听client的请求,将请求放入nio请求队列,逻辑如下:
-->创建n个selector,和一个n个线程的readpool,n由"ipc.server.read.threadpool.size"决定,默认为10
-->读取每个请求的头和内容,将内容放入priorityQueue中
-->启动一个Responder线程,功能是将响应队列里的数据写给各个 ...
性能测试小结:
测试环境:
机器:1 client 5 regin server 1 master 3 zookeeper
配置:8 core超到16 /24G内存,region server分配了4G heap /单seta磁盘,raid10后500GB
系统:Red Hat Enterprise Linux Server release 5.4
版本:hadoop-0.20.2+737 / hbase-0.90.1 / Java HotSpot(TM) 64-Bit Server VM (build 17.0-b16, mixed mode)
htable假设:row key = 200 ...
ycsb是一个非常方便的针对分布式文件系统的测试工具:https://github.com/brianfrankcooper/YCSB
特点:
1 可以任意设置读写比例、线程数量,打印结果比较详细
2 它是hbase等nosql官方jira上面的测试标准,与人交流时ycsb的测试数据最能说明问题
缺点:
1 每次测试时数据需要重新写入,否则读取时选取不了正确的key值,导致内存命中率低
2 key值分布不均匀,节点多数据少时,会导致倾斜
3 线程多时有bug
这里讲一下针对hbase的使用体验:
1 git clone下来源文件后,需要先编译。ant及ant相应的数据库,如ant dbcom ...
hbase在一个regionServer死掉后,即使重启了这个server,deadlist中也不会去掉原先死去的deadserver。
例如:
hbase shell
>status
5 servers, 0 dead, 6.2000 average load
停掉其中一个节点
hbase-daemon.sh stop regionserver
然后
hbase shell
>status
4 servers, 1 dead, 6.2000 average load
再立即重启该节点:
hbase-daemon.sh start regionserver
此时回到shell ...
因为hbase的日志很分散,出问题时需要查看每个进程对应的日志,包括master/region/zookeeper
出了三次问题:
1 hbase.cluster.distributed=false,即单机版时,启动日志中报:
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/master
原因:hbase的lib中调用的hadoop版本与hdfs所使用的hadoop版本不一致。
解决:将hadoop的core.jar拷到hbase的 ...
安装好apr后,使用apr_get_table总是报错:
syntax error before "apr_off_t"
32位机器上可能会有这个问题,修改apr.h:
将typedef off64_t apr_off_t;
更改为
typedef long long apr_off_t;
然后:
重装安装apr/apr-util/httpd,即可解决问题