Sqoop常用语法

数据导入

从关系型数据库向大数据集群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

注意:
原本要按照空格分隔的直接换行输入即可,不需要\

猜你喜欢

转载自blog.csdn.net/qq_41610418/article/details/81713205