一、简介
sqoop是连接关系型数据库和hadoop的桥梁,主要有两个方面(导入和导出)
1、 将关系型数据库的数据导入到Hadoop 及其相关的系统中,如 Hive和HBase。
2、将数据从Hadoop 系统里抽取并导出到关系型数据库。
工作机制
将导入或导出命令翻译成MapReduce程序来实现在翻译出的,MapReduce 中主要是对InputFormat和OutputFormat进行定制。
版本划分
版本划分方式: apache1.4.X之后的版本是1,1.99.0之上的版本是2。
Sqoop1
1、在架构上:sqoop1使用sqoop客户端直接提交的方式。
2、访问方式:CLI控制台方式进行访问 。
3、安全性:命令或脚本中指定用户数据库名及密码。
Sqoop2的改进
1、引入sqoop server,集中化管理connector等。
2、多种访问方式:CLI,Web UI,REST API。
3、引入基于用户角色的安全机制。
sqoop1有一些局限性,但是一般情况下也够使用了。sqoop2也有一些不足比如部署复杂等,所以根据实际需要来使用即可。
二、安装和配置
1、下载地址:点击下载(本文使用1.4.7版本)
2、解压后,将hadoop目录下的 share/hadoop/common/hadoop-common-2.6.0-cdh5.4.0.jar、share/hadoop/hdfs/hadoop-hdfs-2.6.0-cdh5.4.0.jar、share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0-cdh5.4.0.jar拷贝到sqoop目录的lib下。然后将mysql-connector-java-XXX.jar拷贝到sqoop目录的lib下。
3、到conf目录下,将sqoop-env-template.sh复制为sqoop-env.sh,并设置sqoop-env.sh文件中的配置路径。
4、将hive-site.xml拷贝到conf文件下。
三、建表
创建mysql数据库并插入数据
CREATE TABLE temp1(id int,name varchar(100),last_modified timestamp DEFAULT CURRENT_TIMESTAMP);
INSERT INTO `temp` VALUES (1, '小明', '2021-05-25 03:27:09');
INSERT INTO `temp` VALUES (2, 'aa', '2021-05-25 03:27:09');
INSERT INTO `temp` VALUES (3, 'bb', '2021-05-25 03:27:09');
INSERT INTO `temp` VALUES (4, '小亮', '2021-05-25 03:27:09');
INSERT INTO `temp` VALUES (5, '小张', '2021-05-25 03:27:22');
创建hive表
CREATE table temp(
id int,
name STRING,
last_modified STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
四、测试
1、测试连接
sqoop list-databases
--username root
--password mysql
--connect jdbc:mysql://01.mysql.hl.com:3306/
2、将mysql数据增量导入hive。
sqoop import \
--connect jdbc:mysql://01.mysql.hl.com:3306/test \
--username root \
--password mysql \
--table temp \
--fields-terminated-by ',' \
--hive-import \
--hive-database test \
--hive-table temp \
--num-mappers 1 \
--incremental append \
--check-column last_modified \
--last-value "2021-05-25 03:00:00"