一、分布式计算框架MapReduce介绍(计算向数据移动)
1.1、为什么叫MapReduce
MR原语:map + reduce(MapTask & ReduceTask)输入(格式化k,v)数据map映射成一个中间数据集(k,v)reduce (sql)
“相同”的key为一组,调用一次reduce方法,方法内迭代这一组数据进行计算 (类似的sql)
1.2、计算框架MR(wordcount 单词统计)
Hadoop 1.x -- mr 1.x
(1)Map:
- 读懂数据
- 映射为KV模型
- 并行分布式
- 计算向数据移动
(2)Reduce:
- 数据全量/分量加工(partition/group)
- Reduce中可以包含不同的key
- 相同的Key汇聚到一个Reduce中
- 相同的Key调用一次reduce方法
- 排序实现key的汇聚
K,V使用自定义数据类型:
- 作为参数传递,节省开发成本,提高程序自由度
- Writable序列化:使能分布式程序数据交互
- Comparable比较器:实现具体排序(字典序,数值序等)
1.3、MRV1角色
(1)JobTracker
- 核心,主,单点
- 调度所有的作业
- 监控整个集群的资源负载
(2)TaskTracker
- 从,自身节点资源管理
- 和JobTracker心跳,汇报资源,获取Task
(3)Client
- 作业为单位
- 规划作业计算分布
- 提交作业资源到HDFS
- 最终提交作业到JobTracker
弊端:
- JobTracker:负载过重,单点故障
- 资源管理与计算调度强耦合,其他计算框架需要重复实现资源管理
- 不同框架对资源不能全局管理
1.4、MRv2:Hadoop YARN 解耦资源与计算
(1)角色介绍
ResourceManager:
- 主,核心
- 集群节点资源管理
NodeManager:
- 与RM汇报资源
- 管理Container生命周期
- 计算框架中的角色都以Container表示
Container:【节点NM,CPU,MEM,I/O大小,启动命令】:
- 默认NodeManager启动线程监控Container大小,超出申请资源额度,kill
- 支持Linux内核的Cgroup
1.3、分布式资源管理框架YARN:负责集群资源的管理和调度
YARN:Hadoop 2.0新引入的资源管理系统,直接从MRv1演化而来的
核心思想:将MRv1中JobTracker的资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现
•ResourceManager:负责整个集群的资源管理和调度
•ApplicationMaster:负责应用程序相关的事务,比如任务调度、任务监控和容错等
优点:YARN的引入,使得多个计算框架可运行在一个集群中
•每个应用程序对应一个ApplicationMaster
•目前多个计算框架可以运行在YARN上,比如MapReduce、Spark、Storm等
(1)MapReduce On YARN
将MapReduce作业直接运行在YARN上,而不是由JobTracker和TaskTracker构建的MRv1系统中
用法:
基本功能模块:
•YARN:负责资源管理和调度
•MRAppMaster:负责任务切分、任务调度、任务监控和容错等
•MapTask/ReduceTask:任务驱动引擎,与MRv1一致
每个MapRaduce作业对应一个MRAppMaster:
•MRAppMaster任务调度
•YARN将资源分配给MRAppMaster
•MRAppMaster进一步将资源分配给内部的任务
MRAppMaster容错:
•失败后,由YARN重新启动
•任务失败后,MRAppMaster重新申请资源