Sqoop没有使用所有指定的映射器

时间:2014-10-17 19:04:24

标签: sqoop

我使用Sqoop将数据从Oracle导入Hadoop。在Oracle表中,我有大约2百万条记录,主键是我提供的分区字段。

我的sqoop工作已经完成,我得到了正确的数据,工作正在运行30分钟,直到现在一切都很好。

当我检查输出文件时,我看到第一个文件是圆形的1.4 GB,第二个文件是大约157.2 MB,最后一个文件(第20个文件)大约是10.4 MB而从3到19的所有其他文件都是0个字节。

我正在设置-m 20因为我想为我的工作运行20个映射器。

这是sqoop命令:

sqoop import --connect" CONNECTION_STRING" --query" SELECT * FROM WHERE AND \ $ CONDITIONS" --split-by .ID --target-dir / output_data -m 20

注意:我的群集足以处理20个映射器和数据库,同时也能够处理20个请求。

有什么想法吗?

  • Dharmesh

3 个答案:

答案 0 :(得分:5)

来自http://sqoop.apache.org/docs/1.4.5/SqoopUserGuide.html#_controlling_parallelism ...

  

如果主键的实际值不均匀分布   在其范围内,这可能导致不平衡的任务。

--split-by参数可用于选择分布更好的列。通常,这会因数据类型而异。

答案 1 :(得分:1)

尝试使用不同的--split-by字段以获得更好的负载平衡。

答案 2 :(得分:0)

这是因为主键(ID)不是均匀分布的。因此,你的地图制作者没有被恰当地使用。因此,您必须使用其他字段进行均匀分布的拆分。