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

Boh*_*dan 6 oracle hadoop mapreduce hdfs sqoop

我正在使用Sqoop版本1.4.2和Oracle数据库.

运行Sqoop命令时.例如这样:

./sqoop import                               \
    --fs <name node>                         \
    --jt <job tracker>                       \
    --connect <JDBC string>                  \
    --username <user> --password <password>  \
    --table <table> --split-by <cool column> \
    --target-dir <where>                     \
    --verbose --m 2
Run Code Online (Sandbox Code Playgroud)

我们可以指定-m - 我们希望Sqoop运行多少并行任务(也可能同时访问数据库).相同的选项可用于./sqoop export <...>

是否有一些启发式(可能基于数据大小)有助于猜测什么是最佳使用任务数?

谢谢!

Chr*_*tta 6

这取自O'Reilly Media的Apache Sqoop Cookbook,这似乎是最合乎逻辑的答案。

映射器的最佳数量取决于许多变量:您需要考虑数据库类型,用于数据库服务器的硬件以及对数据库需要服务的其他请求的影响。没有适用于所有方案的最佳数量的映射器。相反,建议您尝试为您的环境和用例找到最佳的并行度。一个好主意是从少量的映射器开始,然后逐渐增加,而不是从大量的映射器开始,然后逐步降低。


Eng*_*iro 0

在“Hadoop:权威指南”中,他们解释说,在每个 Tasktracker 上设置最大映射/归约任务时,请考虑处理器及其核心来定义集群的任务数量,因此我将对此应用相同的逻辑,并且看一下您的处理器上可以运行多少个进程(计算 HyperTreading、核心)并将 --m 设置为该值 - 1(为导出过程中可能弹出的其他任务保留一个打开状态)但是这个仅当您拥有大型数据集并希望及时完成导出时才适用。

如果您没有大型数据集,请记住您的输出将是 --m 文件数的值,因此如果您要导出 100 行表,您可能需要将 --m 设置为 1 以保留所有数据本地化在一个文件中。