读书笔记-HBase in Action-第四部分-(2)运维,-hbaseaction-
读书笔记-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工具支持表数据的导入/导出/拷贝。
这一系列打完收工。。。
评论暂时关闭