HBase平常维护

一,基本命令:node

    建表:create 'testtable','coulmn1','coulmn2'shell

     也能够建表时加coulmn的属性如:create 'testtable',{NAME => 'coulmn1', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS => '10', COMPRESSION => 'LZO', TTL => '30000', IN_MEMORY => 'false', BLOCKCACHE => 'false'}, {NAME => 'coulmn', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS => '30', COMPRESSION => 'LZO', TTL => '30000', IN_MEMORY => 'true'}  (其中的属性有versions:设置历史版本数,TTL:过时时间,COMPRESSION:压缩方式,当配置lzo的状况)apache

    删除表:drop 'testtable'   (删除表以前先要禁用表,命令disable 'testtable')ruby

    启用和禁用表: enable 'testtable' 和disable 'testtable'服务器

    其它的基本命令:describe 'testtable'(查看表结构),alert 修改表结构,list 列出全部表。session

二,平常维护的命令多线程

    1,major_compact 'testtable',一般生产环境会关闭自动major_compact(配置文件中hbase.hregion.majorcompaction设 为0),选择一个晚上用户少的时间窗口手工major_compact,若是hbase更新不是太频繁,能够一个星期对全部表作一次 major_compact,这个能够在作完一次major_compact后,观看全部的storefile数量,若是storefile数量增长到 major_compact后的storefile的近二倍时,能够对全部表作一次major_compact,时间比较长,操做尽可能避免高锋期。tcp

    2,flush 'testtable',将全部memstore刷新到hdfs,一般若是发现regionserver的内存使用过大,形成该机的 regionserver不少线程block,能够执行一下flush操做,这个操做会形成hbase的storefile数量剧增,应尽可能避免这个操 做,还有一种状况,在hbase进行迁移的时候,若是选择拷贝文件方式,能够先停写入,而后flush全部表,拷贝文件。ide

    3,balance_switch true或者balance_switch flase,配置master是否执行平衡各个regionserver的region数量,当咱们须要维护或者重启一个regionserver时,会 关闭balancer,这样就使得region在regionserver上的分布不均,这个时候须要手工的开启balance。oop

三,重启一个regionserver

    bin/graceful_stop.sh --restart --reload --debug nodename

    这个操做是平滑的重启regionserver进程,对服务不会有影响,他会先将须要重启的regionserver上面的全部 region迁移到其它的服务器,而后重启,最后又会将以前的region迁移回来,但咱们修改一个配置时,能够用这种方式重启每一台机子,这个命令会关 闭balancer,因此最后咱们要在hbase shell里面执行一下balance_switch true,对于hbase regionserver重启,不要直接kill进程,这样会形成在zookeeper.session.timeout这个时间长的中断,也不要经过 bin/hbase-daemon.sh stop regionserver去重启,若是运气不太好,-ROOT-或者.META.表在上面的话,全部的请求会所有失败。

四,关闭下线一台regionserver

    bin/graceful_stop.sh --stop  nodename

    和上面同样,系统会在关闭以前迁移全部region,而后stop进程,一样最后咱们要手工balance_switch true,开启master的region均衡。

五,检查region是否正常以及修复

    bin/hbase hbck  (检查)

    bin/hbase hbck -fix  (修复)

    会返回全部的region是否正常挂载,如没有正常挂载可使用下一条命令修复,若是仍是不能修复,那须要看日志为何失败,手工处理。

六,hbase的迁移

    1,copytable方式

    bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=zookeeper1,zookeeper2,zookeeper3:/hbase 'testtable'

    目前0.92以前的版本的不支持多版本的复制,0.94已经支持多个版本的复制。固然这个操做须要添加hbase目录里的conf/mapred-site.xml,能够复制hadoop的过来。

    2,Export/Import

    bin/hbase org.apache.hadoop.hbase.mapreduce.Export testtable /user/testtable [versions] [starttime] [stoptime]

    bin/hbase org.apache.hadoop.hbase.mapreduce.Import testtable  /user/testtable

    跨版本的迁移,我以为是一个不错的选择,并且copytable不支持多版本,而export支持多版本,比copytable更实用一些。

    3,直接拷贝hdfs对应的文件

    首先拷贝hdfs文件,如bin/hadoop distcp hdfs://srcnamenode:9000/hbase/testtable/ hdfs://distnamenode:9000/hbase/testtable/

    而后在目的hbase上执行bin/hbase org.jruby.Main bin/add_table.rb /hbase/testtable

    生成meta信息后,重启hbase

    这个操做是简单的方式,操做以前能够关闭hbase的写入,执行flush全部表(上面有介绍),再distcp拷贝,若是hadoop版本不一致,能够用hftp接口的方式,我推荐使用这种方式,成本低

相关文章
相关标签/搜索