数据导入
从关系型数据库向大数据集群HDFS,Hive,HBase中传输数据,叫做导入。使用关键字import。
数据导入到HDFS
[root@master ~]# sqoop import \
> --connect jdbc:mysql://master:3306/mysql_test?useSSL=false \
> --username root \
> --password 123456 \
> --table student \
> --target-dir /hive/mysql_test \
> --delete-target-dir \
> --fields-terminated-by '\t' \
> --num-mappers 1
查询导入到HDFS
[root@master ~]# sqoop import \
> --connect jdbc:mysql://master:3306/mysql_test?useSSL=false \
> --username root \
> --password 123456 \
> --query 'select * from student where id=101 and $CONDITIONS' \
> --target-dir /hive/mysql_test1 \
> --delete-target-dir \
> --fields-terminated-by '\t' \
> --num-mappers 1
注意:
- 使用query选项就不能使用table
- 使用where的时候必须加上and $CONDITIONS
- 不要使用双引号
指定列导入到HDFS
就是通过sqoop直接将mysql中的表的某些列数据直接导入HDFS
[root@master ~]# sqoop import \
> --connect jdbc:mysql://master:3306/mysql_test?useSSL=false \
> --username root \
> --password 123456 \
> --table student \
> --columns id \
> --target-dir /hive/mysql_test2 \
> --delete-target-dir \
> --fields-terminated-by '\t' \
> --num-mappers 1
注意:
columns如果有多列,那么就使用逗号分隔(id,name,hahah),不要在字段之间添加空格
关键字筛选导入到HDFS
where的用法
[root@master ~]# sqoop import \
> --connect jdbc:mysql://master:3306/mysql_test?useSSL=false \
> --username root \
> --password 123456 \
> --table student \
> --where "id=101" \
> --target-dir /hive/mysql_test3 \
> --delete-target-dir \
> --fields-terminated-by '\t' \
> --num-mappers 1
数据导入到Hive
[root@master ~]# sqoop import \
> --connect jdbc:mysql://master:3306/mysql_test?useSSL=false \
> --username root \
> --password 123456 \
> --table student \
> --hive-import \
> --hive-table mysql_import_test4 \
> --delete-target-dir \
> --hive-overwrite \
> --fields-terminated-by '\t' \
> -m 1
注意:
本过程分成两个步骤:第一步,将数据导入到HDFS上;第二步,创建表,然后将数据迁移到Hive库中。
数据导出
[root@master ~]# sqoop export \
> --connect jdbc:mysql://master:3306/mysql_test?useSSL=false \
> --username root \
> --password 123456 \
> --table student \
> --export-dir /hive/mysql_test \
> --input-fields-terminated-by '\t' \
> -m 1
注意:
mysql中的表如果不存在,不会自动创建。从HDFS导出的数据是追加在已存在的表student中的,可能会造成主键不唯一的问题。
Sqoop脚本
使用opt文件打包sqoop的命令
#自定义存放脚本的目录
[root@master ~]# cd /opt/test/sqoop/
#创建sqoop脚本文件
[root@master sqoop]# vim job_HDFS2MYSQL.opt
#内容
export
--connect
jdbc:mysql://master:3306/mysql_test?useSSL=false
--username
root
--password
123456
--table
student
--export-dir
/hive/mysql_test
--input-fields-terminated-by
'\t'
-m
1
#执行脚本
[root@master sqoop]# sqoop --options-file job_HDFS2MYSQL.opt
注意:
原本要按照空格分隔的直接换行输入即可,不需要\