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,如果给建议也可以忽略做指定数量。
我一直认为,如果不在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,如果给建议也可以忽略做指定数量。