我一直认为,如果您不在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
员工表有 3 列。员工姓名、年龄和入职日期。 在 hdfs 中,也创建了 6 个 map 部分文件 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 个映射器。
关于hadoop - Sqoop 默认创建 6 个映射器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38041429/