没有为猪工作而奔跑的地图制作者

时间:2017-02-22 07:46:12

标签: hadoop mapreduce apache-pig

Q1-为猪作业运行的映射器数量是否仅取决于输入分割的数量? Q2:映射器的数量是否取决于我们在pig脚本中使用的语句。例如,foreach,group,join,filter?如果我有128 MB的输入文件,它将只运行一个映射器,而不管我在pig中使用的语句。 问题3:组合器何时运行猪?

问题4:在哪种情况下,合并器会在地图缩减作业中多次运行?

1 个答案:

答案 0 :(得分:0)

Q1。是和否,是的,在任何阶段运行的映射器数量取决于输入拆分的数量。但是不能保证只有一个阶段。因此,执行任何查询的映射器总数实际上取决于查询本身,它也回答了你的2个问题(Q2)。

让我们举一个例子,假设您有一个数据集,其中包含单个输入密码表中50个国家/地区的人口,您需要编写一个查询,以便您想要拥有3,4和5的国家/地区的名称最大的人口,但他们应该以相反的顺序出现,这意味着5个人口最多的国家首先出现,然后是4,依此类推。现在,当您在pig中为它编写查询时,map reduce作业可能会以下列方式运行以提供结果。

第一个地图缩减作业将按降序排列国家,然后保存结果。现在第一个地图缩小结果将运行第二个地图缩小,它将选择3,4和5最多人口国家并保存它。然后第二个映射的结果减少了它运行第三个map reduce工作并再次按所需顺序对它们进行排序并显示最终结果。即使有一个输入拆分但mapper的数量为3,主要取消这个例子。 (我必须采取的方法来解决这个例子是非常天真的,有可能的方法在单一地图减少工作中完成所有这些任务,我很有信心这样的查询在猪将采取单一的MR工作。但这里要点是得到关于猪查询如何运行的观点,这就是为什么我运行3个地图会减少工作量。)

Q3和Q4也有类似的答案,如1和2,这完全取决于你的查询。除非你明确地为组合器定义了一些约束。

但我确信开发人员为这些查询编写的map reduce程序已经过优化,因此它们消耗的资源最少。