/opt/module/sqoop/bin/sqoop import \
--connect \
--username \
--password \
--target-dir \
--delete-target-dir \
--num-mappers \
--fields-terminated-by \
--query "$2" ' and $CONDITIONS;'
Sqoop通过将导入或导出命令翻译成MapReduce程序来实现数据传输。底层运行的是只有Map阶段,没有Reduce阶段的任务,默认是4个MapTask。
Sqoop任务5分钟-2个小时的都有。取决于数据量。
Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性,转化的过程中遇到null-string,null-non-string数据都转化成指定的类型,通常指定成"\N"。在导出数据时采用–input-null-string “\N” --input-null-non-string “\N” 两个参数。导入数据时采用–null-string “\N” --null-non-string “\N”。
由于 Sqoop 将导出过程分解为多个事务,因此失败的导出作业可能会导致部分数据提交到数据库。在某些情况下,这进一步导致后续作业由于插入冲突而失败,或者导致其他情况下的数据重复。您可以通过充当用于暂存导出数据的辅助表的选项指定临时表来解决此问题。暂存数据最终在单个事务中移动到目标表。–staging-table
为了使用暂存工具,必须在运行导出作业之前创建暂存表。此表在结构上必须与目标表相同。此表在导出作业运行之前应为空,或者必须指定该选项。如果临时表包含数据并指定了该选项,则 Sqoop 将在启动导出作业之前删除所有数据。–clear-staging-table
来源:Sqoop官网用户指南
split-by:按照自增主键来切分表的工作单元
num-mappers:启动N个map来并行导入数据默认4个。