但是这个做法并不推荐, 因为这个操作会忽略文件的状态和内存中还没有被刷写的数据
CopyTable工具
另一个导出HBase表数据的工具是CopyTable,该工具的使用方式很简单,参考帮助信息中的例子即可操作
其是通过mr程序将数据逐条put到目标表中的(TableInputFormat和TableOutputFormat)
使用方式如下:
hadoop jar hbase-server-*.jar copytable -D <propertyproperty=value>*
-D的参数涵括但不限于以下几个
–startrow=起始Rowkey
–stoprow=终止Rowkey
–starttime=起始时间戳
–endtime=终止时间戳
–versions=保留的版本数
–all.cells=是否拷贝删除标记的数据
–new.name=目标表名
–peer.adr=目标zk-ip:zk-port:hbase在zk中的根目录, 必须指定
–families=旧列族名:新列族名,如果一致则指定一个即可
表名
批量导入
批量导入可以有多种不同的形式,常见的是使用MapReduce和普通的客户端API
但是这两种方式都不高效,这里推荐另外一种做法:blukload
blukload是一种将数据文件(可能是普通的文本文件)导入到hbase中的一种工具
其运作流程是:
1.读取数据文件,格式为Rowkey+\t+col1数据+\t+col2数据…
2.将数据文件转换为hfile文件
3.读取hfile文件导入hbase
使用方式1
数据文件可以是由程序生成的
使用
hadoop jar hbase-server-*.jar importtsv 列名参数 表名 数据文件位置
直接将数据文件导入hbase,其中列名参数具体为 -Dimporttsv.columns=HBASE_ROW_KEY,”列族名:列名”…
使用方式2
编写mr程序读源hbase库,生成hfile文件,OutputFormat要设置为HFileOutputFormat类
之后使用
hadoop jar hbase-server-*.jar completebulkload mr结果文件目录 表名
将hfile文件导入目标hbase数据库
注意,该mr程序可以只有mapper过程,输出的 类型为ImmutableBytesWritable和KeyValue
复制
hbase中的replication相当于mysql中的主从同步技术,RegionServer会在后台启动一个进程不断put或者delete到同步的集群上
比较适合小集群的热备
使用replication需要在hbase-site.xml文件中配置以下选项:
配置完毕之后在hbase shell中设置replication的信息:
add_peer '1','目标zk-ip:zk-port:hbase在zk中的根目录'
之后可以通过list_peer命令查看设置的replication
集群迁移方法对比
改变日志级别
默认HBase的日志是DEBUG级别的,这在安装和设计阶段比较有用
它可以让用户在系统出现问题的时候在日志文件中搜寻到比较多的信息
生产环境中用户可以根据需要修改日志的级别为INFO或者WARN
修改方式如下:
编辑conf目录下的log4j.properties文件
将log4j.logger.org.apache.hadoop.hbase=INFO