当前位置:   article > 正文

大数据计算基础——算法部分(下)_大数据并行算法有哪些

大数据并行算法有哪些

目录

叁、并行模型算法

一、MapReduce模型

1. 模型介绍

2. 应用举例

二、大规模并行计算(MPC)模型

1. 概述

2. 求和问题

3. 不重复元素数

三、 排序问题

1. 基本思想

2. 分析

肆、亚线性时间算法

一、概述

二、点集的直径

三、连通分量的数目

四、最小生成树


叁、并行模型算法

一、MapReduce模型

1. 模型介绍

        MapReduce中每轮包括三个步骤:Map,Shuffle和Reduce。

        ①Map:将输入的键值对进行处理,输出新的键值对。

        ②Shuffle:将map输出的键值对按key值归类重组。

        ③Reduce:处理Shuffle的输出,得到新的数据集合。

        MapReduce的设计中主要目标是减少处理的轮数、每轮的处理次数等。

2. 应用举例

        倒排索引构建:输入文件和文件内容,经Map处理得到单词与文档的键值对,经Shuffle处理得到含特定单词的文档集合,经过Reduce输出结果。

        单词计数:输入文件和文件内容,经Map处理得到该文档的所有单词(可重复),经Shuffle处理将同一单词汇集起来,经过Reduce统计输出结果。

         矩阵乘法:矩阵乘法有两种实现方式。正常的矩阵乘法是把矩阵A的第 i 行乘矩阵B的第 j 列放到结果矩阵C的对应位置,但在大规模数据下可能没法完整取出一行一列。因此可以转换思路,只需把 aij 与 bjk 的乘积加到 cik 即可(C初始化为0)。

        第一种MapReduce的方法如下,用了两次MapReduce。第一次Map将输入的中间索引 j 作为key,在Reduce中让对应项相乘,得到<i, k>相同的一系列键值对。在第二次的Reduce中相加,就得到了 cik。

         如果再回顾一下矩阵乘法的过程,可以发现矩阵A中的元素 aij 会与矩阵B中第 j 行的所有元素相乘,矩阵B中的元素 bjk 会与矩阵A中第 i 列的所有元素相乘。

        故在Map中体现这个过程,aij 处理后的key值为(i, x),x 取遍所有的 j ,bjk 处理后的key值为(y, k),y取遍所有的 j。然后让key相等的 aij 与 bjk 相乘并求和,即可得到最终结果。

         第一种方法增加了MapReduce的轮次,第二种方法增加了每轮的处理次数。

二、大规模并行计算(MPC)模型

1. 概述

        由于数据量太大,通常的处理是把数据分布式存储在多个机器上并行处理。

        即使分到各台机器上,数据量仍然很大,因此这里的时间代价按照处理的轮次来计算,而不再考虑每轮的代价。

2. 求和问题

        求和相对简单,各台机器间可以独立运行。

        当机器的存储空间 s 规模为\small \sqrt{n} 时,只需一轮计算就能解决,即常数级的代价。

        当机器的存储空间远小于\small \sqrt{n}时,每轮处理能让数据规模缩小至1/s,共需\small O(log_{s}n) 轮。

3. 不重复元素数

        使用之前的FM+算法,每次的FM+重复k =  O(1ξ2) 次,故代价为O(logξ2sn) 。

三、 排序问题

1. 基本思想

        这里介绍TeraSort,通过MapReduce进行高效的大规模数据排序。排序问题与前面的求和问题有本质区别,因为排序时不同机器间很可能不是独立工作的,需要一定的协调。

        TeraSort的基本思想是这样的:先将所有数据分成有序的若干段,然后每台机器负责一段内的数据排序,最后顺序输出。

        举个例子,为了对取值在1~20000中的1000个数进行排序,先将这1000个数分成4段,1~3000一段,3001~7000一段,7001~15000一段,15001~20000一段(不一定是均分),然后让4个人分别负责一段内数据的排序。最后按段依次输出,就得到了最终的排序结果。

        这里如何分段是个很重要的问题,因为机器在并行工作时的最终效率取决于最慢的那台机器,因此需要尽可能均匀分配。在下图的Round1中,就是进行这个分段处理。

        Map后得到了两类键值对,一类把全部数据打上标记0并输出,另一类以概率T/n为每个打上标记1并输出(相当于一个抽样过程)。

        在Reduce中,对标记为1的集合S进行排序,选择排序后的p-1 个 p 等分点作为分段的临界点,并用这 p-1 个点对原始数据进行分段,得到 p 类输出。

        最后在Round2中的Reduce里,对每一类内部排序,并按段序号顺序输出,就得到了排序完成的结果。

2. 分析

        这里的分析相对复杂,我自己也没怎么搞懂。

        主要说明这样的分段是较为均匀的,不等式放缩的地方我不太记得了,但大概是这个意思。

肆、亚线性时间算法

一、概述

        亚线性时间算法中,时间资源受限,甚至不允许完整读取数据一遍。此时无法回答精确的、必须遍历所有数据才能回答的问题。

         在亚线性时间算法中,我们多数情况下只能给出近似的答案。

二、点集的直径

        给定m个点,n条边,求最大边的长度。

        在时间受限的情况下,无法遍历每条边。这里的处理是任选一个点,选择其它点中与该点距离最大的作为选出的直径端点。

三、连通分量的数目

        常规的连通分量数求解可以在线性时间内完成,但在亚线性时间模型中需要更小的代价。

        这里的思想是计算每个顶点 u 所在连通分量的节点数 n_{u},将所有顶点的n_{u}的倒数相加,得到的结果作为C的估计值。 

        为了减少时间开销,对一个顶点所在的连通分量最多遍历 2ε 个顶点,并且只取所有顶点中的一部分进行计算,最后等比例放大。

        这样,处理一个顶点的代价为O(dε) ,其中 d 为图G的度。处理 r 个顶点的代价为O(dε3) ,达到了亚线性时间的要求,并且通过合理选择 r 能够控制结果的近似比。

四、最小生成树

        常规的最小生成树能在多项式时间内完成,这里的思想是转化为连通分量的求解。

        我们可以从这样的角度思考最小生成树的形成过程:从权重为1的边开始选择,得到一个(可能不连通的)无环图,然后从权重为2的边开始选择,依次进行下去,直到得到一颗生成树。只要原图是连通的,就一定可以得到一棵树,并且能够证明这样的树是最小的(贪心)。

        那么每次应该选择几条边呢?如果已经选完了权重小于等于 i 的边,那么就要从权重大于 i 的边中选出 C(i)1 条边,其中 C(i) 代表所有顶点和权重不超过 i 的边形成的子图的连通分量个数。

        最终可以得到最小生成树的权值如下,也就转化为了连通分量的求解。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/962542
推荐阅读
相关标签
  

闽ICP备14008679号