1.概述
Sqoop的导入导出,是Sqoop的核心功能.导入导出,是针对Hadoop而言.所以
Sqoop导入 : RDBMS数据导入到Hadoop
Sqoop导出: Hadoop数据导出到RDBMS中
Sqoop导入时,会
2.导入
2.1 导入到HDFS
sqoop import / --connect <jdbc-uri> / --username <username> / --password <password> / -m setMapNum --mapreduce-job-name jobNameForUI --target-dir HDFS_DIR --fields-terminated-by ' ' --null-string '' --null-non-string '0' --query "RDBMS_SQL AND $CONDITIONS" --split-by 'MapSplitWithColumn' --delete-target-dir
delete-target-dir 谨慎使用,务必确认是可以删除HDFS的目标文件的,防止误删除
split-by 是Sqoop的分片算法列.Sqoop的数据分片是分别查询目标列的最大值和最小值,再根据这个最大值和最小值区间,根据设定的Map数量进行分片的.所以这个字段多非数字类型字段支持非常不好.最好选用数字的连续的列作为分片列
2.2 导入到Hive
sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username root --password root -m 2 --table emp --null-string '' --null-non-string '0' --mapreduce-job-name jobNameForUI --fields-terminated-by ' ' --hive-database test --hive-table emp_partition --hive-import --hive-partition-key 'pt' --hive-partition-value '2018-08-08' --hive-overwrite --delete-target-dir
--create-hive-table 导入到Hive不建议使用自动创建Hive表,最好是自行在Hive创建表和列.因为自动创建的表的字段类型,是依据导入数据推断出来的.如果有浮点数等情况,特别容易发生精度丢失.
3.导出
3.1 HDFS导出到MySQL
sqoop export --connect jdbc:mysql://localhost:3306/sqoop --username root --password root -m 2 --mapreduce-job-name FromHDFSToMySQL --table emp_demo --export-dir /user/hadoop/emp