数据转换工具Sqoop详解!(上)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 笔记

一、Sqoop服务架构


Apache Sqoop™ is a tool designed for efficiently transferring bulk data between Apache Hadoop and structured datastores such as relational databases.


简单点说sqoop就是一个连接关系型数据库和hadoop的桥梁,底层跑MR,主要有两个方面(导入和导出):


A. 将关系型数据库的数据导入到Hadoop 及其相关的系统中,如 Hive和HBase


B. 将数据从Hadoop 系统里抽取并导出到关系型数据库3.png

二、Sqoop import讲解


在进行import导入的时候,会出现:

4.png

这是因为sqoop缺少java-json.jar包.去http://www.java2s.com/Code/Jar/j/Downloadjavajsonjar.htm下载,然后放到sqoop/lib目录即可。

(1)准备数据

1.准备数据,创建mysql表并加载数据

CREATE TABLE  user_info (
  id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(20) DEFAULT NULL,
  password varchar(20) DEFAULT NULL,
  PRIMARY KEY (id)
);
insert into user_info values(1,'admin','admin');
insert into user_info values(2,'wang','111111');
insert into user_info values(3,'zhang','000000');
insert into user_info values(4,'lili','000000');
insert into user_info values(5,'henry','000000');
insert into user_info values(6,'cherry','000000');
insert into user_info values(7,'ben','111111');
insert into user_info values(8,'leo','000000');
insert into user_info values(9,'test','test');
insert into user_info values(10,'system','000000');
insert into user_info values(11,'xiao','111111');

(2)import相关参数详解

可以查看相关import的参数

sqoop import --help

将mysql中的数据导入到hdfs上,默认的map数是4个,默认地址是hdfs:/user/caizhengjie

bin/sqoop import \
--connect jdbc:mysql://bigdata-pro-m01:3306/db_sqoop \
--username root \
--password 199911 \
--table user_info

将mysql中的数据导入到hdfs上,如果文件存在就给删除掉,指定的map数是1个,指定的地址是hdfs:/user/kfk/sqoop/import/user_info

bin/sqoop import \
--connect jdbc:mysql://bigdata-pro-m01:3306/db_sqoop \
--username root \
--password 199911 \
--table user_info \
--delete-target-dir \
--num-mappers 1  \
--target-dir /user/kfk/sqoop/import/user_info
[caizhengjie@bigdata-pro-m01 hadoop]$ bin/hdfs dfs -text /user/kfk/sqoop/import/user_info/par*
1,admin,admin
2,wang,111111
3,zhang,000000
4,lili,000000
5,henry,000000
6,cherry,000000
7,ben,111111
8,leo,000000
9,test,test
10,system,000000
11,xiao,111111

使用 --direct,可以让传输更快

bin/sqoop import \
--connect jdbc:mysql://bigdata-pro-m01:3306/db_sqoop \
--username root \
--password 199911 \
--table user_info \
--delete-target-dir \
--num-mappers 1  \
--target-dir /user/kfk/sqoop/import/user_info \
--direct

上传到hdfs上的文件格式默认是用逗号隔开的,我们可以自己定义分隔格式

bin/sqoop import \
--connect jdbc:mysql://bigdata-pro-m01:3306/db_sqoop \
--username root \
--password 199911 \
--table user_info \
--delete-target-dir \
--num-mappers 1  \
--target-dir /user/kfk/sqoop/import/user_info  \
--fields-terminated-by '\t'
[caizhengjie@bigdata-pro-m01 hadoop]$ bin/hdfs dfs -text /user/kfk/sqoop/import/user_info/par*
1       admin   admin
2       wang    111111
3       zhang   000000
4       lili    000000
5       henry   000000
6       cherry  000000
7       ben     111111
8       leo     000000
9       test    test
10      system  000000
11      xiao    111111

定义存储在hdfs上的parquet文件格式

bin/sqoop import \
--connect jdbc:mysql://bigdata-pro-m01:3306/db_sqoop \
--username root \
--password 199911 \
--table user_info \
--delete-target-dir \
--num-mappers 1  \
--target-dir /user/kfk/sqoop/import/user_info  \
--fields-terminated-by '\t' \
--as-parquetfile 

定义snappy压缩格式

bin/sqoop import \
--connect jdbc:mysql://bigdata-pro-m01:3306/db_sqoop \
--username root \
--password 199911 \
--table user_info \
--delete-target-dir \
--num-mappers 1  \
--target-dir /user/kfk/sqoop/import/user_info  \
--fields-terminated-by '\t' \
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec

将id > 5的’username,password’导入到hdfs

bin/sqoop import \
--connect jdbc:mysql://bigdata-pro-m01:3306/db_sqoop \
--username root \
--password 199911 \
--columns 'username,password' \
--table user_info \
--where 'id > 5' \
--delete-target-dir \
--num-mappers 1  \
--target-dir /user/kfk/sqoop/import/user_info  \
--fields-terminated-by '\t' 
[caizhengjie@bigdata-pro-m01 hadoop]$ bin/hdfs dfs -text /user/kfk/sqoop/import/user_info/par*
cherry  000000
ben     111111
leo     000000
test    test
system  000000
xiao    111111

在原表的基础上增加,但是需要指定列名–check-column ‘id’

bin/sqoop import \
--connect jdbc:mysql://bigdata-pro-m01:3306/db_sqoop \
--username root \
--password 199911 \
--columns 'username,password' \
--table user_info \
--where 'id > 5' \
--num-mappers 1  \
--target-dir /user/kfk/sqoop/import/user_info  \
--fields-terminated-by '\t' \
--check-column 'id' \
--incremental append 
[caizhengjie@bigdata-pro-m01 hadoop]$ bin/hdfs dfs -text /user/kfk/sqoop/import/user_info/par*
cherry  000000
ben     111111
leo     000000
test    test
system  000000
xiao    111111
cherry  000000
ben     111111
leo     000000
test    test
system  000000
xiao    111111

在原表的基础上增加,从第10个开始,但是不包含10

bin/sqoop import \
--connect jdbc:mysql://bigdata-pro-m01:3306/db_sqoop \
--username root \
--password 199911 \
--columns 'username,password' \
--table user_info \
--num-mappers 1  \
--target-dir /user/kfk/sqoop/import/user_info  \
--fields-terminated-by '\t' \
--check-column 'id' \
--incremental append \
--last-value 10
[caizhengjie@bigdata-pro-m01 hadoop]$ bin/hdfs dfs -text /user/kfk/sqoop/import/user_info/par*
cherry  000000
ben     111111
leo     000000
test    test
system  000000
xiao    111111
cherry  000000
ben     111111
leo     000000
test    test
system  000000
xiao    111111
xiao    111111
bin/sqoop import \
--connect jdbc:mysql://bigdata-pro-m01:3306/db_sqoop \
--username root \
--password 199911 \
--columns 'username,password' \
--num-mappers 1  \
--target-dir /user/kfk/sqoop/import/user_info  \
--fields-terminated-by '\t' \
--check-column 'id' \
--incremental append \
--query 'select * from user_info where id > 5 and $CONDITIONS'
[caizhengjie@bigdata-pro-m01 hadoop]$ bin/hdfs dfs -text /user/kfk/sqoop/import/user_info/par*
cherry  000000
ben     111111
leo     000000
test    test
system  000000
xiao    111111
cherry  000000
ben     111111
leo     000000
test    test
system  000000
xiao    111111
xiao    111111
6       cherry
7       ben
8       leo
9       test
10      system
11      xiao




相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL 分布式计算 监控
Sqoop数据迁移工具使用与优化技巧:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入解析Sqoop的使用、优化及面试策略。内容涵盖Sqoop基础,包括安装配置、命令行操作、与Hadoop生态集成和连接器配置。讨论数据迁移优化技巧,如数据切分、压缩编码、转换过滤及性能监控。此外,还涉及面试中对Sqoop与其他ETL工具的对比、实际项目挑战及未来发展趋势的讨论。通过代码示例展示了从MySQL到HDFS的数据迁移。本文旨在帮助读者在面试中展现Sqoop技术实力。
497 2
|
数据采集 SQL 分布式计算
数据处理 、大数据、数据抽取 ETL 工具 DataX 、Kettle、Sqoop
数据处理 、大数据、数据抽取 ETL 工具 DataX 、Kettle、Sqoop
1437 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
58 3
|
7月前
|
SQL 分布式计算 关系型数据库
【数据采集与预处理】数据传输工具Sqoop
【数据采集与预处理】数据传输工具Sqoop
235 0
|
7月前
|
数据采集 消息中间件 分布式计算
Sqoop与其他数据采集工具的比较分析
Sqoop与其他数据采集工具的比较分析
|
SQL 关系型数据库 MySQL
hive数据库操作与sqoop工具的使用
hive数据库操作与sqoop工具的使用
|
SQL 存储 分布式计算
Sqoop进行Hadoop生态离线数据迁移工具
学习一个东西,个人认为最好的方式是:官网+源码+实践。 Sqoop官网:http://sqoop.apache.org
496 0
Sqoop进行Hadoop生态离线数据迁移工具
|
SQL 资源调度 关系型数据库
数据迁移的工具Sqoop的安装与配置
数据迁移的工具Sqoop的安装与配置
136 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
89 0