Libx

MapReduce概念整理

字数统计: 1,147阅读时长: 4 min
2019/05/11 Share

MapReduce数据模型

  1. 向外扩展(Scale out)而非向上扩展(Scale up)
    1. 多买便宜的,而非少买贵的
  1. 假设故障很常见(Assume failures are common)

    1. 健壮的应对系统或硬件故障
  2. 将处理程序移向数据(Move processing to the data)

    1. 传统高性能计算应用中,超级计算机一般有着处理节点(processing node)和存储节点(storage node)两种角色,它们通过高容量的设备完成互联。
    2. 大多数数据密集型的处理工作并不需要多么强大的处理能力,于是把计算与存储互相分开将使得网络成为系统性能瓶颈。
    3. MapReduce在其架构中将计算和存储合并在了一起,并将数据处理工作直接放在数据存储的位置完成,只不过这需要分布式文件系统予以支撑。
  3. 顺序处理数据并避免随机访问(Process data sequentially and avoid random access)

    1. MapReduce则主要设计用来在海量数据集上完成批处理操作,即所有的计算被组织成较长的流式处理操作,以延迟换取较大的吞吐能力。
  4. 隐藏系统级别的细节

    1. MapReduce编程模型通过为其内部少量的几个组件提供了一个简单且精心定义的接口,从而将程序员与系统底层的处理细节隔离开来。MapReduce实现了“运算什么”与“如何在多个节点并行运算”的隔离,前者可以程序员控制,后者则完全由MapReduce编程框架或运行时环境控制。
  5. 无缝扩展(Seamless scalability)

    1. 其处理能力随着节点的增加而线性增长,即集群规模增长N倍其处理相同规模数据的时长也会缩短N倍。

化整为零

海量数据并行处理的核心思想即是“分而治之”,难点也随之产生

(1) 如何将大问题分割为小任务?进一步地,如何将大问题分解为可以并行处理的小任务?

(2) 如何将分解好的小任务派送给分布式系统中的某主机且是较为适合解决此问题的主机上的worker(进程)完成处理?

(3) 如何保证某worker获取所需的数据?

(4) 如何协调不同worker之间进行同步?

(5) 如何将某worker的部分结果共享给其它需要此结果的worker?

(6) 如何在出现软件或硬件故障时仍然能保证上述工作的顺利进行?

MapReduce为我们隐藏了这些问题

更为精确地说,MapReduce有三个相互关联却各不相同的概念。首先,MapReduce是一个函数式编程思想。其次,MapReduce也是一个运行框架,它能够协调运行基于MapReduce思想开发的程序。最后,MapReduce还可以被看作编程模型和执行框架的实现,例如Google的专有实现和另一个Hadoop中的MapReduce组件。

部署应用MapReduce意味着这样的过程:在现有的多个节点上部署完成MapReduce软件(即MapReduce的实现)并启动集群服务,便准备好了一个MapReduce程序运行环境(即运行框架),此时只需要将用户开发的MapReduce程序(基于MapReduce函数式编程语言API开发)及其要处理的数据提交给MapReduce运行环境即可完成数据处理过程。

JOB 运行流程

https://img-blog.csdn.net/20151215170248858

作业提交->作业初始化->任务分配->任务执行->更新任务执行进度和状态->作业完成

一个完整的mapreduce作业流程,包括4个独立的实体:

  • 客户端:client,编写mapreduce程序,配置作业,提交作业。
  • JobTracker:协调这个作业的运行,分配作业,初始化作业,与TaskTracker进行通信。
  • TaskTracker:负责运行作业,保持与JobTracker进行通信。
  • HDFS:分布式文件系统,保持作业的数据和结果。

Data Flow

Input阶段

数据以一定的格式传递给Mapper,有TextInputFormat,DBInputFormat,SequenceFileFormat等可以使用

Map阶段

对输入的(key,value)进行处理,即map(k1,v1)->list(k2,v2)

Sort阶段

对于Mapper的输出进行排序

Combine阶段

对于Sort之后又相同key的结果进行合并

Partition阶段

将Mapper的中间结果按照key的范围划分为R份(Reduce作业的个数)

Reduce阶段

对于Mapper阶段的结果进行进一步处理

Output阶段

输出计算结果

CATALOG
  1. 1. MapReduce数据模型
  2. 2. 化整为零
  3. 3. JOB 运行流程
  4. 4. Data Flow
    1. 4.1. Input阶段
    2. 4.2. Map阶段
    3. 4.3. Sort阶段
    4. 4.4. Combine阶段
    5. 4.5. Partition阶段
    6. 4.6. Reduce阶段
    7. 4.7. Output阶段