HBase数据迁移 | 「掘金日新计划 · 12 月更文挑战」

38 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第25天

一、本篇笔记重点内容:

  • Sqoop数据迁移
  • 编程实现数据迁移

二、 详细知识点介绍

对于传统关系型数据库的用户来讲,在使用HBase时,面临的最大问题是数据的迁移问题,即如何将关系数据库上的数据迁移至HBase中。这里给出两种方法:

1)基于Sqoop工具实现数据迁移至HBase中;

2)编写专用的数据迁移程序,实现定制化的数据迁移。

 Sqoop数据迁移

Sqoop是Apache旗下的开源项目,主要应用于传统数据库(MySQL、Oracle等)数据迁移至HDFS、HBase、Hive中,当然,也可以实现将Hive、HDFS中的数据迁移至传统数据库。

下面的示例演示如何将MySQL中的数据迁移到HBase中。 1)在MySQL中,创建样本数据表,并插入样本数据。

create database test_hbase;

 

use test_hbase;

 

create table if not exists staff(

id int default null,

name varchar(20) default null,

age int default null

) engine=InnoDB;

 

insert into staff

values

(1000, 'tom', 23),

(1001, 'jim', 23),

(1002, 'tttk', 24),

2)复制mysql的驱动程序包mysql-connector-java.5.1.38-bin.jar至sqoop的lib/目录中;

3)利用Sqoop测试连接MySQL数据库,并列出当前数据库test_hbase所有表,如下所示:

$ ./bin/sqoop list-tables --connect jdbc:mysql://hadoop:3306/test_hbase --useranme root --password admin

4)测试成功后,此时,可以通过Sqoop将staff表的数据迁移至HBase中,在迁移命令时,在HBase中创建一个staff表,定义一个列族staffinfo,并以原表中的id字段作为HBase新表中的列键值,如下所示:

$ ./bin/sqoop import --connect jdbc:mysql://hadoop:3306/test_hbase --useranme root --password admin --table staff --hbase-create-table --hbase-table staff --column-family staffinfo --hbase-row-key id -m 1

5)此时,进入HBase查看数据迁移情况,如下所示:

scan 'staff'

编程实现数据迁移

对于一些特定环境的数据,迁移有时候要借助于编程,即源数据需要处理,如前面的例子中,我们认为staff表的看个信息是10年前上报的,在导入到HBase中时,每个员工的年龄要加10,诸如此类的需求,单纯借助于sqoop就不太容易完成。这里通过编程的方式,实现前面的数据迁移。程序的主要流程是分别连接MySQL和HBase,将MySQL数据表staff顺序读取,并以列的形式进行组织,写入到HBase中。