《分布式技术原理与算法解析》学习笔记Day13
分布式计算模式:MapReduce
什么是分治法?
分治法是将一个复杂、难以直接解决的大问题,分割成一些规模小、可以比较简单或者直接求解的子问题,这些子问题之间相互独立且与原问题形式相同,递归的求解这些子问题,然后将子问题的解合并得到原问题的解。
适合采用分治法的问题有以下特征:
- 问题规模比较大或者复杂,且问题可以分解为几个规模较小的、简单的同类型问题进行求解。
- 子问题之间相互独立,不包含公共子问题。
- 子问题的解可以合并得到原问题的解。
采用分治法的核心步骤:
- 分解原问题
- 求解子问题
- 合并解
什么是MapReduce?
Google提出的MapReduce分布式计算模型,是分治法的典型代表,它一开始被应用于搜索领域,后来被广泛应用到解决各种海量数据的计算问题。
MapReduce分为Map和Reduce两个核心阶段,其中Map对应”分“,即把复杂的任务分解为若干”简单的任务“来执行,Reduce对应着”合“,即对Map阶段的结果进行汇总。
MapReduce拆分后的任务具有以下特征:
- 相对于原始任务来说,拆分后的子任务和原任务是同质的。
- 多个子任务之间没有依赖,可以独立运行、并行计算。
MapReduce包括三大组件:
- Master,负责分配任务、协调任务,并未Mapper分配map()函数操作、为Reducer分配reduce()函数操作。
- Mapper worker,负责Map函数功能,执行子任务。
- Reducer worker,负责Reduce函数功能,汇总各个子任务的结果。
整个MapReduce的工作流程可以以分为5个阶段:输入、拆分、映射、化简和输出。
什么是Fork-Join模式?
Fork-Join是Java等语言或者库提供的原生多线程并行处理框架,采用线程级的分而治之的计算模式,充分利用多核CPU的优势,以递归的方式把一个任务拆分成多个“小任务”,把多个“小任务”放在多个处理器上运行,即Fork操作,当多个“小任务”执行完成后,在将这些直结果合并起来即可得到原始任务的结果,即Join操作。
Fork-Join模式不能大规模扩展,只适用于在单个Java虚拟机运行,多个小任务虽然运行在不同的处理器上,但是可以互相通信。
作者:李潘
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。