Hadoop Reducer个数设置

2019-03-28 13:06|来源: 网络

在默认情况下,一个MapReduce Job如果不设置Reducer的个数,那么Reducer的个数为1。具体,可以通过JobConf.setNumReduceTasks(int numOfReduceTasks)方法来设置Reducer的个数。那么,如何确定Reducer的个数呢,Hadoop documentation 推荐了两个计算公式:
 
•0.95 * NUMBER_OF_NODES * mapred.tasktracker.reduce.tasks.maximum
•1.75 * NUMBER_OF_NODES * mapred.tasktracker.reduce.tasks.maximum

其中,NUMBER_OF_NODES 代表集群中计算节点的个数,mapred.tasktracker.reduce.tasks.maximum代表每一个节点所分配的Reducer任务槽的个数。

更多Hadoop相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

相关问答

更多
  • 我认为你必须在你的reduce方法中抛出IOException和InterruptedException,即 public class sentreducer extends Reducer{ @Override public void reduce(LongWritable key,Iterable value,Context context) throws IOException, Interrupte ...
  • 问题1:这是否意味着在Reducer1上,reduce方法将被调用1次并且在Reducer2上,reduce方法将被调用3次? 是。 请记住,这在减速器“尝试”中并不适用。 因此,如果一个reducer失败,计数可能会因重试而有所不同。 但是在一个JVM中你的主张是有效的。 每个不同的密钥只调用一次reduce方法吗? 是。 在每次调用期间,即使有数千万条记录,values参数是否包含具有相同键的所有记录? 是的,它们是流式传输的(因此是可迭代的)。 因此,如果有数百万条记录,这将从本地硬盘读取。 Ques ...
  • 它是实现正确的接口还是为reducer实现扩展正确的类。 例外情况表明实现方法中的包差异与使用相比(新旧vso hadoop api) Is it implementing the correct interface or extending the correct class for the reducer implementation. The exception says a package difference in the implementation method required vs the ...
  • namenode和datanode是HDFS进程而不是MapReduce。 我假设您有3个任务跟踪器节点。 其中一个将运行它。 无法保证哪一个。 Hadoop通常将计算移动到它所需的数据附近,但对于减速器,它们从映射器中提取数据而不是HDFS。 您可以说Hadoop会选择负载较少的节点,并且至少有一个reduce槽。 The namenode and datanode are HDFS processes not MapReduce. I assume you have 3 task tracker nod ...
  • 这可能发生在作业仅检测到本地文件系统的情况下,它使用LocalFileSystem API与本地文件系统中的文件进行交互。 请参考以下链接, 使用MiniDFSCluster单元测试hadoop hdfs着作 这是我们在开发环境中开发的mapreduce / hdfs代码的单元测试选项之一。虽然在hadoop clsuter中部署相同的代码,但输入文件将在HDFS位置。 This probably happens in the scenario where the job only detects the ...
  • 我认为你需要实施 你自己的输出格式类和 你自己的RecordWriter会将不同的值写入不同的地方 所以你的SomeOutputWriter将在其getRecordWriter()方法中返回new SomeRecordWriter("SomeOutputPrefix") ,而SomeRecordWriter会将不同的值写入不同的文件夹。 I think you need to implement your own output format class and your own RecordWriter w ...
  • Streaming使用旧的API( org.apache.hadoop.mapred ) - 但mapper和reducer类扩展了新的API类( org.apache.hadoop.mapreduce )。 尝试更改映射器以实现org.apache.hadoop.mapred.Mapper和reducer以实现org.apache.hadoop.mapred.Reducer ,例如: package courseproj.example; // Mapper: emits ("article", 1) ...
  • 这个问题对我来说有点不清楚。 但我想我很清楚你想要什么。 首先,如果每次调用reduce时都没有做任何特殊的事情,它只会获得一个具有一个或多个值的单个键(通过迭代器)。 我的猜测是,你想确保每个reducer只有一个“键值对”。 基本上有两种方法可以做到这一点: 确保在映射器中输出的所有键都是唯一的。 因此,对于每个键,只有一个值。 强制reducer通过强制一个组比较器来完成这一操作,该组比较器将所有键简单分类为不同。 所以,如果我正确理解你的问题。 您应该实现一个GroupComparator,它只是声 ...
  • 我按原样使用了您的代码,并在进行了3次修改后进行了编译: 在以下语句中,将filename更改为fileName ( fileName 'N'大写) 更改: word.set(itr.nextToken().toLowerCase().replaceAll("[^a-z]+","") +" "+ filename); 至: word.set(itr.nextToken().toLowerCase().replaceAll("[^a-z]+","") +" "+ fileName); 导入的包Gene ...
  • 在您的情况下,由于分区1和分区3都具有密钥“WHO”,因此可以保证两个分区转到同一个reducer。 更新 在hadoop中,任何时候任务mapred.tasktracker.reduce.tasks.maximum的最大减少任务数由mapred.tasktracker.reduce.tasks.maximum属性决定。 并且通过-D mapred.reduce.tasks=n设置MapReduce作业的reducers数量 当存在多个reducer时,map任务会对其输出进行分区,每个reduce会为每个 ...