[Sqoop]-导入导出

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 '\t' \
--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 '\t' \
--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

猜你喜欢

转载自www.cnblogs.com/NightPxy/p/9163297.html