开启掘金成长之旅!这是我参与「掘金日新计划 · 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中。