厦门大学林子雨编著.docx

上传人:b****3 文档编号:3533345 上传时间:2022-11-23 格式:DOCX 页数:12 大小:201.70KB
下载 相关 举报
厦门大学林子雨编著.docx_第1页
第1页 / 共12页
厦门大学林子雨编著.docx_第2页
第2页 / 共12页
厦门大学林子雨编著.docx_第3页
第3页 / 共12页
厦门大学林子雨编著.docx_第4页
第4页 / 共12页
厦门大学林子雨编著.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

厦门大学林子雨编著.docx

《厦门大学林子雨编著.docx》由会员分享,可在线阅读,更多相关《厦门大学林子雨编著.docx(12页珍藏版)》请在冰豆网上搜索。

厦门大学林子雨编著.docx

厦门大学林子雨编著

厦门大学林子雨编著

《大数据技术原理与应用》

教材配套上机练习

图计算框架Hama的基础操作实践

(版本号:

2016年1月24日版本)

 

主讲教师:

林子雨

厦门大学数据库实验室

二零一六年一月

(版权所有,请勿用于商业用途)

目录

1作业题目1

2作业目的1

3作业性质1

4作业考核方法1

5作业提交日期与方式1

6作业准备1

6.1、Hama计算框架的安装配置1

6.2、用Hama计算模型实现寻找最大独立集问题算法4

7作业内容9

8实验报告9

附录1:

任课教师介绍9

附录2:

课程教材介绍10

附录3:

中国高校大数据课程公共服务平台介绍11

厦门大学林子雨编著《大数据技术原理与应用》

教材配套上机练习

图计算框架Hama基础操作实践

上机练习说明

主讲教师:

林子雨

E-mail:

ziyulin@个人主页:

1作业题目

图计算框架Hama基础操作实践。

2作业目的

旨在让学生了解Pregel图计算模型,并学会用Pregel的开源实现Hama实现一些基本操作。

3作业性质

课后作业,必做,作为课堂平时成绩。

4作业考核方法

提交上机实验报告,任课老师根据上机实验报告评定成绩。

5作业提交日期与方式

图计算章节内容结束后的下一周周六晚上9点之前提交。

6作业准备

请阅读厦门大学林子雨编著的大数据专业教材《大数据技术原理与应用》(官网:

6.1、Hama计算框架的安装配置

ApacheHama是GooglePregel的开源实现,与Hadoop适合于分布式大数据处理不同,Hama主要用于分布式的矩阵、graph、网络算法的计算。

简单说,Hama是在HDFS上实现的BSP(BulkSynchronousParallel)计算框架,弥补Hadoop在计算能力上的不足。

(1).安装好合适版本的jdk和hadoop,并且进行测试,保证他们能用。

(2).下载hama安装文件,从http:

//hama.apache.org/downloads.html处下载合适的版本,我当时下的是0.6.4版本的。

(3).在用户主目录下创建合适的安装目录文件,我这里是在~下创建了hama文件夹作为安装目录,即~/hama为安装目录。

 (4).将下载好的hama-0.6.4.tar.gz拷贝到~/hama中去,并用tarzvxfhama-0.6.4.tar.gz进行解压。

 (5).进入hama-0.6.4中的conf文件夹,修改hama-env.sh文件,在其中加入java的home路径,即加入:

ExportJAVA_HOME=/home/wanglianping/java/jdk.1.7.0_91

( 6).修改 hama-site.xml文件,这时hama配置的核心文件,具体内容如下:

 

  bsp.master.address

  192.168.91.128:

40000

  Theaddressofthebspmasterserver.Eitherthe

  literalstring"local"orahost:

portfordistributedmode

  

 

 

  fs.default.name

  hdfs:

//192.168.91.128:

9000/

  

   Thenameofthedefaultfilesystem.Eithertheliteralstring

   "local"orahost:

portforHDFS.

  

 

 

 hama.zookeeper.quorum

192.168.91.128

CommaseparatedlistofserversintheZooKeeperQuorum.

  Forexample,",,".

  Bydefaultthisissettolocalhostforlocalandpseudo-distributedmodes

  ofoperation.Forafully-distributedsetup,thisshouldbesettoafull

  listofZooKeeperquorumservers.IfHAMA_MANAGES_ZKissetinhama-env.sh

  thisisthelistofserverswhichwewillstart/stopzookeeperon.

  

  hama.zookeeper.property.clientPort

  2181

 

其中,bsp.master.address即bsp中的BSPMaster的地址和端口。

fs.default.name这个值要特别注意,是hadoop中nameNode的地址和端口,因为hama要用到hadoop的hdfs分布式文件系统。

剩下的俩个是zookeeper的相关配置。

(7).另外,在conf文件夹下还有一个groomservers文件,这个在分布式环境下配置groomserver的地址,在单机模式下就不用配置了,里面默认值为localhost。

同时,你也可以在~/.bashrc中添加hama的环境变量,这样每次启动就不同转到相应的目录下去了。

(8).启动hadoop,并验证是否启动成功。

命令:

HADOOP_HOME/bin/start-all.sh,如果启动成功,如下:

启动hama,命令:

HAMA_HOME/bin/start-bspd.sh,结果如下:

出现上述结果,则表明hama已经成功启动。

6.2、用Hama计算模型实现寻找最大独立集问题算法

(1).本算法参考Luby'sclassicparallelalgorithm《asimpleparallelalgorithmformaximalindependentsetproblem》,把顶点分为三类:

   1)S:

TheMISbeingconstructed.Startsemptyandgrowsiniterations.

   2)NotInS:

VerticesthathaveatleastoneedgetoavertexinSandasaresultcannotbeinS.

   3)Unknown:

VerticesthatdonothaveanedgetoanyvertexinSbutarenotyetinS.

(2).Hama模型下MIS(MaximalIndependentSet)算法描述。

1)初始时,把所有顶点的value值赋值为自己的vertexID,表明初始所有顶点均在UnKnown集合中,然后把自己的VertexID发送给邻接顶点。

 2)若顶点u的VertexID比自己所有邻接顶点都小,则该顶点进入S集合中,并发送neighbor-in-set消息给所有邻接顶点,通知它们退出Unknown集合进入到NotInS集合中,并最后把u置为InActive状态;否则,顶点u继续保持UnKnown状态。

 3)S集合中顶点的邻接顶点收到neighbor-in-set消息,则该顶点进入NotInS,并且设置为Inactive状态。

返回继续迭代,直到UnKnown集合为空。

(3).程序中按照顶点value取值不同来区分顶点的类别,具体如下:

1)value等于vertexID,表示顶点在Unknown集合中;

  2)value等于-1,表示顶点在S集合中

  3)value等于-2,表示顶点在NotInS集合中。

当所有顶点进入S或者NotInS集合中,就停止计算,表明已找到一个MIS。

源码如下:

packagegraph.mis;

importjava.io.IOException;

importjava.util.Iterator;

importorg.apache.hadoop.conf.Configuration;

importorg.apache.hadoop.fs.Path;

importorg.apache.hadoop.io.LongWritable;

importorg.apache.hadoop.io.NullWritable;

importorg.apache.hadoop.io.Text;

importorg.apache.hama.HamaConfiguration;

importorg.apache.hama.bsp.HashPartitioner;

importorg.apache.hama.bsp.TextInputFormat;

importorg.apache.hama.bsp.TextOutputFormat;

importorg.apache.hama.graph.Edge;

importorg.apache.hama.graph.GraphJob;

importorg.apache.hama.graph.Vertex;

importorg.apache.hama.graph.VertexInputReader;

publicclassFindMIS{

publicstaticclassMISVertexextends

Vertex{

@Override

publicvoidcompute(Iteratormessages)throwsIOException{

if(getSuperstepCount()==0){

setValue(getVertexID());

sendMessageToNeighbors(getValue());

}else{

if(getValue().get()==-2){

voteToHalt();

}else{

booleanrevMsg=false;

while(messages.hasNext()){

revMsg=true;

longmsg=messages.next().get();

if(msg==-2){

setValue(newLongWritable(-2));

voteToHalt();

return;

}elseif(msg

return;

}

}

if(revMsg){

setValue(newLongWritable(-1));

sendMessageToNeighbors(newLongWritable(-2));

voteToHalt();

}else{

sendMessageToNeighbors(getValue());

}

}

}

}

}

publicstaticclassMISTextReaderextends

VertexInputReader{

@Override

publicbooleanparseVertex(LongWritablekey,Textvalue,

Vertexvertex)

throwsException{

String[]split=value.toString().split("\t");

for(inti=0;i

if(i==0){

vertex.setVertexID(newLongWritable(Long.parseLong(split[i])));

}else{

vertex.addEdge(newEdge

newLongWritable(Long.parseLong(split[i])),null));

}

}

returntrue;

}

}

publicstaticvoidmain(String[]args)throwsIOException,

InterruptedException,ClassNotFoundException{

if(args.length<2){

System.err.println("Usage:

");

System.exit(-1);

}

HamaConfigurationconf=newHamaConfiguration(newConfiguration());

GraphJobpageJob=newGraphJob(conf,FindMIS.class);

pageJob.setJobName("FindaMIS");

pageJob.setMaxIteration(30);

pageJob.setVertexClass(MISVertex.class);

pageJob.setInputPath(newPath(args[0]));

pageJob.setOutputPath(newPath(args[1]));

pageJob.setVertexIDClass(LongWritable.class);

pageJob.setVertexValueClass(LongWritable.class);

pageJob.setEdgeValueClass(NullWritable.class);

pageJob.setInputKeyClass(LongWritable.class);

pageJob.setInputValueClass(Text.class);

pageJob.setInputFormat(TextInputFormat.class);

pageJob.setVertexInputReaderClass(MISTextReader.class);

pageJob.setPartitioner(HashPartitioner.class);

pageJob.setOutputFormat(TextOutputFormat.class);

pageJob.setOutputKeyClass(Text.class);

pageJob.setOutputValueClass(LongWritable.class);

pageJob.waitForCompletion(true);

}

}

(4).运行过程分析。

输入为无向图,测试图如下:

下面分析S集合中的顶点用深蓝色标注,NotInS集合用网状图案标注,UnKnown集合用白色标注。

S集合和NotInS集合中的顶点均是InActive状态,UnKnown集合中的顶点是Active状态。

1)步骤1:

在SuperStep0,每个顶点把自己的VertexID发送给邻接顶点,,如顶点0发送消息0到顶点1、4、6;顶点1发送消息1到顶点0、3;顶点6发送消息6到顶点0、4、5。

其他顶点类似。

2)步骤2:

在SuperStep1,每个顶点收到邻接顶点发送的消息,如顶点0收到消息1、4、6,;顶点1收到消息0、3;只有顶点0比邻接顶点都小,故该顶点进入S集合,用深蓝色标注。

其他顶点继续在UnKnown集合中。

3).步骤3和步骤1(步骤1属于第二轮),在SuperStep2中,顶点0的邻接顶点收到neighbor-in-set消息(源码中用-2表示)进入NotInS集合中,即顶点1、4、6共3个顶点进入NotInS集合中,变为InActive状态。

同时顶点2、3、5依然是UnKnown状态,2、3、5分别向邻接顶点发送消息,顶点2向4、5发送消息;顶点3向1、5发送消息;顶点5向2、3、6发送消息。

4).步骤2(第二轮):

在SuperStep3中,NotInS集合中的顶点1、6和4收到消息后被系统自动激活变为Active状态,所以程序中对此情况有所处理,把顶点1、6、4直接置为Inactive状态,不做后续处理。

顶点2、3收到消息5比自身大,则2、3进入S集合中,而顶点5则相反继续在UnKnown集合中。

顶点2、3向邻接顶点1、4、5发送neighbor-in-set消息。

5)步骤3(第二轮):

在SuperStep4中,顶点1和顶点4同(4)步处理相同。

顶点5收到neighbor-in-set消息后进入NotInS集合中。

由于UnKnown集合中已没有顶点,不会再向外发送消息。

6)SuperStep5中,发现已没有活跃顶点且没有消息在传递,故结束计算。

(5).实验结果

HDFS的输出结果如下(-2表示NotInS,-1表示在S集合中):

0-1

4-2

2-1

3-1

6-2

5-2

1-2

7作业内容

作业内容:

用Hama编程实现教材中的单源最短路径问题。

请同学们参照前面的Hama的操作示例,完成这个习题,教材有相应的算法思想,完成后需要提交实验报告。

8实验报告

《大数据技术基础》实验报告

题目:

图计算框架Hama基础操作实践

姓名

日期

实验环境:

实验内容与完成情况:

 

出现的问题:

解决方案(列出遇到的问题和解决办法,列出没有解决的问题):

附录1:

任课教师介绍

林子雨(1978-),男,博士,厦门大学计算机科学系助理教授,主要研究领域为数据库,实时主动数据仓库,数据挖掘.

主讲课程:

《大数据技术基础》

办公地点:

厦门大学海韵园科研2号楼

E-mail:

ziyulin@

个人主页:

数据库实验室网站:

附录2:

课程教材介绍

《大数据技术原理与应用——概念、存储、处理、分析与应用》,由厦门大学计算机科学系教师林子雨博士编著,是中国高校第一本系统介绍大数据知识的专业教材。

本书定位为大数据技术入门教材,为读者搭建起通向“大数据知识空间”的桥梁和纽带,以“构建知识体系、阐明基本原理、引导初级实践、了解相关应用”为原则,为读者在大数据领域“深耕细作”奠定基础、指明方向。

全书共有13章,系统地论述了大数据的基本概念、大数据处理架构Hadoop、分布式文件系统HDFS、分布式数据库HBase、NoSQL数据库、云数据库、分布式并行编程模型MapReduce、流计算、图计算、数据可视化以及大数据在互联网、生物医学和物流等各个领域的应用。

在Hadoop、HDFS、HBase和MapReduce等重要章节,安排了入门级的实践操作,让读者更好地学习和掌握大数据关键技术。

本书可以作为高等院校计算机专业、信息管理等相关专业的大数据课程教材,也可供相关技术人员参考、学习、培训之用。

欢迎访问《大数据技术原理与应用——概念、存储、处理、分析与应用》教材官方网站:

扫一扫访问教材官网

附录3:

中国高校大数据课程公共服务平台介绍

中国高校大数据课程公共服务平台,由中国高校首个“数字教师”的提出者和建设者——林子雨老师发起,由厦门大学数据库实验室全力打造,由厦门大学云计算与大数据研究中心、海峡云计算与大数据应用研究中心携手共建。

这是国内第一个服务于高校大数据课程建设的公共服务平台,旨在促进国内高校大数据课程体系建设,提高大数据课程教学水平,降低大数据课程学习门槛,提升学生课程学习效果。

平台服务对象涵盖高校、教师和学生。

平台为高校开设大数据课程提供全流程辅助,为教师开展教学工作提供一站式服务,为学生学习大数据课程提供全方位辅导。

平台重点打造“9个1工程”,即1本教材(含官网)、1个教师服务站、1个学生服务站、1个公益项目、1堂巡讲公开课、1个示范班级、1门在线课程、1个交流群(QQ群、微信群)和1个保障团队。

平台主页:

扫一扫访问平台主页

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1