MapReduce是一个软件框架,可方便地编写应用程序,以并行的方式在数千商用硬件组成的集群节点中处理数TB级的数据,并且提供了可靠性和容错能力。
MapReduce处理模型包括两个独立的步骤:
1) 第一步:并行Map阶段,输入数据被分割成离散块以便可以单独处理
2) 第二步:Reduce阶段,汇总Map阶段的输出 生成预期的结果
其主要缺点:
1) 可扩展性:
- JobTracker内存中保存用户作业的信息
- JobTracker使用的是粗粒度的锁
2)可靠性和可用性
- JobTracker失效会丢失集群中所有的运行作业,用户需手动重新提交和恢复工作流
3)对不同编程模型的支持
- HadoopV1以MapReduce为中心的设计虽然能支持广泛的应用,但是并不适合所有大型计算
YARN: Yet Another Resource Negotiator
YARN的基本思想:
将JobTracker的两个主要功能分离成两个单独的组件:一个全局的ResourceManager和每个应用对应的ApplicationMaster。
1) 可扩展性
2) 可维护性
3) 多租户
4) 位置感知
5) 高集群使用率
6) 安全和可审计的操作
7) 可靠性和可用性
8) 对编程模型多样性的支持
9) 灵活的资源模型
10) 向后兼容
1)ResourceManager
- 一个纯粹的调度器
- 根据应用程序的资源请求,严格限制系统的可用资源
- 在保证容量、公平性及服务等级的情况下,优化集群资源利用率,让所有资源都得到充分利用
- 有可插拔的调度器来应用不同的调度算法,如注重容量调度还是公平调度
2)ApplicationMaster
- 负责与ResourceManager协商资源,并和NodeManager协同工作来执行和监控Container以及它们的资源消耗
- 有责任与ResourceManager协商并获取合适的资源Container,跟踪它们的状态,以及监控其进展
- 在真实环境中,每一个应用都有自己的ApplicationMaster实例,但是也可为一组应用提供一个ApplicationMaster,比如Pig或者Hive的ApplicationMaster
3)资源模型
- YARN提供了通用的应用资源模型
- 一个应用可以通过ApplicationMaster请求非常上体的资源
-- 资源名称(包括主机名、机架名以及复杂的网络拓扑)
-- 内存量
-- CPU
-- 其他资源:磁盘和网络IO等
4)ResourceRequest和Container
- 一个应用程序通过ApplicationMaster请求特定的ResourceRequest来满足资源需求
- Schedule会分配一个Container来响应资源请求
- Container是一种资源分配形式,为应用程序授予在特定主机上使用资源(如内存、CPU)的权利
- ApplicationMaster取走Container,并且交给NodeManager,NodeManager会利用相应的资源来启动Container的任务进程