为什么在aws/emr上运行时,我的hadoop reducer的“字数”文件有一半输出为0字节?

dgsult0t  于 2021-06-03  发布在  Hadoop
关注(0)|答案(0)|浏览(198)

我有一组数据,基本上是简单单词计数的Map结果(文本文件w/单词计数对,制表符分隔),我需要减少它。大约有160GB的数据,压缩成bz2文件。
当我在amazon web services elastic map reduce(aws emr)上运行我的作业时,我使用10个cc2.8x1大型从属服务器和一个m1.xlarge作为主服务器。最终有1200个map任务和54个reduce任务。只有一半的reduce任务在map任务完成后立即完成,它们的输出都是0字节。我假设输入是0个字节,但是我还没有深入查看日志来确认。其他27个reduce任务最终完成,所有这些任务的文件大小都是一致的(每个任务2.3gb)。对于输出文件(part-r-00000,…,part-r-00053),偶数文件是0字节文件。
当我在一个非常小的示例w/2 reducer上本地运行时,每个reducer输出都有数据。
我的mapper和reducer如下所示(java w/extras剥离):

// ...

public void map(LongWritable key, Text val, Context context) throws IOException, InterruptedException {
  String[] parts = val.toString().split("\t");
  if (parts.length > 1) {
    keyOut.set(parts[0]);
    valOut.set(Integer.parseInt(parts[1]));
    context.write(keyOut, valOut);
  }
}

// ...

public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
  int sum = 0;
  for (IntWritable val : values) {
    sum += val.get();
  }
  result.set(sum);
  context.write(key, result);
}

// ...

还有其他人经历过吗?你知道为什么会发生这种情况,或者我如何进一步调试吗?我打开了emr调试,以防你在日志中找到什么。谢谢
编辑:我应该注意到我正在s3上读取和存储数据
编辑2:我以前运行过一次同样的作业,我看到了0字节的文件,并且假设我的减速机中有一个bug,所以取消了作业。因此,我知道这不是一个一次性的事件。作业在同一群集上运行。我最初是在cloudera4(cdh4)库上编译java类的,这些库有“hadoop2.0”,所以我认为这可能是问题所在。当我第二次运行它时,我使用了用cloudera3(cdh3)库和hadoop0.20编译的java类,基本上与aws的版本相同。我过去也用cdh3编译过,但没有这种行为。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题