Ch.8. 基于MapReduce的图算法 MapReduce海量数据并行处理

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

EpiC elastic power-aware data intensive Cloud. LOGO epiC 大规模数据处理的难点 Page  2 如何查询处 理海量数据? 如何存储 海量数 据? 如何降低硬件成 本? 如何取得一劳 永逸的解决方案?
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
王 子 坊 《洛陽伽藍記》 主講教師:張其昀.
项目6 通用堆栈.
信息技术组 因特网信息的查找.
电子工业出版社《云计算(第二版)》配套课件
班級:醫管3B 組別:第二組 組員:王品媛、郭雅瑄、謝淑玲、蔡孟蔙
信息内容安全技术 网络数据主动获取技术 1.
Java程序设计教程 第一讲 Java概述.
受過蒙特梭利啟蒙教育而成為成功人物的國際名人
四資二甲 第三週作業 物件導向程式設計.
基于Hadoop的Map/Reduce框架研究报告
面向对象的程序设计(一).
南京大学计算机科学与技术系 主讲人:黄宜华 2011年春季学期
数据采集与Hadoop框架 报告人:黄文君 导 师:王华忠 BEA Confidential.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
C#程序设计 10软件1、2班 王槐彬 计算机工程学院.
第二章 JAVA语言基础.
Google App Engine Google 應用服務引擎.
圖書館的創意服務 「創意、出版、圖書館經營」研討會 姜 義 臺 靜宜大學蓋夏圖書館
類別與物件 Class & Object.
Ch07 介面與多重繼承 物件導向程式設計(II).
第三章 控制结构.
Introduction to MapReduce
Ch08 巢狀類別 物件導向程式設計(II).
程式設計實作.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
《大数据技术原理与应用》 第七章 MapReduce (2016春季学期) 林子雨 厦门大学计算机科学系 主页:
Java基础 JavaSE异常.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
WEB挖掘算法介绍.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
CHAPTER 6 認識MapReduce.
项目一 网络信息搜索  项目实施背景 一 完成项目所要达到的目标 二 完成项目所需要的条件 三.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
厦门大学数据库实验室 MapReduce 连接
Ch10 類別與物件-方法 Java程式設計(2).
程式設計實作.
Cloud Computing MapReduce进阶.
Java语言程序设计 第五部分 Java异常处理.
Java程序设计 第9章 继承和多态.
Skew Join相关论文 报告人:蔡珉星 厦大数据库实验室
Homework 1(上交时间:10月14号) 倒排索引.
C#面向对象程序设计 $7 继承和多态性.
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
Google Speaker: 呂瑞麟 國立中興大學資管系教授
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第六章 属性、索引器、委托和事件.
辅导课程八.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
基于云计算及数据挖掘技术的海量数据处理研究
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
基于MapReduce的Join算法优化
第二章 Java基本语法 讲师:复凡.
教育部特殊教育通報網 學生異動、接收操作說明.
龍老師我不會Debug QQ.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
辅导课程十二.
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
JAVA 程式設計與資料結構 第三章 物件的設計.
判斷(選擇性敘述) if if else else if 條件運算子.
東吳大學『樂齡大學』 外雙溪環境與生態 產業 黃顯宗 東吳大學 微生物學系 101.
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Summary
Presentation transcript:

Ch.8. 基于MapReduce的图算法 MapReduce海量数据并行处理 南京大学计算机科学与技术系 主讲人:黄宜华,刘长辉 2011年春季学期 鸣谢:本课程得到Google公司(北京) 中国大学合作部精品课程计划资助

Ch.8. 基于MapReduce的图算法 1.图的表示 2.PageRank 3.最短路径 4.广度优先遍历 5. 实验4:Wiki百科网页数据PageRank

图问题与MapReduce 一些图问题: 关键问题: 最短路径 最小生成树 广度优先搜索 PageRank

图表示方法 G = (V, E) 两种常见的表示方法 邻接矩阵 邻接表

邻接矩阵 用一个 n x n 的矩阵 M 来表示图: n = |V| Mij = 1 表示一条i到j的边 2 1 3 4

邻接矩阵 优点: 便于数学操作 遍历一行可得到出度信息,遍历一列可以得到入度信息 缺点: 对于稀疏矩阵浪费内存

邻接表 只保存邻接矩阵中不为零的节点 1 2 3 4 1: 2, 4 2: 1, 3, 4 3: 1 4: 1, 3

邻接表 优点: 表示更加紧凑 容易得到出度信息 缺点: 不方便得出入度信息

PageRank内容概述 什么是PageRank PageRank的简化模型 PageRank的随机浏览模型 PageRank的MapReduce实现

什么是PageRank PageRank PageRank是一种由搜索引擎根据网页之间相互的超链 接计算的网页排名技术。 PageRank是Google用于用来标识网页的等级或重要性 的一种方法。其级别从1到10级,PR值越高说明该网 页越受欢迎(越重要)。

PageRank的基本设计思想和设计原则 从许多优质的网 页链接过来的网 页,必定还是优 质网页。一个网 页要想拥有较高 的PR值的条件: 有很多网页链接 到它; 有高质量的网页 链接到它。

PageRank的简化模型 可以把互联网上的各个网页之间的链接关系看成一个有向图。 对于任意网页Pi,它的PageRank值可表示为: 其中Bi为所有链接到网页i的网页集 合, Lj为网页j的对外链接数(出度)。

简化模型的矩阵表示

简化模型面临的问题 实际的网络超链接环境没有这么理想化,PageRank 会面临两个问题: Rank leak Rank sink

Rank leak PR(A) PR(B) PR(C) PR(D) 初始 0.25 一次迭代 0.125 二次迭代 三次迭代 … n次迭代 Rank leak:一个独立的网页如果没有外出的链接就产生等级泄漏 解决办法: 1.将无出度的节点递归的从图中去掉,待其他节点计算完毕后再添加。 2.对无出度的节点添加一条边,指向那些指向它的顶点。

Rank sink Rank sink:整个网页图中的一组紧密链接成环的网页如果没有外出的链接就产生Rank sink。 PR(A) PR(B) PR(C) PR(D) 初始 0.25 一次迭代 0.375 二次迭代 三次迭代 四次迭代 五次迭代 … Rank sink:整个网页图中的一组紧密链接成环的网页如果没有外出的链接就产生Rank sink。 从而引入随机浏览模型。

PageRank的随机浏览模型 假定一个上网者从一个随机的网页开始浏览 上网者不断点击当前网页的链接开始下一次浏览。 但是,上网者最终厌倦了,开始了一个随机的网页。 随机上网者访问一个新网页的概率就等于这个网页 的PageRank值。因此这个模型更加接近于用户的行 为。

随机浏览模型的图表示 设定任意两个顶点之间都有直接通路, 在每个顶点处以概率d按原来蓝色方向转移,以概率1-d按红色方向转移。

随机浏览模型的矩阵表示 回顾简单模型的矩阵表示: 随机浏览模型的矩阵表示: R = HR 随机浏览模型的矩阵表示: 令:H’ = d*H + (1-d)*[1/N]N×N 则: R= H’ R 其中R为列向量,代表PageRank值;H’代表转移矩阵;d代表阻尼因子,通常设为 0.85。 由于等式R=HR满足马尔可夫链的性质,如果马尔 可夫链收敛,则可R存在唯一解

马尔可夫链收敛定理

随机浏览模型的邻接表表示 由于网页数目巨大,网页之间的连接关系的邻接矩 阵是一个很大的稀疏矩阵。 采用邻接表来表示网页之间的连接关系。 随机浏览模型的PageRank公式: 通过迭代计算得到所有节点的PageRank值。

随机浏览模型 随机浏览模型的优点: 更加符合用户的行为 一定程度上解决了rank sink问题 保证PageRank存在唯一值。

用MapReduce实现PageRank Phase1: GraphBuilder 建立网页之间的超链接图 Phase2: PageRankIter 迭代计算各个网页的PageRank值 Phase3: RankViewer 按PageRank值从大到小输出

Phase1:GraphBuilder 原始数据集:维基百科各网页间的链接信息。文本文 件,共11.2G。每行包含一个网页名,及其所链接的 全部网页名。 GraphBuilder目标:分析原始数据,建立各个网页之间 的链接关系。 Map:逐行分析原始数据, 输出<URL ,(PR_init, link_list)> 其中网页的URL作为key, PageRank初始值(PR_init)和网页的出度 列表一起作为value,以字符串表示value,用特定的符号将二者分开。 Reduce: 输出<URL, (PR_init, link_list)> 该阶段的Reduce不需要做任何处理

Phase2:PageRankIter PageRankIer:迭代计算PR值,直到PR值收敛或迭代预定次数。 Map对上阶段的 <URL, (cur_rank, link_list)>产生两种<key, value> 对: 1 For each u in link_list, 输出 <u, cur_rank/|link_list|> 其中u代表当前URL所链接到网页ID,并作为key; Cur_rank为当前URL的PageRank值, |link_list|为当前URL的出度数量, , cur_rank/|link_list|作为value。 2 同时在迭代过程中,传递每个网页的链接信息<URL, link_list> 在迭代过程中,必须保留网页的局部链出信息,以维护图的结构。

Phase2:PageRankIter Reduce 对 Map输出的<URL, url_list> 和多个 <URL, val>做如下 处理: 其中<URL, url_list> 为当前URL的链出信息; <URL, val>为当前URL的链入网页对其贡献的PageRank值 计算所有val的和,并乘上d,在加上常数(1-d) /N得到new_rank。 输出 (URL, (new_rank, url_list))。 迭代计算公式: PR(A) = (1-d) /N+ d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))

PageRank in MapReduce Map Reduce n1 [n2, n4] n2 [n3, n5] n3 [n4]

Phase2:PageRankIter PageRankIter伪代码

Phase3:Rankviewer PageRankViewer:将最终结果排序输出。 PageRankViewer从最后一次迭代的结果读出文件,并将文件名和 其PR值读出,并以PR值为key网页名为value,并且以PR值从大到 小的顺序输出。 排序过程中可以采用框架自身的排序处理,重载key的比较 函数,使其经过shuffle和sort后反序(从大到小)输出 public static class DecFloatWritable extends FloatWritable { … @Override public int compareTo(Object o) { return -super.compareTo(o); }

PageRank迭代终止条件 可选的终止条件: 各网页的PageRank值不再改变; 各网页的PageRank值排序不再变化; 迭代至固定次数;

多趟MapReduce的处理 public class PageRankDriver { private static int times = 10; public static void main(String args[]) throws Exception String[] forGB = {"", args[1]+"/Data0"}; forGB[0] = args[0]; GraphBuilder.main(forGB); String[] forItr = {"Data","Data"}; for (int i=0; i<times; i++) { forItr[0] = args[1]+"/Data"+(i); forItr[1] = args[1]+"/Data"+(i+1); PageRankIter.main(forItr); } String[] forRV = {args[1]+"/Data"+times, args[1]+"/FinalRank"}; PageRankViewer.main(forRV); 也可以使用org.apache.hadoop.util.ProgramDriver

单源最短路径 问题: 在图中寻找一个起始点到一个或多个目标点 之间的最短路径 串行算法: Dijkstra算法 最短路径通常指最小的权重或最少代价。 串行算法: Dijkstra算法 MapReduce:并行广度优先 (BFS)

Dijkstra最短路径算法   1 10 2 3 9 4 6 5 7   2 Example from CLR

Dijkstra最短路径算法 10  1 10 2 3 9 4 6 5 7 5  2 Example from CLR

Dijkstra最短路径算法 8 14 1 10 2 3 9 4 6 5 7 5 7 2 Example from CLR

Dijkstra最短路径算法 8 13 1 10 2 3 9 4 6 5 7 5 7 2 Example from CLR

Dijkstra最短路径算法 8 9 1 1 10 2 3 9 4 6 5 7 5 7 2 Example from CLR

Dijkstra最短路径算法 8 9 1 10 2 3 9 4 6 5 7 5 7 2 Example from CLR

Dijkstra最短路径算法 Dijkstra最短路径基于维持一个全局的优先队列 每次迭代都是从队列中找出距离最小的点,并更新它可到达的点。 存在问题:在集群分布处理环境下难以维持全局的优先队列,因而基于单机的Dijkstra算法无法实现MapReduce并行化 解决方法:可以基于并行的广度优先遍历来解决最短路径问题。

广度优先遍历的并行化 1.同一层之间的节点可并行执行; 2.每一趟MapReduce过程处理一层; 4.迭代终止:没有距离为无穷大的顶点。

广度优先遍历的MapReduce实现

最短路径的并行算法 并行的最短路径算法 基于广度优先遍历 与广度优先遍历不同: 终止条件 广度优先:所有节点都 更新过一遍; 最短路径:所有节点的 距离不再变化;

基于MapReduce的图算法总结 通常采用邻接表来表示图 通常将一个完整的图结构,分解成若干个局部的子 结构,对每个子结构进行并行处理。 在map阶段对邻接点产生<key,value>对,经过Shuffle 和sort后,在reduce阶段更新节点信息。 图算法通常是一个迭代过程,上一步的输出作为下 一步的输入,由额外的“driver”控制。

5. 实验4:Wiki网页PageRank算法 实验内容与要求 1. 在Eclipse环境下编写实现Wiki网页数据集的PageRank算法,实验数 据从FTP上下载 2. 在集群上运行程序,对Wiki网页数据集进行处理 3. 实验结果提交:要求书写一个实验报告,其中包括: 实验设计说明,包括主要设计思路、算法设计、程序和各个类的设计说明 程序运行和实验结果说明和分析,包括前30个最高Rank的网页信息输出列表 性能、扩展性等方面存在的不足和可能的改进之处 源程序 ,执行程序 运行结果文件 实验报告文件命名规则:MPLab4-学号-姓名.doc 实验报告提交至:FTP:114.212.209.146 用户名:hadoop 口令:hadoop 实验完成时间:5月18日前完成并提交报告

Reference 1. The Anatomy of a Large-Scale Hypertextual Web Search Engine. Sergey Brin and Lawrence Page. 2. Ecient Computation of PageRank . Taher H. Haveliwala. 3. The PageRank Citation Ranking:Bring Order to the Web 4. Data-Intensive Text Processing with MapReduce Jimmy Lin and Chris Dyer

谢谢!