在sqoop中,当使用--split-limit参数时,“size”的含义是什么

时间:2017-07-27 13:28:39

标签: hadoop sqoop hadoop2

From sqoop docs

  

使用--split-limit参数可以限制创建的拆分部分的大小。如果创建的拆分大小大于此参数中指定的大小,则拆分将调整大小以适应此限制,并且拆分的数量将根据该更改。

“尺寸”在这里指的是什么。有人可以用一个小例子来解释。

1 个答案:

答案 0 :(得分:1)

我只是在阅读这篇文章,我认为它会这样解释。 示例表有一个称为ID的主键列,它是一个INT,表有1000行,其ID值从1到1000。如果将num-mappers设置为50,则每个尝试导入20行的任务将有50个。第一个查询的谓词为WHERE ID> = 1 AND ID <=20。第二个映射器为WHERE ID> = 21 AND ID <= 40 ...,依此类推。

如果您还定义了分割限制,则根据分割的大小,此参数可能会调整用于压缩数据的任务数。 例如,将num-mappers设置为50并将split-limit设置为10,现在您将需要100个任务来导入10行数据,每条数据都需要获取全部1000行。现在,您的第一个任务将看到WHERE ID> = 1 AND ID <= 10。

在使用DateTime列的情况下,该值现在基于秒。因此,如果您有10年的数据,每天有1行,那么您将有大约3,653行数据。如果将num-mappers设置为10,则每个任务将尝试使用看起来像MYDATETIMECOL> ='2010-01-01'和MYDATETIMECOL <='2010-12-31'的谓词来压缩大约365天的数据,但是如果您还将分割限制设置为2592000(30天内的秒数),则将需要约122个任务来压缩数据,并且第一个任务将具有谓词,例如MYDATETIMECOL> ='2010-01-01' AND MYDATETIMECOL <='2010-01-30'。

这两个示例都使用了1:1的列值与行数比率。如果这些表中的任何一个在分隔列中每个值具有1000行,那么所有这些行也将被压缩。

使用DateTime col的示例,在过去的十年中,每天您已加载1000行,现在您有3,653,000行,谓词和任务数将相同,但每个任务中被压缩的行数将多出1000倍。