Sqoop
Sqoop是什么?
SQL+HADOOP=SQOOP
完成MySQL到HADOOP之间的数据传输
Sqoop现状
已经停止维护 分为SQOOP 1 和SQOOP 2 建议使用sqoop 1.4.7
停止维护原因分析
1.足够的成熟
2.基于MapReduce太老了,替换方案datax canel
兼容性较好的版本组合
Hadoop 2.7+ Hive 1.2.1 +HBase 1.x +sqoop 1.4.7
SQOOP主要命令
import 导入
export 导出
job 减少重复代码
Import 详解
通用参数
如下:
Argument Description
==--connect== 指定JDBC连接字符串
--connection-manager 指定连接管理类
--driver 指定连接的驱动程序
-P 从控制台读入密码(可以防止密码显示中控制台)
==--password== 指定访问数据库的密码
==--username== 指定访问数据库的用户名
连接数据库
[root@qianfeng01 ~]sqoop import --connect jdbc:mysql://qianfeng01:3306/sqoop --username root --password 123456
列出所有数据库
[root@qianfeng01 ~] sqoop list-databases --connect jdbc:mysql://hadoop01:3306 --username root --password 123456;
列出数据库中所有表
[root@qianfeng01 ~] sqoop list-tables --connect jdbc:mysql://hadoop01:3306/sqoop --username root --password 123456;
Import的控制参数
Argument
Description
--append
通过追加的方式导入到HDFS
--as-avrodatafile
导入为 Avro Data 文件格式
--as-sequencefile
导入为 SequenceFiles文件格式
--as-textfile
导入为文本格式 (默认值)
--as-parquetfile
导入为 Parquet 文件格式
--columns
指定要导入的列
--delete-target-dir
如果目标文件夹存在,则删除
--fetch-size
一次从数据库读取的数量大小
-m,--num-mappers
n 用来指定map tasks的数量,用来做并行导入
-e,--query
指定要查询的SQL语句
--split-by
用来指定分片的列
--table
需要导入的表名
--target-dir
HDFS 的目标文件夹
--where
用来指定导入数据的where条件
-z,--compress
是否要压缩
--compression-codec
使用Hadoop压缩 (默认是 gzip)
案例:
数据准备
在本地mysql数据库中新建一个sqoop数据库数据如下: