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

时间:2013-05-17 22:23:54

标签: 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

我们可以指定 - m - 我们希望Sqoop运行多少并行任务(他们也可能同时访问数据库)。 相同选项适用于./sqoop export&lt; ...&gt;

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

谢谢!

2 个答案:

答案 0 :(得分:5)

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

  

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

答案 1 :(得分:0)

在“Hadoop:The Definitive Guide”中,他们解释说,在每个Tasktracker上设置最大map / reduce任务时,请考虑处理器及其核心来定义集群的任务数量,因此我将应用相同的逻辑对此进行操作并查看可以在处理器上运行的进程数(计数超线程,核心数)并将--m设置为此值 - 1(对于可能在导出期间弹出的其他任务保持打开状态) )但这只有在您拥有大型数据集并且希望及时完成导出的情况下。

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