zoukankan      html  css  js  c++  java
  • 传统MapReduce框架

    传统的MapReduce框架是google于2004年在论文:“MapReduce: Simplified Data Processing on Large Clusters”提出的,该框架把一些数据密集型应用的数据处理过程简化抽象成map和reduce两个阶段,用户在设计分布式程序时,只要实现 map()和reduce()两个函数,至于其它细节,例如数据分片,任务调度,机器容错,机器间通信等,都交由MapReduce框架处理。随着技术的 发展,在传统MapReduce框架的基础上,出现了一些针对特殊应用的MapReduce框架,主要有以下几种:

    (1)       支持迭代MapReduce的Twister和Haloop(参见我的博文:迭代式MapReduce框架介绍).

    (2)       支持多阶段流式计算的Sector/Sphere(参见我的博文:流式MapReduce实现Sector/Sphere ‎).

    (3)       支持DAG(Directed Acyclic Graph)的Dryad和Cascading(参见文章:DryadCascading 以及 Cascading的主页).

    (4)        MapReduce与Database结合的产物:HadoopDBgreenplum.

    本文主要讲解当下较为出名的传统MapReduce开源实现。现在有非常多的开源MapReduce框架实现, 最出名的莫过于Java实现版本Hadoop。 实际上,它属于重量级的实现版本(代码量大),要理解其细节或者对其进行改进需要很大工作量。 为了克服重量级实现存在的缺陷,一些轻量级的版本出现了,如erlang实现版本Disco,Python实现版本micemeat,bash版本 bashreduce等。

    本文主要介绍Disco,粗略讲解micemeat和bashreduce。

    传统MapReduce实现之Disco

    1、概述

    Disco是一个轻量级的MapReduce框架实现,核心模块使用Erlang语言实现,外部接口为易于编程的Python。同Hadoop一 样,拥也有自己的分布式文件系统DDFS,不过DDFS是与计算框架高度耦合的。 Disco由诺基亚研究中心开发,用于处理实际应用中的大规模数据。

    2、Disco的总体设计架构

    Disco由分布式存储系统DDFS(Disco Distributed File System)和MapReduce框架组成,本节主要介绍Disco的总体设计架构,下面一节介绍DDFS。

    Disco也是master/slave架构:

    Disco master从client端接收作业,并将它们添加到作业队列中,以便进行调度。

    Client processes是一些python程序,它们使用函数disco.job()向master提交作业。

    Worker supervision是由master启动的,每个节点启动一个,用于监控该节点上python worker的运行情况。

    Python worker用于执行用户提交的作业。

    输入文件是通过http获取的,但若要读取的文件在本地,直接从磁盘上获取即可。为了能够从个远程节点上获取数据,每个节点上进行一个httpd后台进程。

    3、DDFS的架构

    DDFS是嵌入到Disco中的,目前只有一个master节点(存在单点故障)。每个存储节点由一组磁盘或者卷宗组成(vol0..volN), 它们分别挂载在$DDFS_ROOT/vol0 … $DDFS_ROOT/volN。每个卷宗下面有两个文件,分别为tag 和 blob,分别用于存储标记(tag,相当于key)和标记对应的值(value)。DDFS会监控每个节点上的磁盘使用情况,并每隔一段时间进行负载均 衡。

    4、分布式索引Discodex

    Discodex是专门为Disco设计的分布式索引系统。

    Discodex实际上是一个分布式key/value存储系统。通过某一个key,可以检索出与该key相关的所有value。Discodex对外提供了一些ReST API,用户通过这些API检索数据。

    当我们使用Discodex时,实际上是运行了一个HTTP 服务器,它把ReSTful url映射成Disco作业。        Discodex在DDFS上存储key和value值,其中每个文件都是分布式的,称为index,chunks或者ichunks。

    5、参考资料

    (1)官方网址:http://discoproject.org/

    (2)安装方法:http://blog.csdn.net/socrates/archive/2009/05/26/4217641.aspx

    传统MapReduce实现之micemeat

    1、介绍

    micemeat是MapReduce的python实现,整个代码由一个python文件构成(<13KB),它仅依赖于python标准库,非常容易部署,同时它还支持以下功能:

    (1)       容错:任何一个slave可以随时加入或者离开集群而不会影响其他slave。

    (2)       安全:micemeat会对每一条连接进行授权验证,防止未经授权的代码被执行。

    2、参考资料:

    官方网址:http://remembersaurus.com/mincemeatpy/

    传统MapReduce实现之bashreduce

    1、  介绍

    Bashreduce采用bash脚本语言编写,整合了常用的shell命令,如sort, awk, ssh, netcat等。目前仅在ubuntu/debian系统上进行了测试。

    2、  参考资料

    (1)       https://github.com/erikfrey/bashreduce

    另外,还有Perl实现RobotArmy和ruby实现skyner

    参考资料:

    (1)    RobotArmy官方主页:http://bulletsweetp.github.com/robotarmy/

    (2)    RobotArmy论文:RobotArmy: A Casual Framework for Massive Distributed Processing

    (3)    Skynet官方主页:http://skynet.rubyforge.org/

  • 相关阅读:
    Java并发辅助类的使用
    使用List需要注意的点
    构造函数、静态变量、代码块执行顺序
    TreeMap源码分析
    大战红黑树
    关于HashMap多线程下环形链表的总结
    LinkedHashMap源码分析
    「HDU 3292」 No more tricks, Mr Nanguo
    「BZOJ 3122」「SDOI2013」 随机数生成器
    「BZOJ3884」 上帝与集合的正确用法
  • 原文地址:https://www.cnblogs.com/Donal/p/2018390.html
Copyright © 2011-2022 走看看