一、Sqoop介绍
- Sqoop是一个用来将关系型数据库和Hadoop中的数据进行相互转移的工具,可以将一个关系型数据库(例如Mysql、Oracle)中的数据导入到Hadoop(例如HDFS、Hive、Hbase)中,也可以将Hadoop(例如HDFS、Hive、Hbase)中的数据导入到关系型数据库(例如Mysql、Oracle)中。
- Sqoop工具接收到客户端的shell命令或者Java api命令后,通过Sqoop中的任务翻译器(Task Translator)将命令转换为对应的MapReduce任务,而后将关系型数据库和Hadoop中的数据进行相互转移,进而完成数据的拷贝。
二、导入数据
1. 参数说明
## 链接MySQL数据库url
--connect jdbc:mysql://127.0.0.1:3306/test_db
## 链接MySQL数据库用户名
--username root
## 链接MySQL数据库密码
--password 123456
## 链接MySQL数据库中的表
--table tb1
## 设置map的个数
--num-mappers 1
## 设置导入到hdfs文件所在的位置
--target-dir /datas/sqoop/input
## 设置导入到hdfs文件前先删除已经存在的目录
--delete-target-dir
## 设置导入到hdfs文件的分隔符
--fields-teminated-by ','
## 设置增量导入到hdfs上的检查列
--check-column id
## 设置增量导入到hdfs上的追加方式
--incremental append
## 设置增量导入到hdfs上的开始位置
--last-value 4
## 设置增量导入到hdfs上的文件存储格式
--as-parquetfile
## 指定hive中的数据库
--hive-database test_db
## 设置操作类型
--hive-import
## 指定hive中的表
--hive-table tb1
## 备注:delete-target-dir和incremental append不能同时使用
2. Sqoop获取MySQL的所有数据库
sqoop list-databases \
--connect jdbc:mysql://127.0.0.1:3306 \
--username root \
--password 123456;
3. Sqoop从MySQL导入数据到HDFS
sqoop import \
--connect jdbc:mysql://127.0.0.1:3306/test_db \
--username root \
--password 123456 \
--table tb1 \
--num-mappers 1 \
--target-dir /datas/sqoop/input \
--delete-target-dir;
4. Sqoop从MySQL导入数据到Hive
sqoop import \
--connect jdbc:mysql://127.0.0.1:3306/test \
--username root \
--password 123456 \
--table tb1 \
--num-mappers 1 \
--fields-terminated-by ',' \
--delete-target-dir \
--hive-database test \
--hive-import \
--hive-table tb1;
三、导出数据
1. 参数说明
## 链接MySQL数据库url
--connect jdbc:mysql://127.0.0.1:3306/test_db
## 链接MySQL数据库用户名
--username root
## 链接MySQL数据库密码
--password 123456
## 链接MySQL数据库中的表
--table tb1
## 设置map的个数
--num-mappers 1
## 设置hdfs文件导出的分隔符
--fields-terminated-by ','
## 设置hdfs文件所在的位置
--export-dir /user/hive/warehouse/test_db.db/tb1
2. Sqoop从Hive导出数据到MySQL
sqoop export \
--connect jdbc:mysql://127.0.0.1:3306/test_db \
--username root \
--password 123456 \
--table tb1 \
--num-mappers 1 \
--fields-terminated-by ',' \
--export-dir /user/hive/warehouse/test_db.db/tb1;