HBase进阶学习(三)--集群迁移

本篇将会介绍几种hbase集群迁移方式,以备不时之需~

bulkload

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过程,输出的

distcp

distcp是hadoop用于集群迁移的工具,由于hbase是建立在hdfs上的,所以使用该工具将hbase对应的目录拷贝到目标集群上也可以做到hbase迁移的工作
将源目录拷贝到目标目录之后需要使用

hbase hbck -repair

导入表数据

在老版本的hbase中需要使用如下的方式

hbase org.jruby.Main add_table.rb /hbase根目录/表名

export+import

hbase自身提供了export和import工具用于数据的导出和导入

export

将hbase表导出到hdfs或本地,使用方式如下:

hadoop jar hbase-server-*.jar export -D <property=value>* 表名 生成文件路径 

其中-D后面的参数为TableInputFormat类所提供的参数,可以有多个

import

将export导出的文件数据导入到hbase中,使用方式如下:

hadoop jar hbase-server-*.jar import -D <property=value>* 表名 生成文件路径 

其中-D后面的参数包括但不限于为以下几个

  • HBASE_IMPORTER_RENAME_CFS:重命名列族,格式为”旧列族名:新列族名”
  • import.filter.class:指定过滤器类型,在数据写入前进行过滤
  • import.filter.args:指定过滤器之后提供的参数
  • import.bulk.output:指定了该参数之后不会直接写入数据,而是生成hfile文件用于bulkload

copytable

hbase也提供了一个copytable的工具直接用于表拷贝,其是通过mr程序将数据逐条put到目标表中的(TableInputFormat和TableOutputFormat)

使用方式如下:

hadoop jar hbase-server-*.jar copytable -D <property=value>*

-D的参数涵括但不限于以下几个

  • –startrow=起始Rowkey
  • –stoprow=终止Rowkey
  • –starttime=起始时间戳
  • –endtime=终止时间戳
  • –versions=保留的版本数
  • –all.cells=是否拷贝删除标记的数据
  • –new.name=目标表名
  • –peer.adr=目标zk-ip:zk-port:hbase在zk中的根目录,必须指定
  • –families=旧列族名:新列族名,如果一致则指定一个即可
  • 表名

replication

hbase中的replication相当于mysql中的主从同步技术,RegionServer会在后台启动一个进程不断put或者delete到同步的集群上
比较适合小集群的热备

使用replication需要在hbase-site.xml文件中配置以下选项:

名称 描述
hbase.replication true 开启hbase replication功能,从集群中也要开启
replication.source.nb.capacity 5000 主机群每次向从集群发送entry的最大个数,如果slave较多,可以适当调大
replication.source.size.capacity 4194304 每次发送entry包的最大大小,不推荐太大
replication.source.ratio 1 主机群中使用slave服务器的百分比
hbase.regionserver.wal.enablecompression false 主机群关闭hlog压缩
replication.sleep.before.failover 5000 主机群RegionServer在当机后多少毫秒开启failover

配置完毕之后在hbase shell中设置replication的信息:

add_peer '1','目标zk-ip:zk-port:hbase在zk中的根目录'

之后可以通过list_peer命令查看设置的replication

集群迁移方法对比

方式 使用场景 注意事项
bulkload 从异构数据库中导入/程序生成的数据文件导入
distcp 整库导入 原库需要停止写入,两边版本需要一致
export+import 不同版本之间导入/只迁移部分数据/导入导出分时段进行 会占用较多磁盘空间,export受数据写入的影响,import会造成局部热点
copytable 导入导出同时进行,比上面一条少了一次文件读写 同上
replication 主从同步/主主同步 短暂延迟,目标表必须存在

作者:@小黑

你可能感兴趣的:(集群,hbase,迁移)