从MapReduce框架的执行流程,我们知道,输入文件会被分成多个splits,每个split对应一个Mapper,所以Mapper的数量由splits的数目决定。
而Reducer的数目可以通过job.setNumReduceTasks()函数来设置,默认情况下只有一个,有些时候,Reducer只有一个并不是性能最高,因此我们究竟设置多少个Reducer合适呢?
在hadoop中,有个叫做slots的概念,Mapper或者Reducer执行时都得获得一个splot才能继续,否则只能等待。Slot可以理解为TaskTracker能并发执行多少个任务。
Slot分为mapper slot 和Reducer slot,分别对应最大可执行的mapper数和reducer数。用户可以通过修改mapred-site.xml文件的mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum来设置slot的值,默认为2.
集群中reducer slot的总数==总结点数*每个节点的reducer slot数目,每个节点的reducer slot数目由mapred.tasktracker.reduce.tasks.maximum来确定。
Reducer的最佳的数目值与总的reducer slot数目有关,reducer的最佳数目值应该略小于reducer slot的总数。这样做的目的:首先让所有的reducer可以并行执行,其次对于未分配的slot,可以在reducer发生故障时,立即分配给新创建的Reducer.
当然,在设置Reducer数目的时候还得考虑Mapper的数目。按照MapReduce的思想,应该Mapper的数目>=Reducer的数目。
假设Mapper的数目<Reducer的数目,那么按照MapReduce的流程,就会有Reducer剩余,剩余的Reducer根本收不到来自Mapper的输入,白白浪费资源。
因此,不管如何,Reducers<Mappers是必不可少的前提。
当然,MapReduce的值也不是随意设定的,他和机器的内存以及处理器核数等等都有关系,真是的集群环境需要考虑的还有很多。
相关推荐
redux中reducer 为什么最好是纯函数.md
Vuex-reducer-master可能是一个关于如何在Vuex中实现Redux-style Reducer的示例项目,它可能包含了如何组织Action和Mutation以实现更有序的状态管理的代码结构和最佳实践。通过学习和实践这样的项目,开发者可以更好...
它在生产模式下正确捆绑了React,并优化了构建以获得最佳性能。 生成被最小化,并且文件名包括哈希值。 您的应用已准备好进行部署! 有关更多信息,请参见关于的部分。 npm run eject 注意:这是单向操作。 ...
它在生产模式下正确捆绑了React,并优化了构建以获得最佳性能。 生成被最小化,并且文件名包括哈希值。 您的应用已准备好进行部署! 有关更多信息,请参见关于的部分。 yarn eject 注意:这是单向操作。 eject ...
它在生产模式下正确捆绑了React,并优化了构建以获得最佳性能。 生成被最小化,并且文件名包括哈希值。 您的应用已准备好进行部署! 有关更多信息,请参见关于的部分。 yarn eject 注意:这是单向操作。 eject ...
此外,它还遵循 Redux 的最佳实践,确保了 reducer 的纯性和可测试性。 在 `redeuceur-master` 压缩包文件中,可能包含了 `redeuceur` 的源码、示例项目、文档和其他辅助资源。你可以通过查看这些内容来深入了解...
而"Classy Redux"是一个专门针对Redux设计的库,它提供了一种以类(Class)方式来编写Redux Reducers的方法,这与Redux原生的函数式Reducer有所不同。这种面向对象的编程风格对于习惯于使用ES6 Class的开发者来说...
它在生产模式下正确捆绑了React,并优化了构建以获得最佳性能。 生成被最小化,并且文件名包括哈希值。 您的应用已准备好进行部署! 有关更多信息,请参见关于的部分。 yarn eject 注意:这是单向操作。 eject ...
Redux 是一个广泛应用于JavaScript应用程序,特别是React应用的状态管理库。"redux-master"可能是指一个包含Redux...通过这个压缩包,你可以深入理解Redux的基本架构和最佳实践,从而更好地管理你的React应用的状态。
在React和Redux的世界里,构建一个项目的最佳设置是至关重要的,因为它可以影响到开发效率、代码维护性以及项目的可扩展性。"react-用于启动一个项目的最佳ReactRedux设置"是针对这一需求的一个资源集合,旨在提供...
通过分析和学习这个源码,开发者可以了解到如何在微信小程序中实现状态管理的最佳实践,以及如何将Redux的思维模式应用到非React环境。这有助于提升小程序的可维护性和代码复用性,同时也能更好地组织复杂的业务逻辑...
- **Reducers**:结合这两个Action,创建了一个Reducer,Reducer会根据Action的类型来决定如何更新状态。 4. **触发Actions**: - **Dispatching**:在React组件中,通过调用`dispatch`函数来触发Actions,这个...
在IT行业中,归一化还原器(Normalized Reducer)是一种在状态管理库,如Redux,中常见的优化策略。...通过学习这个示例,我们可以更好地理解和实践状态管理的最佳实践,为我们的项目带来更高效、可维护的代码。
组织 Reducer 部分会深入探讨 reducer 的设计和最佳实践: - Reducer 基础概念和结构。 - Reducer 的逻辑拆分。 - Reducer 重构的最佳实践。 - 使用 combineReducers 方法组合多个 reducer。 - State 范式化:如何...
Redux 提供 `combineReducers` 工具函数,用于合并多个 Reducer,形成一个大的 Reducer,管理复杂的 state 结构,如 `{religious: "", food: {}}`。 4. **React 与 Redux 的集成**: - 使用 `Provider` 组件包裹...
4. **Reducer阶段**:Reducer接收所有与特定类别相关的键值对,计算每个类别的文档总数、每个单词的总频数以及每个单词在特定类别下的频数,进而求得先验概率和条件概率。 5. **模型构建**:Reducer输出的模型参数...
它在生产模式下正确捆绑了React,并优化了构建以获得最佳性能。 生成被最小化,并且文件名包括哈希值。 您的应用已准备好进行部署! 有关更多信息,请参见关于的部分。 yarn eject 注意:这是单向操作。 eject ...
它在生产模式下正确捆绑了React,并优化了构建以获得最佳性能。 生成被最小化,并且文件名包括哈希值。 您的应用已准备好进行部署! 有关更多信息,请参见关于的部分。 npm run eject 注意:这是单向操作。 ...
它在生产模式下正确捆绑了React,并优化了构建以获得最佳性能。 生成被最小化,并且文件名包括哈希值。 您的应用已准备好进行部署! 有关更多信息,请参见关于的部分。npm run eject 注意:这是单向操作。 eject ,...
在React Native应用中集成Redux,可以有效地管理应用的状态,实现数据...总的来说,React Native结合Redux可以构建出高效、可维护的大型应用,它强调单向数据流和状态管理的最佳实践,是现代前端开发中的一个常用模式。