本篇将会介绍几种hbase集群迁移方式,以备不时之需~
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是hadoop用于集群迁移的工具,由于hbase是建立在hdfs上的,所以使用该工具将hbase对应的目录拷贝到目标集群上也可以做到hbase迁移的工作
将源目录拷贝到目标目录之后需要使用
hbase hbck -repair
导入表数据
在老版本的hbase中需要使用如下的方式
hbase org.jruby.Main add_table.rb /hbase根目录/表名
hbase自身提供了export和import工具用于数据的导出和导入
将hbase表导出到hdfs或本地,使用方式如下:
hadoop jar hbase-server-*.jar export -D <property=value>* 表名 生成文件路径
其中-D后面的参数为TableInputFormat类所提供的参数,可以有多个
将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
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=旧列族名:新列族名,如果一致则指定一个即可
- 表名
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 | 主从同步/主主同步 | 短暂延迟,目标表必须存在 |
作者:@小黑