使用Sqoop能够极大简化MySQL数据迁移至Hive之流程,并降低Hadoop处理分析任务时的难度。
先决条件:安装并运行有Sqoop与Hive的Hadoop环境。为了加快处理速度,我们还将使用Cloudera Quickstart VM(要求至少4 GB内存),不过大家也可以使用Hortonworks Data Platform(至少要求8 GB内存)。由于我的笔记本电脑只有8 GB内存,因此我在这里使用CLoudera VM镜像。
如果大家需要使用Virtualbox运行Cloudera/HDP VM,则可以轻松使用其它多种Hadoop生态系统预装软件包(包括MySQL、Oozie、Hadoop、Hive、Zookeeper、Storm、Kafka以及Spark等等)。
在MySQL中创建表
在Cloudera VM中,打开命令界面并确保MySQL已经安装完毕。shell> mysql --version
mysql Ver 14.14 Distrib 5.1.66, forredhat-linux-gnu (x86_64) using readline 5.
示例当中自然要使用自己的数据库,因此使用以下命令在MySQL中创建一套数据库:mysql> create database sqoop;
接下来:mysql> use sqoop;
mysql> create table customer(id varchar(3), name varchar(20), age varchar(3), salary integer(10));
Query OK, 0 rows affected (0.09 sec)
mysql> desc customer;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | varchar(3) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | varchar(3) | YES | | NULL | |
| salary | int(10) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+mysql> select * from customer;
+------+--------+------+--------+
| id | name | age | salary |
+------+--------+------+--------+
| 1 | John | 30 | 80000 |
| 2 | Kevin | 33 | 84000 |
| 3 | Mark | 28 | 90000 |
| 4 | Jenna | 34 | 93000 |
| 5 | Robert | 32 | 100000 |
| 6 | Zoya | 40 | 60000 |
| 7 | Sam | 37 | 75000 |
| 8 | George | 31 | 67000 |
| 9 | Peter | 23 | 70000 |
| 19 | Alex | 26 | 74000 |
+------+--------+------+-----
开始Sqoop之旅
如大家所见,其中customer表中并不包含主键。我在该表中并未添加多少记录。默认情况下,Sqoop能够识别出表中的主键列(如果有的话),并将其作为划分列