hbase维护操作命令

1、基本命令:

      建表:  create 'hbase_t_m_user_personalmodel_recommend','modelinfo','recommendlist','baseinfo';

      也可以建表时加coulmn Family的属性如:  (其中的属性有versions:设置历史版本数,TTL:过期时间,COMPRESSION:压缩方式,当配置SNAPPY的情况)

       'hbase_t_m_user_personalmodel_recommend', {NAME => 'baseinfo', COMPRESSION => 'SNAPPY', TTL => '2592000 SECONDS (30 DAYS)'}, {NAME => 'modelinfo', COMPRESSION => 'SNAPPY', TTL => '2592000 SECONDS (30 DAYS)'}, {NAME => 'recommendlist', COMPRESSION => 'SNAPPY', TTL => '2592000 SECONDS (30 DAYS)'}

     删除表:drop 'hbase_t_m_user_personalmodel_recommend'   (删除表之前先要禁用表,命令disable 'hbase_t_m_user_personalmodel_recommend')

    启用和禁用表: enable 'hbase_t_m_user_personalmodel_recommend' 和disable 'hbase_t_m_user_personalmodel_recommend'

    其它的基本命令:describe 'hbase_t_m_user_personalmodel_recommend'(查看表结构),alert 修改表结构,list 列出所有表。

    清空表:truncate 'hbase_t_m_user_personalmodel_recommend'


   

二,日常维护的命令

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

    2,flush 'testtable',将所有memstore刷新到hdfs,通常如果发现regionserver的内存使用过大,造成该机的regionserver很多线程block,可以执行一下flush操作,这个操作会造成hbase的storefile数量剧增,应尽量避免这个操作,还有一种情况,在hbase进行迁移的时候,如果选择拷贝文件方式,可以先停写入,然后flush所有表,拷贝文件。

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

三,重启一个regionserver

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

    这个操作是平滑的重启regionserver进程,对服务不会有影响,他会先将需要重启的regionserver上面的所有region迁移到其它的服务器,然后重启,最后又会将之前的region迁移回来,但我们修改一个配置时,可以用这种方式重启每一台机子,这个命令会关闭balancer,所以最后我们要在hbase shell里面执行一下balance_switch true,对于hbase regionserver重启,不要直接kill进程,这样会造成在zookeeper.session.timeout这个时间长的中断,也不要通过bin/hbase-daemon.sh stop regionserver去重启,如果运气不太好,-ROOT-(目前root表已经删除)或者hbase:meta表在上面的话,所有的请求会全部失败。

四,关闭下线一台regionserver

    bin/graceful_stop.sh --stop  regionserver_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 'hbase_t_m_user_personalmodel_recommend'

        目前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:8020/hbase/hbase_t_m_user_personalmodel_recommend/ hdfs://distnamenode:8020/hbase/testtable/

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

    生成meta信息后,重启hbase

    这个操作是简单的方式,操作之前可以关闭hbase的写入,执行flush所有表(上面有介绍),再distcp拷贝,如果hadoop版本不一致,可以用hftp接口的方式,我推荐使用这种方式,成本低。

   七、批量导入数据

     1、自己写mr程序导入或者使用命令:         

        hbase org.apache.hadoop.hbase.mapreduce.ImportTsv  -Dimporttsv.columns=HBASE_ROW_KEY,recommendlist:shortstream_lists  hbase_t_m_user_personalmodel_recommend    /user/nlp/warehouse/dw1/shortuserrecommenddefault/

     数据格式:

        rowkey shortstream_lists


recommendlist为column family,下面的column为 shortstream_lists 

-Dimporttsv.columns 指定列,需要指定HBASE_ROW_KEY

 hbase_t_m_user_personalmodel_recommend 为table名称

-Dimporttsv.separator为分隔符,默认为\t

  2、bulkload :

    MapReduce生成HFile文件,再使用BulkLoad导入HBase中(完全分布式运行)   

    A、这种方式有很多的优点

       a). 如果我们一次性入库hbase巨量数据,处理速度慢不说,还特别占用Region资源, 一个比较高效便捷的方法就是使用 “Bulk Loading”方法,即HBase提供的HFileOutputFormat类。

        b). 它是利用hbase的数据信息按照特定格式存储在hdfs内这一原理,直接生成这种hdfs内存储的数据格式文件,然后上传至合适位置,即完成巨量数据快速入库的办法。配合mapreduce完成,高效便捷,而且不占用region资源,增添负载。

  B、这种方式也有很大的限制

         a). 仅适合初次数据导入,即表内数据为空,或者每次入库表内都无数据的情况即bulkload这个命令只能执行一遍

         b). HBase集群与Hadoop集群为同一集群,即HBase所基于的HDFS为生成HFile的MR的集群.

   bulkload 方式需要两个Job配合完成: 
   (1)第一个Job还是运行原来业务处理逻辑,处理的结果不直接调用HTableOutputFormat写入到HBase,而是先写入到HDFS上的一个中间目录下(如 middata) 
   (2)第二个Job以第一个Job的输出(middata)做为输入,然后将其格式化HBase的底层存储文件HFile 
   (3)调用BulkLoad将第二个Job生成的HFile导入到对应的HBase表中

具体命令操作见:http://hbase.apache.org/book.html#arch.bulk.load

展开阅读全文

没有更多推荐了,返回首页