目录
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库间进行数据的传递。
Sqoop版本:
- Sqoop1
- sqoop1优点:架构部署简单
- sqoop1的缺点:命令行方式容易出错,格式紧耦合,无法支持所有数据类型,安全 机制不够完善, 安装需要root权限,connector必须符合JDBC模型
- Sqoop2
- sqoop2的优点:多种交互方式,命令行,web UI,rest API,conncetor集中化管理, 所有的链接安装在sqoop server上,完善权限管理机制,connector规范化,仅仅负 责数据的读写。
- sqoop2的缺点,架构稍复杂,配置部署更繁琐。
Sqoop原理:(注意只有Map任务,没有reduce)
Sqoop导入导出原理
- 导入原理
在导入数据之前,Sqoop使用JDBC检查导入的数据表,检索出 表中的所有列以及列的SQL数据类型,并将这些SQL类型映射为 Java数据类型,在转换后的MapReduce应用中使用这些对应的 Java类型来保存字段的值,Sqoop的代码生成器使用这些信息来创 建对应表的类,用于保存从表中抽取的记录。 - 导出原理
在导出数据前,Sqoop会根据目标表的定义生成一个Java类,这个 生成的类能够从文本中解析出记录数据,并能够向表中插入类型合 适的值,然后启动一个MapReduce作业,从HDFS中读取源数据 文件,使用生成的类解析出记录,并且执行选定的导出方法。
Sqoop安装配置环境搭建
或者在bin下,也可以看到已经配置好的命令:
Sqoop数据导入—全部导入
打开SQLyog连接hadoop01数据库,可以看到我们数据库。
在这里手动创建数据库userdb,字符集选utf8
在sqlyog中创建表emp
CREATE TABLE `emp` (
`id` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
`deg` varchar(100) DEFAULT NULL,
`salary` int(11) DEFAULT NULL,
`dept` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
);
然后插入测试数据:
INSERT INTO `emp` VALUES ('1201', 'gopal', 'manager', '50000', 'TP');
INSERT INTO `emp` VALUES ('1202', 'manisha', 'Proof reader', '50000', 'TP');
INSERT INTO `emp` VALUES ('1203', 'khalil', 'php dev', '30000', 'AC');
INSERT INTO `emp` VALUES ('1204', 'prasanth', 'php dev', '30000', 'AC');
INSERT INTO `emp` VALUES ('1205', 'kranthi', 'admin', '20000', 'TP');
创建emp_add表
CREATE TABLE `emp_add` (
`id` int(11) NOT NULL,
`hno` varchar(100) DEFAULT NULL,
`street` varchar(100) DEFAULT NULL,
`city` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `emp_add` VALUES ('1201', '288A', 'vgiri', 'jublee');
INSERT INTO `emp_add` VALUES ('1202', '108I', 'aoc', 'sec-bad');
INSERT INTO `emp_add` VALUES ('1203', '144Z', 'pgutta', 'hyd');
INSERT INTO `emp_add` VALUES ('1204', '78B', 'old city', 'sec-bad');
INSERT INTO `emp_add` VALUES ('1205', '720X', 'hitec', 'sec-bad');
将emp表的数据导入到HDFS文件系统
通过HDFS UI界面查看数据结果文件
查看导入后的文件内容
Sqoop数据导入—增量导入
- append模式:主要针对INSERT新增数据的增量导入。
- lastmodified模式:主要针对UPDATE修改数据的增量导入。
向数据表emp进行增量导入
从HDFS UI界面查看增量导入结果
Sqoop数据导入—MySQL表数据导入Hive
将emp_add表中的数据导入Hive
通过hive客户端查看Hive数据仓库表数据
Sqoop数据导入—MySQL表数据子集导入
-
–where
-
–query
Sqoop数据导出
Sqoop导出:就是将HDFS、Hive、Hbase等文件 系统或数据仓库中的数据导出到关系型数据库中,在导出操作之前,目标表必 须存在于目标数据库中,否则在执行导出操作时会失败。
创建MySQL数据表
导出操作
查看表