Sqoop 导入。可以执行多少个最大映射器

Posted

技术标签:

【中文标题】Sqoop 导入。可以执行多少个最大映射器【英文标题】:Sqoop import. how many max mapper could be executed 【发布时间】:2017-04-04 06:26:05 【问题描述】:

在 Sqoop 导入中最多可以执行多少个映射器。此外,在使用 sqoop 导入时,是否存在减速器正在运行的情况。

【问题讨论】:

Sqoop 可能有减速器根据要求。请检查我的答案。 【参考方案1】:

1.Sqoop导入最多可以执行多少个mapper?

增加映射器的数量会导致更多的 并发数据传输任务,'这可以'导致更快的工作 完成。

它并不总是能更快地完成工作。在增加 映射器的数量,有一个点你会完全饱和 你的数据库。超过此点增加映射器的数量 不会导致更快的工作完成;事实上,它会有 相反的效果,因为您的数据库服务器花费更多时间来处理上下文 切换而不是提供数据。

映射器的最佳数量取决于许多变量:

1.数据库类型。

2.用于数据库服务器的硬件。

    对您的数据库需要服务的其他请求的影响。

    从少量映射器开始,以便您找到最佳的 您的环境和用例的并行度。

2.另外,在使用 sqoop 导入时,是否存在使用减速器的情况 正在运行。

聚合需要reducer。sqoop的reducer数量为0, 因为它只是一个运行仅 MAP 的作业,将数据转储到 高清文件系统。我们没有聚合任何东西。

【讨论】:

【参考方案2】:

最大映射器数

它可以是任意数字,但应根据数据、资源和所需的并行度来设置。更多的映射器并不意味着更高的性能。

有没有运行reducer的情况

是的 - 有特殊情况,当sqoop作业可能有reducer。

这样的条件之一是documented here。

sqoop export \
    -Dmapred.reduce.tasks=2
    -Dpgbulkload.bin="/usr/local/bin/pg_bulkload" \
    -Dpgbulkload.input.field.delim=$'\t' \
    -Dpgbulkload.check.constraints="YES" \
    -Dpgbulkload.parse.errors="INFINITE" \
    -Dpgbulkload.duplicate.errors="INFINITE" \
    --connect jdbc:postgresql://pgsql.example.net:5432/sqooptest \
    --connection-manager org.apache.sqoop.manager.PGBulkloadManager \
    --table test --username sqooptest --export-dir=/test -m 2

mapred.reduce.tasks - 暂存的 reduce 任务数。这 默认值为 1。每个任务都在单个事务中进行暂存。

【讨论】:

【参考方案3】:

Sqoop 作业默认使用 4 映射任务。可以通过将 -m--num-mappers 参数传递给作业来修改它。 Sqoop 对映射器的数量没有最大限制,但与数据库的并发连接总数是一个需要考虑的因素。阅读有关在 Sqoop 中控制并行性的更多信息here。

如果表没有定义主键,并且没有将--split-by参数提供给sqoop命令,则映射器的数量应显式设置为1

Sqoop 作业没有任何 reduce 任务。

【讨论】:

以上是关于Sqoop 导入。可以执行多少个最大映射器的主要内容,如果未能解决你的问题,请参考以下文章

Sqoop 导入映射器失败,但 sqoop 作业显示正在运行

映射器执行时间之间的巨大差异

运行 Sqoop 导入和导出时如何找到最佳映射器数量?

无法在 Sqoop 导出中自定义的映射器数量

将为 hive 中的分区表创建多少个映射器和化简器

AWS EMR 并行映射器?