基于MapReuduce的稀疏矩阵算法

Download Report

Transcript 基于MapReuduce的稀疏矩阵算法

稀疏矩阵
组长:吴建堃
组员:白野 朵宝宝
研究目的:
稀疏矩阵介绍:
PG.2
利用三元组运算稀疏矩阵乘法:
PG.3
MapReduce思想:
PG.4
Ubuntu下配置JDK:
PG.5
PG.1
研究目的:
矩阵乘法运算是一种基本运算。
如果用机器语言来处理大规模稀疏矩阵的
乘法,必须做到的是
扩大矩阵乘法的运算规模并降低其运算时间
。
利用MapReduce并行框架用于分块稀疏矩
阵乘法,可以实现大规模稀疏矩阵乘法的运算
。
1
稀疏矩阵介绍:
人们无法给出稀疏矩阵的确切定义,一
般都只是凭个人的直觉来理解这个概念,即
矩阵中非零元素的个数远远小于矩阵元素的
总数,并且非零元素没有分布规律。
对于那些零元素数目远远多于非零元素
数目,并且非零元素的分布没有规律的矩阵
称为稀疏矩阵
1
稀疏矩阵的三元组表示:
当矩阵M、N是稀疏矩阵时,我们可以
采用三元组表的表示形式来实现矩阵的
相乘。
3 0 0 5 


M  0  1 0 0 


2 0 0 0
 0

 1
N 
 2

 0
2

0

4

0 
 0

Q   1

 0
6

0

4 
1
稀疏矩阵的三元组表示:
矩阵M、N、Q的三元组表
1
稀疏矩阵的三元组表示:
采用三元组表的方法来实现时,因为三元组只对矩
阵的非零元素做存储所以可以采用固定三元组表a
中的元素(i,k,Mik)(1≤i≤m1,1≤k≤n1),在
三元组表b中找所有行号为k的的对应元素(k,j,
Nkj)(1≤k≤m2,1≤j≤n2)进行相乘、 累加,从而
得到Q[i][j],即以三元组表a中的元素为基准
, 依次求出其与三元组表b的有效乘积。
1
稀疏矩阵的三元组表示:
算法中附设两个向量num[ ]、first[ ],其中num[row]表示三元
组表b中第row行非零元素个数(1≤row≤m2), first[row]表示三元组表b
中第row行第一个非零元素所在的位置。显然,first[row+1]-1指向三元组
表b中第row行最后一个非零元素的位置。
first[1]=1;
first[row]=first[row-1]+num[row-1], 2≤row≤m2+1。
这里,first[m2+1]-1表示最后一行最后一个非零元素的存储位置。
当三元组表a中第i行非零元素的列号等于三元组表b中非零元素的行号时,则
元素相乘并将结果累加。
1
MapReduce思想:
1、 MapRedue 是一个为并行处理大量数据而设计的编程模型,它将
工作划分为一个独立任务组成的集合。它是一种并行编程,由某种功能
随需应变的云(如 Google 的 BigTable、Hadoop 和Sector)提供支
持。
2、特点:具有接口简单,健壮容错的特点。
3、关于map函数和reduce函数
MapReduce 的整体架构主要由map 和reduce 这两个函数组。其含
义是:Map(映射)和Reduce(化简)。
1
MapReduce思想:
用户输入一组键/值对,首先由map函数生成一批中间的
键/值对,然后由reduce 函数将具有相同键的中间值合并,
产生最后的结果。在这一过程中,由于MapReduce的数据
本地化特性,计算都是在本地节点完成。用户在使
MapReduce 开发时,只需要关注于应用本身,而不必关心
底层的任务分发、并发控制、资源管理、容错等复杂细节。
极大地方便了编程人员在不会分布式并行编程的情况下,将
自己的程序运行在分布式系统上上。因此,可以有效地将大
规模矩阵乘法运算引入到MapReduce 并行框架中。
1
MapReduce思想:
1
MapReduce思想:
MapReduce 与传统并行编程模型的比较:
在传统并行编程过程中,程序员必须花大量的精力
去处理进程间通信。Hello被用来统计输入数据中各单词
出现的次数。以Hello 为例,以顺序方式完成,会导致统
计效率低下。采用并行分类统计能提升效率,即收集各
个进程获得的关于某个相同单词的局部统计信息,并将
这些信息汇总给某个进程处进行分类统计。然而由于这
种实现方式仅确定能产生某个单词统计信息的进程范围,
因此会增加编程复杂度。
1
MapReduce思想:
在 MapReduce 模型下,完成单词统计的具体步骤为:
(1) 用户编写Map 程序对出现的单词Hello 产生中间结果
key/value 偶对,如<Hello,1>。
(2)这些分布产生的中间结果将按key 值的不同进行汇总处理,
产生key(word)相同的value 列表,如<Hello,1,1,1,⋯>,并作为
Reduce 阶段的输入,这个阶段的工作将MapReduce策略,把对全
局(或阶段性)计算结果有影响且有关联的value采用相同key 标志。
由于这种策略的简单抽象,因此用户可以较容易地把握局部和全局
关系,从而确保问题求解并行实现的正确性,并进一步降低并行分
布式编程的难度。
1
MapReduce思想:
1
Ubuntu下安装JDK:
虚拟机:Oracle VM VirtualBox4.2.4
支持:Solaris、Windows、DOS、Linux、OS/2 Warp、BSD。
Linux版本:Ubuntu 10-10
2010年10月10日发布。
JDK版本:jdk-7u9
JDK 是整个Java的核心,包括了Java运行环境、Java工具和Java基
。
础类库
没有JDK的话,无法安装或者运行java程序。(开始准备用JAVA语
言编写程序)
1
VirtualBox的介绍
VirtualBox是一款开源虚拟机。相
比于其他虚拟机来说,更小巧快,
设置简单。一下是其优点:
第一:适用于初学者。
第一:免费使用。
第二:支持跨平台使用,
VirtualBox不仅仅支持Windows平
台,其他的一些主流平台,如Linux
,Unix等等。
第三:支持的操作系统也相当丰富
。
1
Ubuntu介绍:
以桌面应用为主题的Linux操作系统。
支持x86、x64和ppc架构。
为什么我们使用Ubuntu?
→界面非常友好
→对硬件的支持非常全面
→最适合做桌面系统的Linux发行版本
→容易上手,适合初学者
1
在Ubuntu下安装JDK:
通过U盘,把JDK压缩文件放入Linux系统中。(直接拖拽无效)
打开终端:鼠标右击屏幕可以找到。
在终端下输入:sudo tar zxvf ./jdk-7u9-linux-i586.tar.gz//解压命令
。
④sudo mkdir /usr/lib/jvm 创建文件夹:在usr文件夹下的lib中。
⑤sudo cp -r ~/jdk1.7.0_09/ /usr/lib/jvm/ 用最高权限将jdk1.7.0_09
文件夹复制到第四步创建的jvm文件夹下.
⑥profile使用文本编辑器打开,添加三行代码:
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_09 export
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export
PATH="$JAVA_HOME/bin:$PATH"
保存后关闭
1
在Ubuntu下安装JDK:
⑦终端下输入source ~/.profile 更新
⑧终端下输入$ sudo update-alternatives --install/usr/bin/java java
/usr/lib/jvm/jdk1.7.0_09/bin/java 300
$ sudo update-alternatives --install /usr/bin/javac javac
/usr/lib/jvm/jdk1.7.0_09/bin/javac 300
$ sudo update-alternatives --config java $ sudo update-alternatives -config javac
修改默认的JDK
⑨ 终端下输入:java -version看到下面的代码,说明修改成SUN的JDK:
java version "1.7.0_09" OpenJDK Runtime Environment (IcedTea7 2.3.3)
(7u9-2.3.3-0ubuntu1~12.10.1) OpenJDK Server VM (build 23.2-b09, mixed
1
Thank You!
谢谢观看
吴建堃 白野 朵宝宝