首页 > 解决方案 > 当少数表没有主键时,sqoop import-all 具有并行性

问题描述

我想从 Mysql 的模式中导入所有具有并行性的表。架构中很少有表有主键,也很少有没有。如果我们设置没有主键的映射器(--m>1)表会失败。

我们如何以并行方式导入所有表?

标签: hivesqoop

解决方案


我完全同意@leftjoin 关于PK 的回答。
还有另一种实现并行性的方法,您可以将其用于 RDBMS。您可以使用--split-by <<column>> -m no_of_mappers.
这告诉 sqoop 在将数据导入 hdfs 时使用哪一列来创建拆分。这不需要是唯一的,可以是数据在某种程度上均匀分布的任何列,例如 org_id 或 department_id (INT)。Sqoop 将触发 MAX(col) 和 MIN(COL),然后根据这些值拆分数据。然后拆分每个映射器的源数据以导入。您可以理解,如果表大小很大来计算最大值和最小值,这可能需要几分钟。
例如,对于一个 1000 行的表,--split-by dept_id -m 4.
假设我们有 6 个部门,sqoop 会将数据分成 4 个部分 - 部门 1、部门 2 和 3、部门 4、部门 5 和 6。请注意:这只是一个示例,实际分布可能会有所不同。


推荐阅读