Hadoop字数统计在包含单行的大文件上

时间:2015-08-24 01:05:35

标签: java hadoop word-count

我试图运行hadoop字数计算示例,以下是我的映射器的样子:

public static class TokenizerMapper
   extends Mapper<Object, Text, Text, IntWritable>{

  private final static IntWritable one = new IntWritable(1);
  private Text word = new Text();

  public void map(Object key, Text value, Context context
                ) throws IOException, InterruptedException {
  StringTokenizer itr = new StringTokenizer(value.toString());
    while (itr.hasMoreTokens()) {
      word.set(itr.nextToken());
      context.write(word, one);
    }
  }
}

到目前为止,这对我的示例(小数据集)起作用,但当我使用我的实际数据集(8GB)时,它没有。我认为这是因为处理文本的方式。在给出的代码片段中,我非常确定整个字符串都被读入内存,这显然不会很好地扩展。

  

我认为我的问题与hadoop读取文本文件的方式有关,它希望它是一个大文件(总计)但它并不期望单个行会很大。

我的问题是:有什么方法可以让hadoop按块读取文件块(因此它会缩放并且不会使RAM崩溃)并且仍然在空白处执行拆分?

0 个答案:

没有答案