设为首页 加入收藏

TOP

Hbase数据迁移之bulkload
2019-03-03 13:38:55 】 浏览:72
Tags:Hbase 数据 迁移 bulkload

一、概述

HBase本身提供了很多种数据导入的方式,通常有两种常用方式:

1、使用HBase提供的TableOutputFormat,原理是通过一个Mapreduce作业将数据导入HBase

2、另一种方式就是使用HBase原生Client API

这两种方式由于需要频繁的与数据所存储的RegionServer通信,一次性入库大量数据时,特别占用资源,所以都不是最有效的。了解过HBase底层原理的应该都知道,HBase在HDFS中是以HFile文件结构存储的,一个比较高效便捷的方法就是使用 “Bulk Loading”方法直接生成HFile,即HBase提供的HFileOutputFormat类。

二、Bulk Load基本原理

Bulk Load处理由两个主要步骤组成

1、准备数据文件

Bulk Load的第一步,会运行一个Mapreduce作业,其中使用到了HFileOutputFormat输出HBase数据文件:StoreFile。HFileOutputFormat的作用在于使得输出的HFile文件可以适应单个region,使用TotalOrderPartitioner类将map输出结果分区到各个不同的key区间中,每个key区间都对应着HBase表的region。

2、导入HBase表

第二步使用completebulkload工具将第一步的结果文件依次交给负责文件对应region的RegionServer,并将文件move到region在HDFS上的存储目录中,一旦完成,将数据开放给clients。

如果在bulk load准备导入或在准备导入与完成导入的临界点上发现region的边界已经改变,completebulkload工具会自动split数据文件到新的边界上,但是这个过程并不是最佳实践,所以用户在使用时需要最小化准备导入与导入集群间的延时,特别是当其他client在同时使用其他工具向同一张表导入数据。

2.1修改hadoop环境变量

cd /root/apps/hadoop-2.6.4/libexec

vim hadoop-config.sh

在后面添加hbse的配置和lib包:

if [ -d "/root/apps/hbase-1.2.1/conf" ]; then
CLASSPATH=${CLASSPATH}:/root/apps/hbase-1.2.1/conf;
fi

if [ -d "/root/apps/hbase-1.2.1/lib" ]; then
CLASSPATH=${CLASSPATH}:/root/apps/hbase-1.2.1/lib/*;
fi

2.2上传要导入到hbase的文件

创建要导入的文件再hdfs上的目录:

hadoop fs -mkdir -p /data

上传文件:

hadoop fs -put bulkloadfile /data/

2.3将文件导入到hbase表中

基本命令

hadoop jar /root/apps/hbase-1.2.1/lib/hbase-server-1.2.1.jar importtsv -Dimporttsv.separator=" " -Dimporttsv.columns=HBASE_ROW_KEY,f1:name test /data/bulkloadfile

查看结果

注意:

bulk load的completebulkload步骤,就是简单的将importtsv或HFileOutputFormat的结果文件导入到某张表中,使用类似以下命令

hadoop jar hbase-VERSION.jar completebulkload [-c /path/to/hbase/config/hbase-site.xml] /user/todd/myoutput mytable

命令会很快执行完成,将/user/todd/myoutput下的HFile文件导入到mytable表中。注意:如果目标表不存在,工具会自动创建表。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Springboot 连接Hbase实例 下一篇HBASE集群搭建过程

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目