读书笔记-HBase in Action-第四部分-(2)运维,-hbaseaction-


监控

通过收集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:

如上图,HBase输出的metrics分为三种: 

性能测试

数据库的性能一般用响应时间来衡量。最理想的测试方法是模拟真实的工作负载来测试HBase的响应时间。在这之前,往往需要通过某种基准性能测试来建立信心。

HBase自带了了性能评估工具,能够很方便地测试HBase的随机读写、顺序读写和扫描等性能。

$ $HBASE_HOME/bin/hbaseorg.apache.hadoop.hbase.PerformanceEvaluation

Yahoo!提供了YCSB性能基准测试工具,用来比较不同数据库的性能。

性能优化

HBase的性能会受到整个依赖栈的影响,性能优化涉及到所有的依赖层,涵盖硬件选择、网络配置、操作系统设置、JVM设置和Hadoop HDFS优化等。


之前的部署章节,提到过一些相应的优化手段。本节关注HBase本身的配置参数调优。针对不同的应用场景,HBase的工作负载类型不同,需要不同的优化配置组合,以下是一些基本原则:

其他影响性能的因素还包括数据压缩(参见之前章节,可以具体指定到列族)、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:

增加节点的正确做法:首先得在HDFS上增加DataNode,然后启动RegionServer进程,最后可选地使用Balancer平衡Region。

针对小版本的不停服务滚动式升级:基本思路是首先下线节点,然后升级节点上组件,最后重新上线该节点(使用graceful_stop.sh脚本reload选项)。

HBase Shell还提供了一些常用管理命令:

一致性维护

HBase提供了hbck工具用来检查和修复数据一致性和完整性。在复杂的实际生产环境中,HBase还是可能会出现两种类型的数据不一致现象:

预先拆分表

在集群处于高负载时,表的拆分动作会增大系统延迟。如果Rowkey的分布是可预估的,那么创建表的时候可以指定拆分策略:

hbase(main):019:0> create 'mytable' ,'family', {SPLITS_FILE => '~/splitkeylist'}

其中splitkeylist文件中指定了拆分键值:

$ cat ~/splitkeylist
A
B
C
D

表拆分结果如图所示:


集群复制备份

整个集群的复制除了数据备份外,还能支持以下场景:跨数据中心集群;分开集群分别处理在线实时和离线批处理任务。

HBase集群间复制通过HLog的同步实现。HLog发送给第二集群执行是异步的,不会阻塞第一集群的写入动作。

集群间复制有三种类型:

配置集群间复制步骤如下:首先在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工具支持表数据的导入/导出/拷贝。

这一系列打完收工。。。

 




相关内容