Hbase|Hbase - 迁移数据[导出,导入]
【Hbase|Hbase - 迁移数据[导出,导入]】有没有这样一样情况,把一个集群中的某个表导到另一个群集中,或者hbase的表结构发生了更改,但是数据还要,比如预分区没做,导致某台RegionServer很吃紧,Hbase的导出导出都可以很快的完成这些操作。
文章图片
环境使用 现在环境上面有一张表
logTable
,有一个ext
列簇但是没有做预分区,虽然可以强制拆分表,但是split的start,end范围无法精确控制。
方式一 (先导出再导出)
- 创建导出目录
hadoop fs -mkdir /tmp/hbase-export
- 备份表数据
使用hbase
内置的mr
命令,会默认导出到hdfs
中
hbase org.apache.hadoop.hbase.mapreduce.Export \
-D hbase.mapreduce.scan.column.family=ext \
logTable hdfs:///tmp/hbase-export/logTable
- 删除表
disable 'logTable'
drop 'logTable'
- 创建表
数据3天过期,可以根据RegionServer
的个数做预分区,假设有8台,则使用下面的方式。
由于我们是使用MD5("uid")
前两位作为打散,范围为00~ff
256个分片,可以使用如下方式。
# scala shell 创建方式
(0 until 256 by 256/8).map(Integer.toHexString).map(i=>s"0$i".takeRight(2))
hbase创表
create 'logTable',{ \
NAME => 'ext',TTL => '3 DAYS', \
CONFIGURATION => {
'SPLIT_POLICY' => 'org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy', \
'KeyPrefixRegionSplitPolicy.prefix_length' => '2'
}, \
COMPRESSION => 'SNAPPY' \
}, \
SPLITS => ['20', '40', '60', '80', 'a0', 'c0', 'e0']
- 导出备份数据
hbase org.apache.hadoop.hbase.mapreduce.Import logTable hdfs:///tmp/hbase-export/logTable
注意事项
- 默认导出所有列簇,可通过指定
-D hbase.mapreduce.scan.column.family=ext,info
参数导出。 - 如果另一张表没有源表对应的列簇将会出错。
文章图片
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 使用协程爬取网页,计算网页数据大小
- Java|Java基础——数组
- Python数据分析(一)(Matplotlib使用)
- Jsr303做前端数据校验
- Spark|Spark 数据倾斜及其解决方案
- 数据库设计与优化
- 爬虫数据处理HTML转义字符
- 数据库总结语句
- MySql数据库备份与恢复