首页 > 代码库 > HBase运维

HBase运维

管理工具

HBase Shell
HBase Shell是HBase组件提供的基于JRuby IRB的字符界面的交互式客户端程序,通过HBase Shell可以实现对HBase的绝大部分操作

通过help ["group-name"]命令,可以获取该组包含命令的详细使用说明

hbck工具
hbck工具对HBase中的数据进行扫描,找出错误的数据块,并生产简单的报表。该工具调用方法如下:
$ bin/hbase hbck
输出结果摘录如下:
......
Number of Tables: 1
Number of live region servers: 2
Number of dead region servers: 0
Master: node1,60000,1357616232695
Number of backup masters: 0
......
Summary:
ROOT is okay.
Number of regions: 1
Deployed on: node1,60020,1357613909450
.META. is okay.
Number of regions: 1
Deployed on: node2,60020,1357613870843
t1 is okay.
Number of regions: 1
Deployed on: node1,60020,1357613870843
0 inconsistencies detected.
Status: OK
说明:关于hbck工具的详细信息,可参考HBase文档:http://hbase.apache.org/book/hbck.in.depth.html 

hfile工具
hfile工具主要用于分析HBase的数据文件HFile。该工具的使用方法如下:
$ bin/hbase hfile [-a] [-b] [-e] [-f <arg>] [-k] [-m] [-p] [-r <arg>] [-s] [-v]
hfile工具具体的参数如表5-2所示。
表5-2 hfile参数

参数

说明

a,-checkfamily

启用列族检查

b,-printblocks

打印块索引元数据

e,-printkey

打印所有rowkey

f,-file <full/path/to/hfile>

设置要分析的HFile,应输入完整的路径名,如hdfs://namenode:8020/hbase/.META./12/34

k,-checkrow

查找没有排序的行

m,-printmeta

打印hfile的元数据信息

p,-printkv

打印所有的<Key/Value>键值对

r,-region <region-name>

设置要分析的Region,输入Region名,如".META.,,1"

s,-stats

打印统计信息

v,-verbose

打印详细信息,包括元数据和文件分割符


hlog工具
hlog工具主要用于分析HBase的WAL日志HLog文件。该工具的使用方法如下:
$ bin/hbase hlog <filename...> [-h] [-j] [-p] [-r <arg>] [-s <arg>] [-w <arg>]
hlog工具具体的参数如表5-3所示。
表5-3 hlog参数

参数

说明

h,-help

打印帮助信息

-j, --json

设置分析结果以json格式输出

p,-printvals

打印所有值

r,-region <region-name>

设置要分析的Region

s,-sequence <sequence-num>

设置要分析的序列

w,-row <row-name>

设置要分析的行

zkcli工具
zkcli工具是hbase包装的ZooKeeper Shell,通过它可以查看HBase集群使用的ZooKeeper集群的信息。该工具的启用方法如下:
$ bin/hbase zkcli
启用后,会进入如下界面:
Welcome to ZooKeeper!
...
JLine support is enabled
... 
WATCHER:: 
WatchedEvent state:SyncConnected type:None path:null
[zk: node5:2181(CONNECTED) 0]
在该提示符下输入任意一个字符,可获取zkcli支持的命令列表

 

5.2.3 日常维护

Compaction操作
HBase每隔一段时间会对将许多小的HBase数据文件(HFile)合并成大文件,这个过程叫做Compaction。Compaction操作可有效较少HFile的个数,节约磁盘空间,提高HBase的性能。RegionServer在执行Compaction操作期间会占用大量的内存资源,过于频繁的Compaction操作会影响HBase的性能,而Compaction操作周期过长也会导致期间积累的HFile过多,单次Compaction时间很长,同样也会影响性能。如果HBase在运行期间一直保持较高的Compaction频率,应该考虑添加新的节点以提高集群的负载能力。
说明:关于HBase Compaction的详细信息,请参考HBase文档:http://hbase.apache.org/book/regions.arch.html#compaction
Split操作
HBase的Region大小是由上限的,当Region的大小超过了这个限制,RegionServer就会执行一次Split过程,将这个Region一份为二,这个过程叫做Split。Split过程使用标记方式,将实际的数据分割操作放在后台进行,因此,该操作速度较快。Split操作可以将Region分成两份,分配给不同的RegionServer管理。如果HBase中的数据存在局部过热的Region,可以考虑手动对这些Region执行split操作,并将这些Region重新分配给不同节点。下面是这个过程的HBase Shell示例:
hbase(main):010:0> split ‘test‘,‘test,row150,1357626052663.15bbf20f9ce9b38e0a6dcb0732a90945‘
hbase(main):012:0> move ‘9de82062a65b07cc70b999793ad658dd‘, ‘apache-node3,60020,1357613909450‘
数据备份
HBase的数据都记录在HDFS的/hbase目录下,可以将HBase数据作为普通的HDFS文件进行备份,相关内容可参见3.2.3日常维护章节内容。也可以使用HBase提供的Replication机制进行数据备份。Replication机制基于操作日志将HBase数据同步到备用集群。关于Replication的内容,请参见HBase文档:http://hbase.apache.org/replication.html。
数据迁移
HBase数据迁移问题主要包括三个方面,如下所示:

  1. 从外部数据源(如关系型数据库)导入数据
  2. 将HBase数据导入外部数据源
  3. HBase集群间的数据迁移

对于第一、二种情况,可以利用HBase API编写相关的导入程序完成数据导入/导出操作,对于第三种情况,当然也使用可以和一、二两种情况相同的方法,不过针对第三种情况,有更简单的方法。

  • 导出数据

HBase提供导出数据的工具用来将HBase表格数据导出本地磁盘或HDFS上,该工具为:org.apache.hadoop.hbase.mapreduce.Export,使用方法如下:
$ bin/hbase org.apache.hadoop.hbase.mapreduce.Export [-D <property=value>]* <tablename> <outputdir> [<versions> [<starttime> [<endtime>]] [^[regex pattern] or [Prefix] to filter]]
设置参数可以限制导出的数据范围。下面的例子将表t1的f1列族导出到HDFS上:
$ bin/hbase –D hbase.mapreduce.scan.column.family=f1 t1 hdfs://node1:8020/tmp/t2_backup

  • 导入数据

对应的,HBase也提供了导入工具,可将导出的数据导入到HBase中,该工具为org.apache.hadoop.hbase.mapreduce.Import,使用发方法如下:
$ bin/hbase org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir>
*Import工具将数据导入HBase中已存在的表中,如果表不存在,将会发生错误。

  • 导入TSV格式的数据

TSV (Tab Separated Values)格式的数据以Tab分隔每个列的数据。HBase提供了ImportTsv工具来导入这种数据:
$ bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=a,b,c <tablename> <inputdir>
下面给出一个示例,设HDFS上有一个TSV格式的数据文件/tmp/tsv如下所示:
row1c1c2
row2c1c2
row3c1c2
设第一列数据为rowkey,第二列对应HBase中的列为"f1:c1",第三列对应HBase中的列为"f1:c2",使用ImportTsv工具导入数据:
$ bin/base org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=HBASE_ROW_KEY,f1:c1,f1:c2 tsv hdfs://node1:8020/tmp/tsv
ImportTsv工具也需要导入前HBase中已存在目标表格。
说明:Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转换的数据迁移工具。HDHv1.0不包含Sqoop组件,但是兼容Apache Sqoop 1.4.2及以上版本。关于Sqoop的信息,请参见Sqoop官方网站:http://sqoop.apache.org/。
数据压缩
对于存在I/O瓶颈的应用中,启用压缩是一个不错的选择。数据压缩不但节约了磁盘空间,也加快了数据传输效率。HBase支持全局设置压缩算法,也支持按列族压缩数据。全局压缩算法通过" hbase.regionserver.codecs"来设置。HBase支持的压缩算法如表5-5所示。下面的示例为列族"f1"设置GZip压缩算法。
hbase(main):010:0> distable ‘t1‘
0 row(s) in 1.0700 seconds 
hbase(main):005:0> alter ‘t1‘, {NAME => ‘f1‘, COMPRESSION =>‘GZ‘}
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 1.2980 seconds 
hbase(main):006:0> enable ‘t1‘
0 row(s) in 2.0700 seconds
表5-5 HBase支持的压缩算法及性能比较

压缩算法

配置名

压缩率

编码效率

解码效率

LZO算法

LZO

20.5%

135 MB/s

410 MB/s

GZIP算法

GZ

13.4%

21 MB/s

118 MB/s

SNAPPY

SNAPPY

22.2%

172 MB/s

409 MB/s

添加节点
为HBase添加新的RegionServer非常简单,只需在新的节点启动新的RegionServer即可。具体步骤如下:

  1. 在新的节点部署和配置HBase
  2. 在新节点运行下述命令启动新的RegionServer

$ bin/hbase-daemon.sh start regionserver

  1. 更新集群配置,将新节点加入regionservers文件中
  2. 刷新Web UI,检查新节点是否已经加入集群

删除节点
从HBase上动态删除RegionServer节点也比较方便,具体步骤如下:

  1. 在待删除的节点运行下述命令关闭RegionServer,该命令将告知Master重新分配该RegionServer上的Region到其他RegionServer上:

$ bin/hbase-daemon.sh stop regionserver

    1. 更新集群配置,将待删除节点从regionservers文件中删除
    2. 刷新Web UI,检查该节点是否已经退出集群

HBase运维