Mining Massive Datasets课程笔记(一)

本文是关于Mining Massive Datasets课程的笔记,主要聚焦在MapReduce计算模型和PageRank算法上。MapReduce解决了分布式文件系统中的节点失效、网络瓶颈和分布式编程复杂性问题。PageRank通过随机游走模型来衡量网页的重要性,文中详细阐述了PageRank的流动公式、矩阵公式、幂运算迭代法,并讨论了Google版PageRank的改进,包括处理死胡同和蜘蛛陷阱问题。
摘要由CSDN通过智能技术生成

MapReduce and PageRank

一、Distributed File System (分布式文件系统)

why do we need mapreduce?
传统的数据挖掘方式(single node architecture)在处理海量数据(Like 200TB)时,由于CPU和disk之间的bandwidth限制以及单个CPU的处理能力限制,使得数据处理的时间成本非常高,从而有了多个节点多个CPU并行处理的想法。因此提出了cluster architecture。

comparison of two Architecture

在cluster Architecture中每个机架(rack)有16-64个节点,他们由千兆交换机相连,这些机架之间再由骨干交换机继续联系。这种结构曾经被广泛运用在大型数据集的存储和处理中,但是它并没有完全解决问题,仍有自己的局限性
1、node failures
这里写图片描述
节点作为物理实体很可能会在运行中失效,那么在节点可能失效的情况下:
如何能稳定有效地提供数据存储?
在长时间的计算过程中如果遇到节点失效该如何处理?*(重新计算无疑很浪费时间很低效)*

2、network bottleneck
这里写图片描述
即使网络带宽是1Gbps,移动10TB的数据也要将近1天的时间。而稍微复杂些的计算都可能需要多次数据移动的过程,因此会使得计算速度很慢。因此需要找到一种新的方法在计算过程中减少数据的移动。

3、Distributed Programming is hard
Need a simple model that hides most of the complexity

MapReduce的出现解决cluster Architecture存在的三个问题
问题1:MapReduce通过将数据冗余存储在多个节点上从而解决节点失效的问题。
问题2:MapReduce通过move computation close to data 来减少数据用移动从而最大限度减小网络带宽的限制问题
问题3:MapReduce通过提供一种simple programming model来隐藏分布式架构的复杂性

下面具体讲解这三个解决方案的实现方式:
1、Redundant Storage Infrastructure——Distributed File System
分布式存储系统提供冗余存储,提供全局的文件命名空间、具有冗余性和可用性。典型的例子有谷歌的GFS以及Hadoop 的HDFS。典型的应用模式是Huge files: 数据通常写入一次但读取多次,并经常添加新数据但是很少更新或更改已有数据。

Distributed File System:
数据或文件通常被分割并存储在不同机器的chunks中,因此也叫这些存储数据的机器为chunk server。被一个chunk都被复制和保存在不同的机器上从而实现冗余存储。chunk server同时也扮演这compute server的角色,计算到那个chunk的数据时就使用存储该chunk的机器作为compute server从而实现move computation close to data避免了数据的移动 。
这里写图片描述

因此分布式文件系统主要包含下面三个部分:
这里写图片描述

二、The MapReduce Computational Model

work count 例子:计算在一个Huge text document 中某个词出现的次数,引申应用还有计算网页服务器日志中最受欢迎的网页链接以及研究中的术语统计等等问题。
在unix中可以使用下列命令直接实现:
这里写图片描述
这句命令实际上就体现了mapReduce的实现过程,但MapReduce厉害在很自然地实现了各部分的并行化。
这里写图片描述
MapReduce的总体框架都是一样的,不同的问题对应的只是Map和Reduce function的变化。
具体来说,
这里写图片描述
MapReduce基于顺序读取的硬盘

三、Scheduling and Data Flow

这部分将具体讲解MapReduce的运行机制
如下图左边是单个机器上的MapReduce过程。首先对一个大的文本(输入的数据)进行读入和分块,在各个chunk中使用Map函数形成键值对(key-value);然后进行Group操作,通常用于Reduce操作的节点比Map的要少,所以需要group操作来将Map函数得到的相同的key映射到对应的Reduce函数中,通常用到的group方法有Hash merge,shuffle,sort以及partition等。最后由Reduce函数sort出相同的key放在一起,并计算和输出最终结果。
右图是在分布式系统上的MapReduce。

这里写图片描述

因此,Programmer只需要提供明确的输入文件,以及Map函数和Reduce函数,而MapReduce environment 需要提供其余事情的处理:

  • 对输入的数据进行分块
  • 调度程序在多台机器上运行(多个机器上的Map函数并行等)
  • 上文提到的Group by Key操作
  • 处理节点失效的情况
  • 处理机器间的通信问题
  • 。。。
Data Flow

输入和输出数据保存在分布式文件系统(DFS):DFS在上文第一节中已经讲过,调度机会尽量将Map tasks安排在离存储有该Map函数输入数据的机器上(因为chunk server同时也是compute server

中间结果将存储在本地(map and reduce workers)的文件系统中

一个Map-Reduce task的输出往往是另一个Map-Reduce task的输入

Coordination: Master

master node负责任务调度:
任务的状态有三种(idle,in-progress,completed);当有可用的workers时idle tasks立即被调度;当一个map task结束时它会向master节点发送R个中间结果的位置和大小信息,每一个对应一个reducer;master节点将这些信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值