文章目录《数据密集型计算和模型》第四章的有关内容。主要有MapReduce模型简介、概念及原理、工作机制、优缺点;基于MapReduce模型的实现,改进等。
- 一、MapReduce模型简介
- 1. MapReduce模型概念及原理
- 2. MapReduce工作机制
- (1)MapReduce作业的工作机制
- 主节点(master)
- 数据分片(Data split)
- Map端
- Shuffle&Sort
- Reduce端
- (2)容错机制
- 工作节点容错
- 主节点容错
- 任务语义容错
- (3)负载平衡
- 作业调度
- 任务本地调度
- 任务备份
- 计数器
- 3. MapReduce模型的优缺点
- (1)优点
- (2)缺点
- 二、基于MapReduce模型的实现
- 1. Hadoop
- (1)hadoop简介
- 基于Hadoop的项目主要包括:
- Hadoop优点(*):
- (2)HDFS
- HDFS概念
- 文件 *** 作
- (3)Hadoop工作流
- (4)hadoop的容错
- 任务失败
- JobTracker失败
- TaskTracker失败
- 2. Phoenix
- 3. 其他实现
- 三、MapReduce模型的改进
- 1.Spark
- (1)Spark概念及架构
- (2)Spark抽象组成
- d性分布式数据集(RDD)
- 并行 *** 作
- 共享变量
- 2. Data Freeway 和 Puma
- (1)优化数据通道
- (2)优化数据的处理系统
- Puma2
- Puma3
- 3. Storm
- (1)Storm概念及原理
- (2)Storm组件
- Topologies
- Streams
- Stream Groupings
- 4. Nephele/PACTs
- 5. 其他改进工作
- (1)Barrier-less MapReduce
- (2)Map-Reduce-Merge
- (3)KPNs
- (4)Oivos
- 例子理解
1. MapReduce模型概念及原理将待解决的数据集分解 成若干个可以继续并行处理的小数据集,使分布式并行程序的编写变得更加简单。
- map:分解
- reduce:组合
最初的设计方案是:将MapReduce模型运行在一个低端的计算机组成的集群上。集群中每台计算机包含一个工作节点(Worker)、一个较快的主内存和一个辅助寄存器。
- 工作节点:用于数据的处理
- 主内存:用于暂存工作节点的输出数据
- 辅助寄存器:组成了集群的全局共享存储器,用于存储全部的初始数据和工作节点的输出数据。
- 并且计算机之间可以通过底层网络实现辅助存储器的同步远程互访。
- 一个MapReduce作业由map和reduce两个阶段组成。
- 每一个阶段包括 数据输入、计算处理 、 数据输出 三个步骤。
MapReduce模型将MapReduce作业(job)分成若干个任务(task)来执行。其中,MapReduce作业作为客户端执行的一个工作单元,主要包括 输入数据、MapReduce程序和配置信息。任务主要包括Map和Reduce两类。
- 主节点对每一个Map任务和Reduce任务的状态(空闲、工作中或完成)和工作节点(非空闲任务)的标志进行存储,并负责将Map任务产生的中间数据存储区域的位置信息传递到Reduce。
- 另外,主节点内部含有一个HTTP服务器,用于输出MapReduce执行的状态报告。
在文件被处理之前,MapReduce库首先将输入文件划分为M片,然后将每个数据片保存在多个节点上,在集群中形成多份拷贝。
MapReduce支持的几种格式输入:
- 输入分片与记录
- 文本输入
- 二进制输入
- 多种输入
- 数据库输入
- KeyValueInputFormat
数据划分结束后,MapReduce作业首先为每一个分片构建一个map任务(Map任务的数量由数据分片数量所决定,将数据分片成一一对应或多对一的关系)
然后由该任务执行使用者定义的Map函数
Map的工作流程:
- 数据输入:工作节点执行Map任务时,首先读取分片数据,从输入数据中抽取
对;然后将每个 对作为参数传递给Map函数。 - Partition:根据key或value及Reduce的数量来解决当前的
对的归属问题(即要放到哪个reduce里) - 数据溢出写(Data split):当Map任务的输出结果超出内存的存储能力时,需要在一定条件下将缓冲区中的数据临时写入磁盘,然后重新利用这块缓冲区。(超出内存后溢出才写入磁盘)
- 聚合(Merge)阶段:在任务完成之前,将溢出写文件合并成一个已经分区且排序的输出文件,使Map任务最终只输出一个溢出写文件。(任务执行结束后可以会产生多个溢出写文件,故需要合并增加速度)
- 写入本地存储器:最后,Map任务将其输出结果临时写入本地磁盘。作业完成后Map的输出结果将被删除(因为是MapReduce的中间结果)
Shuffle&Sort主要描述数据从Map任务输出到Reduce任务输入的过程,并确保每个Reduce任务的输入都按键排序。
- Shuffle&Sort过程需要保证数据完整地从Map端传输到Reduce端,并且在跨节点读取数据时,尽可能地减少对带宽的不必要消耗,同时还要减少磁盘I/O 对任务执行的影响。
- 复制阶段:Reduce进程启动数据Copy线程并行获取Map任务的输出文件(Map任务已结束,这些文件存储在本地磁盘中)。
- 聚合(Merge)阶段:当所有的Map输出被复制完成后,Reduce任务进入排序阶段。如果Map输出小于内存,输出结果被复制到Reduce工作节点的内存,否则被复制到磁盘。
- 聚合的三种形式:内存到内存、内存到磁盘、磁盘到磁盘
- Reducer的输入文件:经过多次聚合后生成一个存储于磁盘后内存中的文件,默认存放在磁盘中。
- 写入输出文件:最后,执行Reducer将输出结果直接写到分布式文件系统上。
- 主节点周期性地ping每个工作节点,如果在约定的时间范围内未接受到工作节点的返回信息,此工作节点将被主节点标记为失效。
- 当一个Map任务首先被工作节点A执行,之后由于工作节点A失效被调度到工作节点B执行,“重新执行”的信息会被发送到所有执行Reduce任务的工作节点,将需要从工作节点A读取数据的Reduce任务转向从工作节点B读取。
- 主节点会周期性地将其数据写入磁盘,并建立检查点,如果主节点任务失效,可从最后一个检查点启动另一个主节点进程。
- 目前采用的方法是,如果主节点失效,立即中止MapReduce运算,使用者通过此状态信息重新执行MapReduce *** 作。
- 由于Map和Reduce任务的输出是原子提交,并且每个作业中的任务将它的输出写到私有临时文件中(每个Map任务生成R个此类文件,每个Reduce任务生成一个此类文件)
- 当一个Map任务完成时,工作节点向主节点发送一个包含R个临时文件名的完成消息。
- 当Reduce任务完成时,Reduce工作节点进程以原子的方式把临时文件重命名为最终输出文件。
采用作业调度器管理使用者提交的多个作业,可最大限度实现使用者之间资源分配的公平性。
- FIFO先进先出:实现简单,集群调度开销较少,最大的缺点是在MapReduce模型中存在大作业情况下小作业响应时间较长。
- HOD:hadoop on Demand,改善对小作业的响应时间,但是较差的数据本地化和较低的资源利用率。
- 公平调度算法:最大限度的保证每个使用者都获得相等的资源份额
- 能力调度:针对多使用者调度,采用多个队列组成集群。
- 主节点在调度Map任务时,首先判断输入文件的位置信息,优先将Map任务分配到包含其输入数据拷贝的节点上执行。
- 如果失败,主节点将尝试在存有其输入数据拷贝的节点的附近机器上执行。
MapReduce模型将作业分解成多个可并行执行的任务。
当MapReduce代码的执行效率变慢时,会触发**“推测执行”机制**
推测执行机制的过程:
- 首先,启动某一作业的所有任务,等待作业运行一段时间后判断任务的平均进度
- 然后,重复启动一个比平均进度慢的任务作为推测任务
- 最后,当有一个任务成完成后,任何正在运行的重复任务都将被中止,如果原任务在推测任务之前完成,推测任务将被中止,否则,原任务被中止。
计数器是一种收集作业统计信息的有效手段。
- 第一,用于统计不同事件发生的次数
- 第二,对 *** 作的完整性进行检查。
- 在累加计数器值时,主节点首先检查重复运行的Map或者Reduce任务,避免重复累加。
- 硬件要求低
- 接口化
- 编程语言多样化
- 扩展性强
- 数据分析低延迟
- 无法达到数据实时处理
- 程序员负担增加
- I/O代价较高
(1)hadoop简介 基于Hadoop的项目主要包括:Hadoop是一个开源的可运行在大型分布式集群上的并行计算框架,主要由HDFS和MapReduce模型组成,其编程语言包括java、c、c++、Python、shell、PHP、ruby等
- Common:一组分布式文件系统和通用I/O的组件与接口。
- Avro:一种支持高效、跨语言的RPC以及永久存储数据的序列化系统。
- Pig:一种数据流语言和运行环境,运行在MapReduce和HDFS的集群上。
- Hive:一个分布式、按列存储的数据仓库,管理HDFS中存储的数据,并提供SQL的查询语言用于查询数据
- Hbase:一个分布式、按列存储的数据库,使用HDFS作为底层存储,同时支持MapReduce的批量式计算和点查询(随机读取)
- ZooKeeper:一个分布式、可用性高的协调服务。
- Sqoop:一个在数据库和HDFS之间高效传输的数据工具。
- 高可靠性
- 高扩展性
- 高效性
- 高容错性
HDFS是hadoop的分布式文件系统,与MapReduce结合使用。
- hadoop主要采用HDFS系统对文件进行创建、删除、移动以及重命名等 *** 作。
- HDFS架构由一个NameNode和大量DataNode组成,并且其内部通信采用标准的TCP/IP 协议。
NameNode
- NameNode是一个运行在单独机器上的软件,负责管理文件系统命名空间,维护系统内的所有文件和目录。
DataNode
- DataNode是一个运行在单独机器上的软件,通常以机架的形式进行组织,并且机架通过一个交换机将所有系统连接起来。
- DataNode主要用于响应来自HDFS客户机的读写请求和NameNode对块的创建、删除和复制命令。
hadoop的本质是一个批处理系统,数据被引入HDFS并分发到各个节点进行处理。
(3)Hadoop工作流hadoop工作流由客户端、JobTracker、TaskTracker、HDFS四个独立部分控制。
- 提交作业
- 复制资源
- 作业初始化
- 任务分配
- 执行任务
- 更新进度和状态
- 完成作业
- 子任务失败
- 流任务失败
- 子进程失败
- 任务挂起
一旦JobTracker失败整个任务需要人为重新启动
TaskTracker失败如果一个TaskTracker由于崩溃或运行过于缓慢而失败,将停止向JobTracker发送“心跳”,并且当TaskTracker超过时间间隔没有向JobTracker汇报心跳时,JobTracker则视之为死亡。
2. Phoenix 3. 其他实现- MapReduce.NET
- Cell MapReduce
- Skynet
- GridGain
- Misco
- Mars
- FPMR
- Ussop
Spark是一种基于MapReduce算法的分布式计算框架。
它不仅支持内存中数据集的保存和恢复,而且Spark启用了内存分布式数据集,除了能提供交互式查询外,还可以优化迭代工作的负载,实现MapReduce的迭代计算。
- 数据分布式管理
- 运行平台包括本地运行、Standalong、Mesoes、YARN等
- ·抽象组成。d性分布式数据集和并行 *** 作。
- Spark关联系统。
d性分布式数据集(RDD)Spark主要为并行计算提供了两个抽象的概念: d性分布式数据集 和 并行 *** 作。
d性分布式数据集是一个对象划分的只读集合,在d性分布式数据集的处理过程中,如果节点失败,可对丢失的数据集合进行成重建。
Spark构建d性分布式数据集合的方式有以下几种:
- 将文件输入一个共享文件系统(如HDFS)进行创建
- 通过在驱动程序中并行化一个scala集合,将集合进行切片划分,并发送到多个节点
- 通过转化现有d性分布式数据集,利用flatmap将一种类型元素组合的数据集转换成另一种元素组合的数据集。
- 改变现有d性分布式数据集的持久性。(默认情况下,d性分布式数据集具有惰性和短暂性)
改变持久性的两个过程:
- cache改变数据集的惰性
- Save评估数据集合并将它们写入分布式文件系统。
RDDs上的并行 *** 作主要包括:
- Reduce
- Collect
- Foreach
【广播变量】
Spark使程序员创建一个广播变量对象可以包装数据值,并且确定一次性分配给每一个工作节点。
【累加器】
工作节点可用 其统计关联 *** 作,而且其参数值只有驱动程序可以访问。
2. Data Freeway 和 Puma (1)优化数据通道优化后的数据通道为Data Freeway,它包含 Scribe、 Calligraphus、 Continuous Copier、 PTail 四个组件。
(2)优化数据的处理系统 Puma2- 首先,PTail将数据以流的方式传递给Puma2
- 然后,Puma2以聚合的方式并且以时间为序列对流消息进行 *** 作
- 最后,Puma2为处理后的每一条消息发送“增加” *** 作到Hbase,并将数据存储到Hbase。
Puma2的优点:
- 架构简单易于维护
- 采用的对称结构易于集群的扩展和故障处理
Puma2的缺点:
- Hbase的“增加” *** 作开销大
- Hbase不支持复杂的聚合 *** 作
- 在故障时会产生少量的重复数据。
改进:
- 聚合 *** 作由Hbase转向本地内存
- 通过聚合key符puma3中的数据进行分片,用于支持内存中的聚合 *** 作。
- Hbase只作为持久化存储
Storm是一个分布式实时计算系统,对外提供了一系列用于批处理的组件,可有效的应用于信息流处理、连续计算和分布式远程过程调用。
- Hadoop集群运行MapReduce Job ,而Storm运行Topologies。
- Job和Topologies存在的差异主要是,MapReduce Job最终会被完成,而Topologies进程将一直运行,除非该进程被“杀死”。
- Nephele使用专用协议保证各项功能的效率,通过通信、同步和容错机制将PACT程序转换成Nephele数据流,进而实现不同类型数据流的优化处理。
- Nephele计算模型的思想是为某一个作业分配合适的资源,而不是为某个固定的资源分配任务。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)