Hadoop仅映射作业

Hadoop仅映射作业,hadoop,mapreduce,avro,Hadoop,Mapreduce,Avro,我的情况如下: 我有两份MapReduce工作。 第一个是MapReduce作业,它生成按键排序的输出 然后,第二个Map-only作业将提取部分数据并收集它 我在第二份工作中没有减速机 问题是,我不确定是否将对仅映射作业的输出进行排序,还是将其从映射函数中洗牌。否正如zsxwing所说,除非指定减速机,否则不会进行任何处理,然后在映射端执行分区,在reduce端执行排序和分组。首先:如果您的第二个作业只包含一个包含/排除特定记录的筛选器,那么您最好将此筛选器添加到第一个作业的reducer的末

我的情况如下:

我有两份MapReduce工作。 第一个是MapReduce作业,它生成按键排序的输出

然后,第二个Map-only作业将提取部分数据并收集它

我在第二份工作中没有减速机


问题是,我不确定是否将对仅映射作业的输出进行排序,还是将其从映射函数中洗牌。

否正如zsxwing所说,除非指定减速机,否则不会进行任何处理,然后在映射端执行分区,在reduce端执行排序和分组。

首先:如果您的第二个作业只包含一个包含/排除特定记录的筛选器,那么您最好将此筛选器添加到第一个作业的reducer的末尾

MapReduce的一个相当重要的事实是,reducer将以您无法控制的“某种方式”对记录进行排序。在编写作业时,应假定记录是以随机顺序输出的

如果您确实需要以特定顺序输出所有记录,那么将SecondarySort机制与单个reducer结合使用是一个“简单”的解决方案,它的伸缩性不好。 “硬”解决方案就是“Tera排序”基准所使用的。 阅读此SO问题,了解其工作原理:

这比这要复杂一些。第一项工作是读取Avro文件并过滤一些记录。然后再次生成Avro文件。第二个作业只是读取第一个作业的输出,并将输出转换为文本格式。因此,第二个作业的输出似乎会被排序,因为输入已排序?为什么第一个作业的缩减器不能立即以文本格式输出信息。您甚至可以直接使用multipleoutputformats从reducer中以多种格式输出经过过滤/未过滤的数据。这正是我想要做的。不幸的是,我和阿夫罗有一些麻烦。可能是我不知道如何正确使用它。我尝试的是:在reducer
collector.collect(“一些文本”)
中的job conf
AvroJob.setOutputSchema(conf,Schema.create(Type.STRING))并且它抱怨这不是一个Piar模式。我建议您针对这个问题创建一个新问题。