0

我在大约 1.22 GB 的文件上运行 Pig 脚本。默认块大小为 64MB。我有 4 个数据节点。作为输出的 Pig 脚本会生成 19 个文件。
当我运行 Pig 脚本并查看 Job Tracker 时,我看到了 6 个 Jobs。

       Jobid           Priority   User              Name          Map % Complete    Map Total   Maps Completed  Reduce % Complete   Reduce Total    Reduces Completed   Job Scheduling Information    Diagnostic Info

job_201207121202_0001   NORMAL    user     PigLatin:Analysis.pig    100.00%             20            20              100.00%              1               1                         NA                   NA
job_201207121202_0002   NORMAL    user     PigLatin:Analysis.pig    100.00%              5            5               100.00%              1               1                         NA                   NA
job_201207121202_0003   NORMAL    user     PigLatin:Analysis.pig    100.00%              2            2               100.00%              1               1                         NA                   NA
job_201207121202_0004   NORMAL    user     PigLatin:Analysis.pig    100.00%              2            2               100.00%              1               1                         NA                   NA
job_201207121202_0005   NORMAL    user     PigLatin:Analysis.pig    100.00%              5            5               100.00%              1               1                         NA                   NA
job_201207121202_0006   NORMAL    user     PigLatin:Analysis.pig    100.00%             5             5               100.00%              1               1                         NA                   NA    

根据我的理解,由于输入文件大小为 1.22 GB,而块大小为 64 MB,因此将为该文件创建总共 20 个块。我的复制因子为 3。由于每次拆分都会有一个地图作业,因此我将有 20 个地图作业,并且 job_201207121202_0001 作业在上面的列表中说是完美的。但是为什么我看到其他 5 个工作和其他 19 个地图任务?
谁能帮我理解这一点。我以为它只有 20 个 map 和 1 个 reduce 工作,因为 1.22GB/64MB ~ 20。

我是 Pig/Hadoop 初学者。非常感谢您的帮助。

4

3 回答 3

1

Pig 根据脚本的语义将一个脚本编译成多个 map-reduce 作业。粗略地说,join 是一项 MR 工作。组是一项 MR 工作。订单是 2 个 MR 工作(一个用于抽样分布)。还有一些其他的算子会产生 MR 边界。

于 2012-07-24T03:52:38.757 回答
0

您需要分享您的猪脚本,以便任何人真正自信地给出答案,但很可能您的脚本足够复杂,执行所有阶段需要 6 个 map reduce 作业才能完成

您可以看到执行的第二个作业确实运行了 20 个映射器(1.22GB / 64MB = 19.52,这将需要 20 个映射器):

普通用户 PigLatin:Analysis.pig 100.00% 20 20 100.00% 1 1 NA NA job_201207121202_0002

除此之外,谁知道你还在做什么——你是否使用不同的输入文件多次提交了相同的脚本?

于 2012-07-12T21:47:10.317 回答
0

Pig 是为链接 MR 工作而构建的薄层。

对于 MR 作业,“块大小”(技术上的块大小)决定了 mapper 的数量,但对于猪来说,MR 是基本单位而不是块大小。

根据您对数据执行的 ETL 类型,pig 会将其映射到单个/链接的多个 MR 作业。

例如: A= LOAD '/input' using PigStorage('|') as (a:chararray) Store A into '/output' ; 这个 pigscript 只是产生 Map only 的工作,甚至没有使用 reducer。

使用 groupby 和 JOIN 的脚本将产生 2 个 MR 作业。

PIG 支持的每个操作都可以映射到 MR :

  1. 加入:1 先生
  2. 分组:1 MR
  3. 过滤器:可以在 Mapper 或 reducer 阶段完成
  4. 加载:映射器
  5. 存储:映射器或减速器
  6. Foreach:映射器或减速器
于 2015-04-27T19:41:23.453 回答