Sqoop知识点总结
Sqoop简介
Sqoop主要用于在Hadoop和关系数据库或大型机之间传输数据,可以使用Sqoop工具将数据从关系数据库管理系统导入(import)到Hadoop分布式文件系统中,或者将Hadoop中的数据转换导出(export)到关系数据库管理系统,其底层利用MapReduce并行计算模型以批处理方式加快了数据传输速度(只有Map阶段,没有Reduce阶段的任务,默认是4个MapTask),并且具有较好的容错性功能。Sqoop参数
/opt/module/sqoop/bin/sqoop import \ --connect \ --username \ --password \ --target-dir \ --delete-target-dir \ --num-mappers \ --fields-terminated-by \ --query
Sqoop常见问题
Sqoop导入导出Null存储一致性问题
Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性。
在导出数据时采用--input-null-string和--input-null-non-string两个参数。
导入数据时采用--null-string和--null-non-string。
Sqoop数据导出一致性问题
由于Sqoop将导出过程分解为多个事务,因此失败的导出作业可能会导致将部分数据提交到数据库。在某些情况下,这可能进一步导致后续作业因插入冲突而失败,而在其他情况下,则可能导致数据重复。
您可以通过--staging-table选项指定暂存表来解决此问题,该选项用作用于暂存导出数据的辅助表。
最后,已分阶段处理的数据将在单个事务中移至目标表。
Sqoop在导入数据的时候数据倾斜
通过ROWNUM()生成一个严格均匀分布的字段,然后指定为分割字段
split-by:按照自增主键来切分表的工作单元
num-mappers:启动N个map来并行导入数据,默认4个