即使我将 numReducetasks 设置为 2,Hadoop 也只会生成一个输出文件

标签 hadoop mapreduce

我在 ubuntu 上以伪分布式模式设置了 hadoop。我的理解是我可以在伪模式下使用多个 reducer 运行一项工作。但即使将 numReducetasks 设置为 2,我也只得到一个输出文件 partr0000。这是为什么?

注意:我的输入文件只有 12 条记录。这是一个二级排序的 MR 程序。

感谢您的帮助。

最佳答案

如果您看到默认分区程序 HashPartitionergetPartition(),它看起来如下所示:

public int getPartition(K key, V value, int numReduceTasks) { 
    return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks; 
}

我认为所有记录都属于同一个分区只是偶然发生的。只需运行一个测试,看看您使用 12 条记录为上述函数获得了哪些值。

reducer 的数量和输出文件的数量不必总是相同,因为某些 reducer 可能没有输出记录(即使它收到了一些输入)。

运行此作业时,还要从浏览器中检查 hadoop UI,您应该会看到 reducer 的总数与您设置的数量一致。 检查您的 conf/mapred-site.xml,您可以找到要查看 Hadoop UI 的 URL:

<property>
  <name>mapred.job.tracker</name>
  <value>localhost:54311</value>
  <description>The host and port that the MapReduce job tracker runs
  at.  If "local", then jobs are run in-process as a single map
  and reduce task.
  </description>
</property>            

因此,如果您点击 localhost:54311 ,您应该会看到正在运行的作业列表。

关于即使我将 numReducetasks 设置为 2,Hadoop 也只会生成一个输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17162637/

相关文章:

hadoop - Mapreduce:捕获所有作业统计信息

linux - 授予 hdf 删除目录的权限

hadoop - 如何使 Hbase 对 Hadoop 2 中的名称节点故障具有弹性

java - AvroMultipleInputs-添加多个路径时出现问题

hadoop - 重命名 PIG 输出的部分文件

hadoop - java.lang.RuntimeException:java.lang.NoSuchMethodError: hive 壳中的org.apache.hadoop.hbase.client.Put.setDurability

java - hadoop namenode不在两个ec2实例的2个节点群集上运行:错误FSNamesystem初始化失败

java - Hadoop Mapper 类中的参数

java - 了解 GroupComparator

hadoop - 有没有办法使用 JDBC 作为 Hadoop 的 MapReduce 的输入资源?