一、简介
sqoop是一款用于hadoop和关系型数据库之间数据导入导出的工具。你可以通过sqoop把数据从数据库(比如mysql,oracle)导入到hdfs中;也可以把数据从hdfs中导出到关系型数据库中。sqoop通过Hadoop的MapReduce导入导出,因此提供了很高的并行性能以及良好的容错性。
二、常见用法
2.1 mysql导入到hdfs
1 全部导入
sqoop import \
--connect jdbc:mysql://192.168.56.160:3306/mydemo \
--username root \
--password okok \
--table student \ -->选择表
--target-dir '/kb13/student' \ -->上传至hdfs目录
--delete-target-dir \ --> 若存在就删除
--num-mappers 1 \ --> 设置mapper数量 若是2,最后要设置reduce数量
--fields-terminated-by ','
-m 2
2 查询导入
sqoop import \
--connect jdbc:mysql://192.168.56.160:3306/mydemo \
--username root \
--password okok \
--target-dir '/kb13/users' \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by ',' \
--query 'select * from student where score<60 and $CONDITIONS;'
2.2 hdfs导出到MySQL
sqoop export \
--connect jdbc:mysql://192.168.56.160:3306/mydemo \
--username root \
--password okok \
--table users \ --> mysql中创建新表,与导入的表结构一样
--export-dir '/kb13/student' \
--num-mappers 1 \
--input-fields-terminated-by ','
2.3 MySQL导入到hive
sqoop import \
--connect jdbc:mysql://192.168.56.160:3306/mydemo \
--username root \
--password okok \
--table student \
--num-mappers 1 \
--hive-import \ --> hive导入
--fields-terminated-by ',' \
--hive-overwrite \ -->覆盖
--delete-target-dir \
--hive-table mydemo.users --> hive中创建表格
2.4 hive导出到MySQL
sqoop export \
--connect jdbc:mysql://192.168.56.160:3306/mydemo \
--username root \
--password okok \
--table user1 \
--export-dir '/hive110/warehouse/mydemo.db/users' \
--input-fields-terminated-by ','
mysql导入到hive null值
①默认sqoop到import数据时,将Mysql的Null类型,转为'null'
②hive中使用\N代表NULL类型
③如果希望在import时,将Mysql的Null类型,转为自己期望的类型,
需要使用--null-string and --null-non-string
--null-string: 当mysql的string类型列为null时,导入到hive时,使用什么来代替!
--null-string a: 如果mysql中,当前列是字符串类型(varchar,char),假如这列值为NULL,
导入到hive时,使用a来代替!
--null-non-string: 当mysql的非string类型列为null时,导入到hive时,使用什么来代替!
--null-non-string b: 如果mysql中,当前列不是字符串类型(varchar,char),假如这列值为NULL,
导入到hive时,使用b来代替!
④如果到导出时,希望将指定的参数,导出为mysql的NULL类型,需要使用
--input-null-string and --input-null-non-string
--input-null-string a: 在hive导出到mysql时,如果hive中string类型的列的值为a,导出到mysql中,使用NULL代替!
--input-null-non-string b: 在hive导出到mysql时,如果hive中非string类型的列的值为b,导出到mysql中,使用NULL代替!