使用sqoop import 命令从postgresql导入数据到hive中,发现数据行数变多了,但是任务没有跑错,非常奇怪。
导入语句为:
sqoop import
--connect jdbc:postgresql://*.*.*.*:5432/database_name
--username name111
--password password111
--table table111
--hive-import
--hive-database database111
--hive-table hive_table111
--hive-overwrite
--delete-target-dir
--hive-drop-import-delims
--null-string ''
--null-non-string ''
-m5
导入前pgsql数据量为3698条,但是导入后再hive中的数据量为3938,数据竟然变多了。最后发现将参数-m5
,改为-m1
即可解决问题。
为什么呢?
我们先来了解一下参数-m
的含义以及sqoop导入的原理。
首先用户输入一个 Sqoop import 命令,Sqoop 会从关系型数据库中获取元数据信息,比如要操作数据库表的 schema是什么样子,这个表有哪些字段,这些字段都是什么数据类型等。它获取这些信息之后,会将输入命令转化为基于 Map 的 MapReduce作业,这样 MapReduce作业中有很多 Map 任务,每个 Map 任务从数据库中读取一片数据,这样多个 Map 任务实现并发的拷贝,把整个数据快速的拷贝到 HDFS 上。
而决