6

我正在使用 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

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

是否有一些启发式方法(可能基于数据大小)有助于猜测要使用的最佳任务数量是多少?

谢谢!

4

2 回答 2

6

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

映射器的最佳数量取决于许多变量:您需要考虑您的数据库类型、用于数据库服务器的硬件以及对数据库需要服务的其他请求的影响。没有适用于所有场景的最佳映射器数量。相反,我们鼓励您尝试为您的环境和用例找到最佳的并行度。最好从少量映射器开始,慢慢增加,而不是从大量映射器开始,逐步降低。

于 2014-01-31T20:17:11.667 回答
0

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

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

于 2013-05-18T01:41:36.703 回答