青岛百度整站优化服务,网页美工设计图片,wordpress 菜单路径,微网站怎么做百度关键词排名MapReduce定义
MapReduce是一种分布式计算框架#xff0c;由Google公司2004年首次提出#xff0c;并贡献给Apache基金会。
MR版本
MapReduce 1.0#xff0c;Hadoop早期版本(只支持MR模型)MapReduce 2.0#xff0c;Hadoop 2.X版本#xff08;引入了YARN资源调度框架后由Google公司2004年首次提出并贡献给Apache基金会。
MR版本
MapReduce 1.0Hadoop早期版本(只支持MR模型)MapReduce 2.0Hadoop 2.X版本引入了YARN资源调度框架后除了支持MR还支持其他计算模型 MR V1 执行流程 JobTracker一直在等待JobClient提交作业;TaskTracker每隔3秒向 JobTracker发送心跳heartbeat询问有没有任务可做如果有让其派发任务给它执行;这是一道pull过程: slave主动向master拉生意; MR v2 vs MR v1 流程
MR v2运行机制的改进启动了YARN
增加了ResourceManager、NodeManager;ResourceManager(RM), 包含ApplicationManager、ResourceScheduler两种功能即把应用管理和资源调度分开NodeManager(NM)负责节点的运行当收到任务时启动Container完成map或reduce任务ResourceManager对应于v1的JobTrackerNodeManager对应于v1的TaskTracker
MR V2 执行流程
用户向YARN中提交应用程序其中包括MR App Mstr程序、启动ApplicationMaster的命令、数据等。ResourceManager为该应用程序分配第一个Container并与对应的NodeManager通信要求它在这个Container中启动应用程序的ApplicationMaster。ApplicationMaster首先向ResourceManager注册这样用户可以直接通过ResourceManager查看应用程序的运行状态然后它将为各个任务申请资源并监控它的运行状态直到运行结束即重复步骤4~7ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。一旦ApplicationMaster申请到资源后则与对应的NodeManager通信要求其启动任务。NodeManager为任务设置好运行环境包括环境变量、jar包、二进制程序等后将任务启动命令写到一个脚本中并通过运行该脚本启动任务各个任务通过某个RPC 协议向ApplicationMaster汇报自己的状态和进度以让ApplicationMaster 随时掌握各个任务的运行状态从而可以在任务失败时重新启动任务。在应用程序运行过程中用户可随时通过RPC 向ApplicationMaster 查询应用程序的当前运行状态。应用程序运行完成后ApplicationMaster 向ResourceManager 注销并关闭自己。 Resource Container, 资源容器
1是集群节点将自身内存、CPU、磁盘等资源封装在一 起的抽象概念;
2调度器根据应用的资源需求和集群各个节点的资源容 器进行调度
3RM的应用管理器负责接收作业协商获取第一个资源 容器用于执行应用的任务主体并为重启失败的应用主体分 配容器
4DN节点的应用主体负责通过协商从调度器获取资源容 器并跟踪这些容器的状态和应用执行的情况
Mapper任务流程 ① 读取输入文件解析成key、value对。对输入文件的每 一行k1,v1解析成多个key、value对(k2,v2)。每 个(k1、v1)键值对调用一次map函数
② 写代码逻辑将输入的k1、v1处理成新的k2、v2输出
③ 对输出的k2、v2进行分区如果不指定默认1个分区 分区号为0
④ 对不同分区的数据按照k2进行排序、分组。相同k2的 v2放到集合v2’ {v21 ,v22 ,v23 ,…v2n}中
⑤ (可选)分组后的数据进行归约combiner
⑥ Mapper的结果写入本地磁盘
Reducer任务流程
① 对多个map任务的输出按照不同的分区通过网络 复制到不同的reduce节点(取map端的结果数据)
② 一个Reduce任务处理一个分区数据
③ 对属于当前分区的多个map任务的输出结果进行合并 、排序。写reduce函数的代码对输入的k2,v2’处理 转换成新的k3、v3输出
④ 把reduce的输出保存到文件中。文件名为 part-r- 0000N
MapReduce核心概念
不同的Map任务之间不会进行通信不同的Reduce任务之间也不会发生任何信息交换用户不能显式地从一台机器向另一台机器发送消息所有的数据交换都是通过MapReduce框架自身去实现的 文件输入格式InputFormat
定义了数据文件如何分割和读取。InputFile提供了以下一些功能
选择文件或者其它对象用来作为输入定义InputSplits, 将一个文件分为不同任务为RecordReader提供一个工厂用来读取这个文件
例如有一个抽象的类FileInputFormat FileInputFormat从这个目录中读取 所有文件然后FileInputFormat将 这些文件分割为多个InputSplits。
输入数据分块InputSplits
InputSplit定义了输入到单个Map任务的输入数据
一个MapReduce程序被统称为一个Job可能有上百个任务构成InputSplit将文件分为128MB的大小
数据记录读入RecordReader
InputSplit定义了一个数据分块但是没有定义如何读取数据记录。RecordReader实际上定义了如何将数据记录转化为一个(key,value)对的详细方法并将数据记录传给Mapper类。
例如TextInputFormat提供了 LineRecordReader读入一个文 本行数据记录
Mapper
每一个Mapper类的实例生成了一 个Java进程负责处理某一个 InputSplit上的数据
V1中有两个额外参数OutputCollector以及Reporter前者收集中间结果后者获得环境参数以及设当前执行的状态。现在的版本V2用Context提供给每一个Mapper函数用来提供上面两个对象的功能
Combiner
对Map端的输出进行合并即合并相同key的键值对以便 减少partitioner数据通信开销。 可以不用指定如果指定合并类其性质类似于本地执行 的一个Reducer满足一定的条件才能够执行
Partitioner ShuffleSort Partitioner Shuffle 在Map工作完成之后每一个 Map函数的结果会被传输到对 应Reducer所在的节点此时用户可以提供一个Partitioner 类用来决定一个给定的(key,value)对传给哪个节点。 Sort 传输到每一个Reducer节点上的、将被所有的Reduce函数接 收到的Key,value对会被Hadoop自动排序即Map生成的结 果传送到某一个节点的时候会被自动排序
Shuffle
Shuffle过程就是从map端输出到reduce端输入之间的过程是Hadoop中最核心的部分 Shuffle的Map端
在Map任务全部结束之前进行归并归并得到大的文件放在本地磁盘文件归并时如果溢写文件数量大于预定值默认是3则可以再次启动Combiner少于3不需要JobTracker会一直监测Map任务的执行并通知Reduce任务来领取数据
Shuffle的Reduce端
Reduce任务通过RPC向JobTracker询问Map任务是否已经完成若完成则领取数据Reduce领取数据先放入缓存来自不同Map机器先归并再合并写入磁盘多个溢写文件归并成一个或多个大文件文件中的键值对是排序的当数据很少时不需要溢写到磁盘直接在缓存中归并然后输出给Reduce
Reducer
做用户定义的Reduce操作。 编程接口是Context。 一个分区对应一个Reducer。 每个分区对应一个输出文件 part-r-0000X。
文件输出格式OutputFormat
写入到HDFS的所有OutputFormat 都继承自FileOutputFormat 。 每一个Reducer都写一个文件到一 个共同的输出目录文件名是part- nnnnn其中nnnnn是与每一个 reducer相关的一个号partition id
MapReduce-任务执行总结
提交作业初始化作业分配任务执行任务更新任务执行进度和状态
推测式执行(speculative) –如果某个节点的任务执行过慢会启动备份任务
YARN定义
YARN 是Hadoop 2.0 中的资源管理系统 它是一个通用的资源管理模块可为 各类应用程序进行资源管理和调度。
YARN三大组件 ResourceManager –处理客户端请求
启动/监控ApplicationMaster监控NodeManager资源分配与调度
NodeManager –单个节点上的资源管理
处理来自ResourceManager的命令处理来自ApplicationMaster的命令
ApplicationMaster
数据切分为应用程序申请资源并分配给内部任务任务监控与容错
YARN资源调度器
FIFO先进先出调度器Fair Scheduler公平调度器Capacity Scheduler容量调度器