1、上机练习说明E-mail: ziyulin 个人主页:1 作业题目图计算框架Hama基础操作实践。2 作业目的 旨在让学生了解Pregel图计算模型,并学会用Pregel的开源实现Hama实现一些基本操作。3 作业性质 课后作业,必做,作为课堂平时成绩。4 作业考核方法 提交上机实验报告,任课老师根据上机实验报告评定成绩。5 作业提交日期与方式 图计算章节内容结束后的下一周周六晚上9点之前提交。6 作业准备 请阅读厦门大学林子雨编著的大数据专业教材大数据技术原理与应用(官网:6.1、 Hama计算框架的安装配置Apache Hama是Google Pregel的开源实现,与Hadoop适合于分
2、布式大数据处理不同,Hama主要用于分布式的矩阵、graph、网络算法的计算。简单说,Hama是在HDFS上实现的BSP(Bulk Synchronous Parallel)计算框架,弥补Hadoop在计算能力上的不足。(1). 安装好合适版本的jdk和hadoop,并且进行测试,保证他们能用。(2). 下载hama安装文件,从http:/hama.apache.org/downloads.html处下载合适的版本,我当时下的是0.6.4版本的。(3). 在用户主目录下创建合适的安装目录文件,我这里是在下创建了hama文件夹作为安装目录,即/hama为安装目录。(4). 将下载好的hama-0
3、.6.4.tar.gz拷贝到/hama中去,并用tar zvxf hama-0.6.4.tar.gz进行解压。(5). 进入hama-0.6.4中的conf文件夹,修改hama-env.sh文件,在其中加入java的home路径,即加入:Export JAVA_HOME=/home/wanglianping/java/jdk.1.7.0_91(6). 修改hama-site.xml文件,这时hama配置的核心文件,具体内容如下: namebsp.master.addressvalue192.168.91.128:40000descriptionThe address of the bsp ma
4、ster server. Either the literal string local or a host:port for distributed mode/description/propertyfs.default.namehdfs:/192.168.91.128:9000/ The name of the default file system. Either the literal string port for HDFS.hama.zookeeper.quorum192.168.91.128Comma separated list of servers in the ZooKee
5、per Quorum. For example, ,. By default this is set to localhost for local and pseudo-distributed modes of operation. For a fully-distributed setup, this should be set to a full list of ZooKeeper quorum servers. If HAMA_MANAGES_ZK is set in hama-env.sh this is the list of servers which we will start/
6、stop zookeeper on.hama.zookeeper.property.clientPort2181其中,bsp.master.address即bsp中的BSPMaster的地址和端口。fs.default.name这个值要特别注意,是hadoop中nameNode的地址和端口,因为hama要用到hadoop的hdfs分布式文件系统。剩下的俩个是zookeeper的相关配置。(7).另外,在conf文件夹下还有一个groomservers文件,这个在分布式环境下配置groomserver的地址,在单机模式下就不用配置了,里面默认值为localhost。同时,你也可以在/.bashr
7、c中添加hama的环境变量,这样每次启动就不同转到相应的目录下去了。(8). 启动hadoop,并验证是否启动成功。命令:HADOOP_HOME/bin/start-all.sh,如果启动成功,如下:启动hama,命令:HAMA_HOME/bin/start-bspd.sh,结果如下:出现上述结果,则表明hama已经成功启动。6.2、用Hama计算模型实现寻找最大独立集问题算法 (1). 本算法参考 Lubys classic parallel algorithma simple parallel algorithm for maximal independent set problem,把顶
8、点分为三类: 1) S:The MIS being constructed. Starts empty and grows in iterations.2) NotInS: Vertices that have at least one edge to a vertex in S and as a result cannot be in S.3) Unknown: Vertices that do not have an edge to any vertex in S but are not yet in S.(2).Hama模型下 MIS(Maximal Independent Set)算法
9、描述。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集合
10、为空。(3). 程序中按照顶点value取值不同来区分顶点的类别,具体如下:1) value 等于 vertexID ,表示顶点在 Unknown 集合中; 2) value 等于 -1 ,表示顶点在 S 集合中 3) value 等于 -2 ,表示顶点在 NotInS 集合中。当所有顶点进入S或者NotInS集合中,就停止计算,表明已找到一个 MIS。源码如下:package graph.mis;import java.io.IOException;import java.util.Iterator;import org.apache.hadoop.conf.Configuration;im
11、port org.apache.hadoop.fs.Path;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hama.HamaConfiguration;import org.apache.hama.bsp.HashPartitioner;import org.apache.hama.bsp.TextInputFormat;import org.apache.hama.bsp.
12、TextOutputFormat;import org.apache.hama.graph.Edge;import org.apache.hama.graph.GraphJob;import org.apache.hama.graph.Vertex;import org.apache.hama.graph.VertexInputReader;public class FindMIS public static class MISVertex extends Vertex Override public void compute(Iterator messages) throws IOExcep
13、tion if (getSuperstepCount() = 0) setValue(getVertexID(); sendMessageToNeighbors(getValue(); else if(getValue().get()=-2) voteToHalt(); else boolean revMsg = false; while (messages.hasNext() revMsg = true; long msg = messages.next().get(); if (msg = -2) setValue(new LongWritable(-2); voteToHalt(); r
14、eturn; else if (msg getValue().get() if (revMsg) setValue(new LongWritable(-1); sendMessageToNeighbors(new LongWritable(-2); voteToHalt(); else sendMessageToNeighbors(getValue(); public static class MISTextReader extends VertexInputReader public boolean parseVertex(LongWritable key, Text value, Vert
15、ex vertex) throws Exception String split = value.toString().split(t); for (int i = 0; i split.length; i+) if (i = 0) vertex.setVertexID(new LongWritable(Long.parseLong(spliti); vertex.addEdge(new Edge( new LongWritable(Long.parseLong(spliti), null); return true; public static void main(String args)
16、throws IOException, InterruptedException, ClassNotFoundException if (args.length output System.exit(-1); HamaConfiguration conf = new HamaConfiguration(new Configuration(); GraphJob pageJob = new GraphJob(conf, FindMIS.class); pageJob.setJobName(Find a MIS pageJob.setMaxIteration(30); pageJob.setVer
17、texClass(MISVertex.class); pageJob.setInputPath(new Path(args0); pageJob.setOutputPath(new Path(args1); pageJob.setVertexIDClass(LongWritable.class); pageJob.setVertexValueClass(LongWritable.class); pageJob.setEdgeValueClass(NullWritable.class); pageJob.setInputKeyClass(LongWritable.class); pageJob.
18、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(Lo
19、ngWritable.class); pageJob.waitForCompletion(true);(4). 运行过程分析。输入为无向图,测试图如下:下面分析S集合中的顶点用深蓝色标注,NotInS集合用网状图案标注,UnKnown集合用白色标注。S集合和NotInS集合中的顶点均是InActive状态,UnKnown集合中的顶点是Active状态。1) 步骤1:在SuperStep 0,每个顶点把自己的VertexID发送给邻接顶点,,如顶点0发送消息0到顶点1、4、6;顶点1发送消息1到顶点0、3;顶点6发送消息6到顶点0、4、5。其他顶点类似。2)步骤2:在SuperStep 1,每个
20、顶点收到邻接顶点发送的消息,如顶点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(第二轮
21、):在SuperStep 3中,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(第二轮):在SuperStep 4中,顶点1和顶点4同(4)步处理相同。顶点5收到neighbor-in-set 消息后进入 NotInS集合中。由于UnKnown集合中已没有顶点,不会再向外发送消息。6) SuperSt
22、ep 5中,发现已没有活跃顶点且没有消息在传递,故结束计算。(5). 实验结果HDFS的输出结果如下(-2表示NotInS,-1表示在S集合中):0 -14 -22 -13 -16 -25 -21 -27 作业内容作业内容:用Hama编程实现教材中的单源最短路径问题。请同学们参照前面的Hama的操作示例,完成这个习题,教材有相应的算法思想,完成后需要提交实验报告。8 实验报告大数据技术基础实验报告题目:姓名日期实验环境:实验内容与完成情况:出现的问题:解决方案(列出遇到的问题和解决办法,列出没有解决的问题):任课教师介绍林子雨(1978),男,博士,厦门大学计算机科学系助理教授,主要研究领域为
23、数据库,实时主动数据仓库,数据挖掘.主讲课程:大数据技术基础办公地点:厦门大学海韵园科研2号楼 ziyulin个人主页:数据库实验室网站:课程教材介绍大数据技术原理与应用概念、存储、处理、分析与应用,由厦门大学计算机科学系教师林子雨博士编著,是中国高校第一本系统介绍大数据知识的专业教材。本书定位为大数据技术入门教材,为读者搭建起通向“大数据知识空间”的桥梁和纽带,以“构建知识体系、阐明基本原理、引导初级实践、了解相关应用”为原则,为读者在大数据领域“深耕细作”奠定基础、指明方向。全书共有13章,系统地论述了大数据的基本概念、大数据处理架构Hadoop、分布式文件系统HDFS、分布式数据 库HB
24、ase、NoSQL数据库、云数据库、分布式并行编程模型MapReduce、流计算、图计算、数据可视化以及大数据在互联网、生物医学和物流等各个领域的应用。在Hadoop、HDFS、HBase和MapReduce等重要章节,安排了入门级的实践操作,让读者更好地学习和掌握大数据关键技术。本书可以作为高等院校计算机专业、信息管理等相关专业的大数据课程教材,也可供相关技术人员参考、学习、培训之用。欢迎访问大数据技术原理与应用概念、存储、处理、分析与应用教材官方网站:扫一扫访问教材官网中国高校大数据课程公共服务平台介绍中国高校大数据课程公共服务平台,由中国高校首个“数字教师”的提出者和建设者林子雨老师发起
25、,由厦门大学数据库实验室全力打造,由厦门大学云计算与大数据研究中心、海峡云计算与大数据应用研究中心携手共建。这是国内第一个服务于高校大数据课程建设的公共服务平台,旨在促进国内高校大数据课程体系建设,提高大数据课程教学水平,降低大数据课程学习门槛,提升学生课程学习效果。平台服务对象涵盖高校、教师和学生。平台为高校开设大数据课程提供全流程辅助,为教师开展教学工作提供一站式服务,为学生学习大数据课程提供全方位辅导。平台重点打造“9个1工程”,即1本教材(含官网)、1个教师服务站、1个学生服务站、1个公益项目、1堂巡讲公开课、1个示范班级、1门在线课程、1个交流群(QQ群、微信群)和1个保障团队。平台主页:扫一扫访问平台主页
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1