Sqoop 默认创建 6 个映射器?

6 mappers created by default in Sqoop?

我一直认为,如果不在sqoop import中指定-m 属性,默认情况下会创建4个映射器。但是,在我的例子中,正在创建 6 个映射器。有人可以解释一下吗? 这是 sqoop 命令:

sqoop import --connect jdbc:mysql://localhost/cloudera --target-dir hdfsout --split-by employeename  --username root --password XXXXX --table employee

员工 table 有 3 列。员工姓名、年龄和入职日期。 在 hdfs 中,还创建了 6 个地图部分文件 0001、0002 .... 0005。

首先,建议在整数列上拆分。

根据code,

LOG.warn("You are strongly encouraged to choose an integral split column.");

不保证 sqoop 会生成与您在 -m <number of mappers> 中提到的相同数量的映射器

有关详细信息,请参阅 code。有用的部分代码:

// Use this as a hint. May need an extra task if the size doesn't
// divide cleanly.
int numSplits = ConfigurationHelper.getConfNumMaps(conf);

如果在查询结尾使用--verbose。您将看到完成拆分的边界值。

如果按整数值拆分,我相信在这种情况下只有 4 个映射器 运行。

4 是建议的映射器数量的默认值。

所以 运行 没有建议映射器数量的 squoop 命令应该等同于 运行 带有 4 个映射器建议的 squoop 命令。

但是建议可能会被忽略,已经可以看到不给建议也可以忽略,但是可以看出here,如果给建议也可以忽略指定数量。