浅尝批处理系统

背景

Google发表了MapReduce计算范型及其框架的论文。MapReduce和并行数据库系统(MPP)各有优劣并且两者有一定的互补和学习。与传统MPP架构相比,MapReduce更适合非结构化数据的ETL处理类操作,并且可扩展性和容错性占优,但是单机处理效率较低。
DAG计算模型是MapReduce计算机制的一种扩展。MapReduce对于子任务之间复杂的交互和依赖关系缺乏表达能力,DAG计算模型可以表达复杂的并发任务之间的依赖关系。
Spark本质上是DAG批处理系统,其最能发挥特长的领域是迭代式机器学习。

MapReduce计算模型与架构

计算模型

MapReduce计算任务的输入是Key/Value数据对,输出也以Key/Value数据对方式表示。开发者要根据业务逻辑实现Map和Reduce两个接口函数内的具体操作内容,即可完成大规模数据的并行批处理任务。

实例一:单词统计

map(String key, String value):
    //key: 文档名
    //value: 文档内容
    for each word in value:
        Emit Intermedia(w, "1");

reduce(String key, Iterator values):
    //key: 单词
    //value: 出现次数列表
    int result = 0;
    for each v in values:
        result += ParseInt(v);//累加values值
    Emit(AsString(result));

实例二: 链表反转

map(String source_url, Iterator outlinks):
    //key: 网页url
    //value: 出链列表
    for each outlink o in outlinks:
        Emit Intermedia(o, source_url)

reduce(String target_url, Iterator source_urls):
    //key: target网页url
    //values: source网页url
    list result = [];
    for each v in source_urls:
        Result.append(v);
    Emit(AsString(result));

实例三: 页面点击统计

map(String tuple_id, String tuple):
    Emit Intermedia(url, "1");

reduce(String url, Iterator list_tuples):
    int result = 0;
    for each v in list_tuples:
        result += ParseInt(v);
    Emit(AsString(result));

系统架构

处理流程:

  1. MapReduce框架将应用的输入数据切分成M个模块,典型的数据块大小为64MB,然后可以启动位于集群中不同机器上若干程序。
  2. 全局唯一的主控Master以及若干个Worker,Master负责为Worker分配具体的Map任务或Reduce任务并做一些全局管理。
  3. Map任务的Worker读取对应的数据块内容,从数据块中解析一个个Key/Value记录数据并将其传给用户自定义的Map函数,Map函数输出的中间结果Key/Value数据在内存中缓存
  4. 缓存的Map函数产生的中间结果周期性写入磁盘,每个Map函数中间结果在写入磁盘前被分割函数切割成R份,R是Reduce个数。一般用key对R进行哈希取模。Map函数完成对应数据块处理后将R个临时文件位置通知Master,Master再转交给Reduce任务的Worker
  5. Reduce任务Worker接到通知时,通过RPC远程调用将Map产生的M份数据文件pull到本地。(只有所有Map函数完成,Reduce才能执行)。Reduce任务根据中间数据的Key对记录进行排序,相同key的记录聚合在一起
  6. Reduce任务Worker遍历有序数据,将同一个Key及其对应的多个Value传递给用户定义的Reduce函数,reduce函数执行业务逻辑后将结果追加到Reduce对应的结果文件末尾
  7. 所有Map、Reduce任务完成,Master唤醒用户应用程序

为了优化执行效率,MapReduce计算框架在Map阶段还可以执行Combiner操作。

hadoop的MapReduce运行机制基本与google的类似。

不同的是,hadoop采用https协议来进行数据传输,并采用归并排序对中间结果进行排序。
Google的MapReduce框架支持细粒度的容错机制。Master周期性Ping各个Worker,如果Worker没有响应,则认为其已经发生故障。
如果Master故障则单点失效,重新提交任务。

MapReduce不足

  1. 无高层抽象数据操作语言
  2. 数据无Schema及索引
  3. 单节点效率低下
  4. 任务流描述方法单一

优势:

  1. 数据吞吐量高
  2. 支持海量数据处理的大规模并行处理
  3. 细粒度容错
    但是不适合对时效性高的应用场景,比如交互查询或流处理,也不适合迭代计算类的机器学习及数据挖掘类应用。

由于:

  1. 启动时间长
  2. 多处读写磁盘及网络传输

DAG计算模型

有向无环图的简称。在大数据处理领域,DAG计算模型是将计算任务在内部分解成若干子任务,这些子任务之间由逻辑关系或运行先后顺序等因素被构建成有向无环图结构。

DAG计算系统三层结构

  • 最上层是应用表达层,通过一定手段将计算任务分解成若干子任务形成的DAG结构
  • 最下层是物理机集群,由大量物理机器搭建的分布式计算环境
  • 中间层是DAG执行引擎层,将上层以特殊方式表达的DAG计算任务通过转换和映射,将其部署到下层的物理机集群中运行

Dryad

微软DAG计算系统,dryad在实现时以共享内存、TCP连接以及临时文件的方式进行数据传输

Dryad整体架构

job manager负责将逻辑形式存在的DAG描述映射到物理机。NS负责维护集群中当前可以的机器资源。Daemon守护进程作为JM在计算节点上的代理,具体负责子任务的执行和监控。

FlumeJava和Tez

  • FlumeJava构建了java库,本质上是在MapReduce基础上的DAG计算系统,图中每个节点可以看作单个MapReduce子任务。
  • Tez使用Map任务或者Reduce任务作为DAG的图节点,图节点的有向边是数据传输通道。Tez消除Map阶段中间文件输出到磁盘过程以及引入Reduce-Reduce结构改进措施提升执行效率
时间: 2024-11-19 20:07:10

浅尝批处理系统的相关文章

浅尝异步IO

关于异步IO 记得几年前使用MFC编程的时候,曾经使用过windows的异步socket. 当在socket句柄上设置好关心的事件(如,可读.可写)后,如果事件发生,则指定的窗口会收到一个指定的消息. int WSAAsyncSelect(SOCKET s, HWND hWnd, unsigned int wMsg, long lEvent); 然后窗口例程取得消息,对socket进行处理(如,recv.send). linux也支持类似的异步IO(不局限于socket),如果事件发生,指定的进

浅尝数据库并发控制

        数据库是一个共享资源,可以供多个用户使用.然而,对于大多数程序员来说,单处理机系统是我们接触最多的系统,运行在其上的数据库事务也并非真正意义上的并行,实际上它是这些并行事务的并行操作轮流交叉运行,这种并行执行方式称为交叉并发方式(Interleaved Concurrency),这样可以减少处理机的空闲时间,提高系统的效率.而在多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现真正意义上的并行运行,而这种并行执行方式,我们称之为同时并行方式(Simu

浅尝Silverlight2.0的美味

问题描述 Silverlight2.0的发布了,迫不及待安装完,感受一下新版的出彩.安装成功安装完Silverlight2之后,首先打开VS2008,打开新建项目对话框,可以看到ProjectTypes的树下出现一个Silverlight,Templates中选择SilverlightApplication项目模板.当然,相应的我们需要指定ProjectName和ProjectLocation.创建Application接着我们会看到弹出的对话框,这里我们可以选择创建一个ASP.NETWebSi

Struts Validation框架浅尝2

javascript 支持       在web应用中,使用javascript的机会非常多.虽然不少书上提及客户有可能从浏览器关闭js的执行,但是要想完全的不使用它,目前看来好像还不行.比如一些复杂的UI是必须通过js来实现的(如下拉式菜单等等).那么validation框架支不支持客户端的js验证呢?答案是:当然.具体做法是: -          在页面html:form标签内部添加onsubmit="return validateEditForm(this);"(具体的语法:v

WCF浅尝

1.首先先建立一个WCF服务应用程序 2.再建立一个宿主程序,这里用控制台,添加服务引用,这里会报错: 点击页面确定,回到添加服务页面 点击箭头有如下内容: 这里告诉我们问题的所在,我们只要重新生成解决方案就行了. 好,重新生成解决方案,ok,问题解决,添加引用服务成功.  3.在控制台程序里启动服务: static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(WcfService2.Se

71期:央视《新闻联播》聚焦阿里云

云周刊 本周要点 查看更多 [活动结束]直播活动:<游族网络,如何运维千台以上游戏云服务器> 第2期在线培训本周来袭!本期邀请的是来自上海游族网络的运维总监李志勇,为我们分享"如何运维千台以上游戏云服务器".想了解云时代怎么做运维,这一场分享可以帮到你.同时,还有美女主持人,陪你一起听课互动,快来! 产品动态 查看更多 央视<新闻联播>聚焦阿里云科技创新 [活动]阿里云正在找新锐初创企业 送他们9个城市广告位 [活动]云栖悬赏:长期征集优质技术问答 工单参考 查

浅谈TypeScript

  TypeScript为JavaScript的超集(ECMAScript6), 这个语言添加了基于类的面向对象编程.TypeScript作为JavaScript很大的一个语法糖,本质上是类似于css的less.sass,都是为了易于维护.开发,最后还是编译成JavaScript.趁着周末的时间,浅尝了Typescript,下面是总结的一些特性.   Types 所有类型都是any类型的子类型,其他类型被分成元类型(primitive types)和对象类型(object types). 1.

Hadoop的分布式架构改进与应用

Hadoop的分布式架构改进与应用 Baofeng Zhang@zju  转载请注明出处:http://blog.csdn.net/zbf8441372  1.  背景介绍        谈到分布式系统,就不得不提到Google的三驾马车:GFS[1],MapReduce[2]和BigTable[3].虽然Google没有开源这三个技术的实现源码,但是基于这三篇开源文档, Nutch项目子项目之一的Yahoo资助的Hadoop分别实现了三个强有力的开源产品:HDFS,MapReduce和HBas

手把手教你在ASP中使用SQL语句

sql|语句 五花八门的SQL产品多得要命,或许你早顾不得其它甩开袖子就动手干了.但你要同时采用ASP和SQL的话就可能会头晕.MySQL.SQL Server和mSQL都是绝佳的SQL工具,可惜,在ASP的环境下你却用不着它们来创建实用的SQL语句.不过,你可以利用自己掌握的Access知识以及相应的Access技能,再加上我们的提示和技巧,相信一定能成功地在你的ASP网页中加入SQL. 1. SELECT 语句 在SQL的世界里,最最基础的操作就是SELECT 语句了.在数据库工具下直接采用