读书笔记-HBase in Action-第四部分-(2)运维
2014-09-23 16:02
375 查看
监控
通过收集metrics并图形化展示是监控HBase集群的有效手段,能帮助用户了解集群状态,排查问题。HBase通过Hadoop metrics框架输出metrics,最常用的MetricsContext实现包括Ganglia和文件;HBase还能通过JMX输出metrics。通过hadoop-metircs.properties配置项,可以输出metrics到Ganglia:
hbase.class=org.apache.hadoop.metrics.ganglia.GangliaContext31hbase.period=10
hbase.servers=GMETADHOST_IP:PORTjvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext31 jvm.period=10
jvm.servers=GMETADHOST_IP:PORTrpc.class=org.apache.hadoop.metrics.ganglia.GangliaContext31 rpc.period=10
rpc.servers=GMETADHOST_IP:PORT
通过JMX也可以手机Master和RegionServer输出的metircs:
Master: http://master_ip_address:port/jmx
RegionServer: http://region_server_ip_address:port/jmx
如上图,HBase输出的metrics分为三种:
通用指标,比如系统负载、PRC访问、存货Region和JVM相关指标等。还包括底层支撑系统指标,比如HDFS吞吐量&延迟、各个节点的网络吞吐量&延迟,举个例子,较高的CPU I/O wait值可能代表磁盘IO存在瓶颈。
和写入相关的指标,包括MemStore,flushes,compactions,GC和HDFS写入等。比如理想的MemStore监控图形是锯齿型的,代表平滑的写入过程和正常的GC过程。
和读有关的指标,主要关注BlockCache相关指标,包括缓存大小、命中率、清理等。
性能测试
数据库的性能一般用响应时间来衡量。最理想的测试方法是模拟真实的工作负载来测试HBase的响应时间。在这之前,往往需要通过某种基准性能测试来建立信心。HBase自带了了性能评估工具,能够很方便地测试HBase的随机读写、顺序读写和扫描等性能。
$ $HBASE_HOME/bin/hbaseorg.apache.hadoop.hbase.PerformanceEvaluation
Yahoo!提供了YCSB性能基准测试工具,用来比较不同数据库的性能。
性能优化
HBase的性能会受到整个依赖栈的影响,性能优化涉及到所有的依赖层,涵盖硬件选择、网络配置、操作系统设置、JVM设置和Hadoop HDFS优化等。之前的部署章节,提到过一些相应的优化手段。本节关注HBase本身的配置参数调优。针对不同的应用场景,HBase的工作负载类型不同,需要不同的优化配置组合,以下是一些基本原则:
随机读密集型:优化方向在于有效利用缓存和索引,配置参数包括block块缓存、memstore大小、HFile数据块大小(比如64k,数据块越小,索引粒度越细)、启用Bloom filter和Aggressive caching等。
顺序读密集型:顺序读一般是大规模扫描,所以缓存不能提升性能。配置参数包括HFile数据块大小(减少硬盘寻道次数)、Scanner-caching(每次扫描返回更多的数据,减少RPC调用次数,可以通过Scan.setCaching(int)控制到每次扫描)和关闭BlockCache等。
写密集型:提高写性能的秘诀在于减少MemStore flush、数据合并和分割次数。配置参数包括MemStore大小、RegionFile大小、分配给MemStore的堆大小、MemStore-Local 缓存和GC参数等。
混合型:根据应用情况反复调整参数达到性能最优:)
其他影响性能的因素还包括数据压缩(参见之前章节,可以具体指定到列族)、RowKey设计、Major Compactions(建议在集群负载低的时候收工进行)和RegionServer处理RPC请求线程数等。
集群管理
下线节点的正确做法:虽然HBase能够自动适应RegionServer的下线,重新分配之上的Region,但探测转移过程中集群性能会受到影响,所以主动迁移数据,然后杀掉RegionServer的做法更安全一些。HBase提供了graceful-stop脚本:$ bin/graceful_stop.sh
Usage: graceful_stop.sh [--config<conf-dir>] [--restart] [--reload][--thrift] [--rest] <hostname>脚本按照以下顺序停止RegionServer:
停止Region Balancer。
RegionServer上的Region被随机分配到其他节点。
停止REST和Thirft服务。
停止RegionServer进程。
增加节点的正确做法:首先得在HDFS上增加DataNode,然后启动RegionServer进程,最后可选地使用Balancer平衡Region。
针对小版本的不停服务滚动式升级:基本思路是首先下线节点,然后升级节点上组件,最后重新上线该节点(使用graceful_stop.sh脚本reload选项)。
HBase Shell还提供了一些常用管理命令:
zk_dump:列出ZooKeeper当前状态。
status:列出集群运行状态,包括summary,simple和detailed选项。
compact:手动合并,还有major_compact。
balancer:手动均衡Region分布。
split:可以指定键拆分表。
hlog:查看WAL日志。
hfile:查看HFile文件统计信息。
一致性维护
HBase提供了hbck工具用来检查和修复数据一致性和完整性。在复杂的实际生产环境中,HBase还是可能会出现两种类型的数据不一致现象:Region不一致:Region不只属于一个RegionServer。这一半是由于.META表数据错误导致Region分配错误造成,可以通过hbck修复。
表不一致:每个Rowkey不只属于一个Region。可能两个Region的Rowkey范围重叠,hbck可以通过合并两个Region来进行数据修复,但可能生成大Region,导致频繁合并和分割动作。Hbck可以设置最大合并数量,也可以设置底层HFile在单独的文件夹进行合并处理再批量导入回HBase表中。
预先拆分表
在集群处于高负载时,表的拆分动作会增大系统延迟。如果Rowkey的分布是可预估的,那么创建表的时候可以指定拆分策略:hbase(main):019:0> create 'mytable' ,'family', {SPLITS_FILE => '~/splitkeylist'}
其中splitkeylist文件中指定了拆分键值:
$ cat ~/splitkeylist
A
B
C
D
表拆分结果如图所示:
集群复制备份
整个集群的复制除了数据备份外,还能支持以下场景:跨数据中心集群;分开集群分别处理在线实时和离线批处理任务。HBase集群间复制通过HLog的同步实现。HLog发送给第二集群执行是异步的,不会阻塞第一集群的写入动作。
集群间复制有三种类型:
Master-slave:写入操作从Master单向同步到Slave。
Master-master:写入操作双向同步。
Cyclic:环状同步,多于2个HBase集群复制,两两之间的复制可以是类型1,也可以是类型2。
配置集群间复制步骤如下:首先在hbase-site.xml中启用集群复制。
<property>
<name>hbase.replication</name>
<value>true</value>
</property>
然后在HBase Shell中添加要复制目的集群:
hbase(main):002:0> add_peer '1',
"secondary_cluster_zookeeper_quorum:2181:/hbase"
在表列族级别启用复制:
hbase(main):002:0> create 'mytable',{NAME => 'colfam1', REPLICATION_SCOPE => '1'}
HBase提供了VerifyReplication工具用于检查集群同步状态:
$ $HBASE_HOME/bin/hbase
org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication
Usage: verifyrep [--starttime=X][--stoptime=Y] [--families=A]
<peerid> <tablename>
HBase也支持使用MapReduce进行批量备份,提供了Import/Export/CopyTable工具支持表数据的导入/导出/拷贝。
这一系列打完收工。。。
相关文章推荐
- 读书笔记-HBase in Action-第四部分-(1)部署
- 读书笔记-HBase in Action-第三部分应用-(2)GIS系统
- 读书笔记-HBase in Action-第二部分Advanced concepts-(1)HBase table design
- 读书笔记-HBase in Action-第二部分Advanced concepts-(3)非Java客户端
- 读书笔记-HBase in Action-第二部分Advanced concepts-(3)非Javaclient
- 读书笔记-HBase in Action-第三部分应用-(1)OpenTSDB
- 读书笔记-HBase in Action-第二部分Advanced concepts-(2)Coprocessor
- 读书笔记-HBase in Action-第二部分Advanced concepts-(2)Coprocessor
- 读书笔记-HBase in Action-第二部分Advanced concepts-(1)HBase table design
- HBase in Action-第二部分Advanced concepts-(3)非Java客户端【REST、Thrift】
- 算法导论-第四部分-读书笔记
- Netty in Action (十一) 第四章 第四部分 传输服务使用案例
- 代码大全第二版读书笔记 第四部分-语句 十六、控制循环
- 《谈判力》读书笔记 第四部分 结论
- 读书笔记之: 操作系统概念(第6版)-第四部分 IO系统(I/O系统, 大容量存储结构)
- 读书笔记-HBase in Action-第一部分 HBase fundamentals
- 代码大全第二版读书笔记 第四部分-语句 十四、组织直线型代码 十五、使用条件语句
- 代码大全第二版读书笔记 第四部分-语句 十七、不常见的控制结构
- HTML5权威指南读书笔记【第四部分】
- 读书笔记-HBase in Action-第一部分 HBase fundamentals