Mining Massive Datasets课程笔记(一)

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

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节点将这些信息发送给reducers.
这里写图片描述
master 节点会周期性的ping workers以确保节点没有失

### 大规模数据集挖掘的技术与资源 #### 关于《Mining of Massive Datasets》 《Mining of Massive Datasets》是本专注于大规模数据挖掘技术和算法的经典教材[^2]。该书由美国计算机科学家 Anand Rajaraman 和 Jeffrey D. Ullman 编写,涵盖了从基础到高级的数据挖掘方法。书中不仅介绍了如何高效处理海量数据,还提供了许多实际案例和应用场景。 以下是本书的主要内容和技术要点: 1. **MapReduce框架** MapReduce种用于并行化处理大型数据集的编程模型[^2]。它通过分而治之的思想简化了分布式计算的任务分配和管理过程。对于初学者来说,《Mining of Massive Datasets》详细讲解了 MapReduce 的工作原理及其在数据挖掘中的应用实例。 2. **推荐系统** 推荐系统的构建依赖于协同过滤、矩阵分解和其他机器学习技术[^2]。这些技术能够帮助分析用户的偏好模式,并预测他们可能感兴趣的内容。此部分内容适合希望开发个性化服务的企业开发者或研究者。 3. **频繁项集挖掘** 频繁项集挖掘是种发现交易数据库中常见组合的方法。Apriori 算法和 FP-Growth 算法是两个经典的解决方案,在零售业等领域具有广泛应用价值。 4. **聚类分析** 聚类旨在将相似对象归入同组别,从而揭示隐藏结构[^2]。K-Means 方法是最常用的聚类工具之;此外还有基于密度的空间聚类(DBSCAN),适用于噪声较多的情况。 5. **图挖掘** 社交网络分析通常涉及节点间关系建模以及社区检测等问题[^2]。PageRank 等链接流行度评估指标被广泛应用于搜索引擎优化领域。 6. **降维技术** 当面对高维度特征空间时,主成分分析(PCA)可以有效降低复杂度而不丢失过多信息量。这种方法特别有利于可视化展示或者加速后续运算操作。 除了理论阐述外,《Mining of Massive Datasets》也鼓励读者动手实践所学知识。每章节后面附带练习题目可以帮助巩固理解程度[^3]。 --- #### 其他值得阅读的大规模数据挖掘相关书籍 如果还想进步扩展视野,则可考虑以下几部著作: - **《Data Mining: Concepts and Techniques》 by Jiawei Han, Micheline Kamber & Jian Pei** 这是部全面介绍数据挖掘概念及其实现技巧的手册,覆盖范围广且深入浅出[^4]。 - **《Programming Collective Intelligence》 by Toby Segaran** 主要关注利用Python实现各种智能算法来解决现实世界难题,比如建立分类器、创建推荐引擎等实用功能[^5]。 - **《Hadoop: The Definitive Guide》 by Tom White** 如果计划采用 Hadoop 生态圈来进行超大容量文件存储与查询作业的话,那么这本书无疑是最佳入门指南[^6]。 --- ```python # 示例代码:简单实现 Apriori 算法的核心部分 def apriori(transactions, min_support=0.5): from collections import defaultdict item_counts = defaultdict(int) # Count individual items' frequency across all transactions. for transaction in transactions: for item in transaction: item_counts[item] += 1 num_transactions = float(len(transactions)) frequent_items = set([item for item, count in item_counts.items() if count / num_transactions >= min_support]) return frequent_items ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值