在 Mapper 类中执行 Reducer 操作
Posted
技术标签:
【中文标题】在 Mapper 类中执行 Reducer 操作【英文标题】:perform Reducer operation in Mapper Class 【发布时间】:2014-05-07 15:27:48 【问题描述】:在我的映射器类中,我逐行读取文件并在每一行上执行一些字符串操作(即从字符串中删除特殊字符),然后在减速器中每一行都存储在一个新文件中。
基本上,我的 reducer 只创建文件并将每一行写入新文件,因此我的映射器可能会创建文件而不是将数据传递给 reducer。这意味着我不想要reducer 并在mapper 中执行它的操作。 我对 Mapreduce 了解不多,所以任何类型的帮助都会很明显
【问题讨论】:
【参考方案1】:是的,您想要的非常有可能,您需要的只是地图工作。即只有映射器但没有减速器的工作。
实现它的方法是在驱动类中将减速器的数量设置为 0。
job.setNumReduceTasks(0);
关于这个主题的更详细的博客可以找到here
要为每个输入行生成一个文件考虑直接从您的映射器使用 hdfs api,即 FileSystem 和 FileStatus
【讨论】:
但是我想如何创建多个输出文件,因为我想在一个新文件中写入每一行。我不想执行任何排序操作。我正在使用LazyOutputFormat
...
你为什么有这样的要求?,考虑直接从你的映射器使用hdfs api,即FileSystem和FileStatus
我在 mapper 中写入文件是因为我在 reducer 中遇到了一些问题,它在一些迭代后停止(即当输入文件的行数大于 2000 时)并且它不会创建任何输出文件...
你可能想问一个关于这些细节的新问题,有人应该能帮你解决这个问题,为映射器处理的每一行编写一个文件是可能的,但不推荐,我真的怀疑如果它会扩展。鼓励您审查您的设计以上是关于在 Mapper 类中执行 Reducer 操作的主要内容,如果未能解决你的问题,请参考以下文章
Hadoop(十七)之MapReduce作业配置与Mapper和Reducer类
是否可以在 Hadoop Mapreduce 中为单个作业打印 Mapper 和 reducer 输出