首页 > 解决方案 > mapreduce 是否应该映射文本文件的一行,然后减少或处理整个文本文件?

问题描述

我正在 50k 文本文档上运行 1-100“页”长的 Mapreduce 作业。我在文档上执行的不多,只是一些正则表达式过程。MapReduce 大约需要 7 个小时。

mapper 函数在一行文本上运行,基本上每个文档中的每一行文本都会调用 map 函数,这是很多过程。然后 reducer 运行并合并数据。

public class TextMetricsMapper extends Mapper<LongWritable, Text, Text, Text> {
      @Override
      public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            StringBuilder sb = new StringBuilder();
            String line = value.toString();
…

由于我正在阅读小型文本文件,因此我的大部分处理时间似乎都花在了调用映射器上。我的意思是,如果 50,000 个文件中的 1 个有 5,000 行,那么仅针对该文件就有 5,000 个映射进程。

我如何将映射器更改为只读取整个文件?我真的很想立即在映射器中查看整个文档以创建我需要的统计信息。

*由于业务需求,我必须使用 Hadoop。

标签: hadoopmapreduce

解决方案


推荐阅读