云计算实验报告书.doc

上传人:小** 文档编号:3006490 上传时间:2020-06-21 格式:DOC 页数:11 大小:565.52KB
返回 下载 相关 举报
云计算实验报告书.doc_第1页
第1页 / 共11页
云计算实验报告书.doc_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《云计算实验报告书.doc》由会员分享,可在线阅读,更多相关《云计算实验报告书.doc(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、.实验项目名称多表关联实验成绩实验者专业班级组别同组者实验日期201619第一部分:实验分析与设计(可加页)一、 实验内容描述(问题域描述)输入两个文件:一个代表工厂表,包含工厂名列和地址编号列;另一个代表地址表,包含地址名列和地址编号列。从输入数据中找出工厂名和地址名的对应关系,输出“工厂名地址名”表,按工厂名排序输出;数据文件自己设计样例。2、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)具体的算法实现如下:public class MTjoin public static int time = 0; /* 在map中先区分输入行属于左表还是右

2、表,然后对两列值进行分割, * 保存连接列在key值,剩余列和左右表标志在value中,最后输出 */ public static class Map extends Mapper / 实现map函数 public void map(Object key, Text value, Context context)throws IOException, InterruptedException String line = value.toString();/ 每行文件 String relationtype = new String();/ 左右表标识 / 输入文件首行,不处理 if(line.

3、contains(factoryname)=true|line.contains(addressed)= true) return; / 输入的一行预处理文本 StringTokenizer itr = new StringTokenizer(line); String mapkey = new String(); String mapvalue = new String(); int i = 0; while (itr.hasMoreTokens() / 先读取一个单词 String token = itr.nextToken(); / 判断该地址ID就把存到values0 if (toke

4、n.charAt(0)=0& token.charAt(0) 0) relationtype = 1; else relationtype = 2; continue; / 存工厂名 mapvalue += token + ; i+; / 输出左右表 context.write(new Text(mapkey), new Text(relationtype + + mapvalue); /*reduce解析map输出,将value中数据按照左右表分别保存, * 然后求出笛卡尔积,并输出。 */public static class Reduce extends Reducer / 实现redu

5、ce函数 public void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException / 输出表头 if (0 = time) context.write(new Text(factoryname), new Text(addressname); time+; int factorynum = 0; String factory = new String10; int addressnum = 0; String address = new String10; I

6、terator ite = values.iterator(); while (ite.hasNext() String record = ite.next().toString(); int len = record.length(); int i = 2; if (0 = len) continue; / 取得左右表标识 char relationtype = record.charAt(0); / 左表 if (1 = relationtype) factoryfactorynum = record.substring(i); factorynum+; / 右表 if (2 = rela

7、tiontype) addressaddressnum = record.substring(i); addressnum+; / 求笛卡尔积 if (0 != factorynum & 0 != addressnum) for (int m = 0; m factorynum; m+) for (int n = 0; n addressnum; n+) / 输出结果 context.write(new Text(factorym), new Text(addressn); public static void main(String args) throws Exception Config

8、uration conf = new Configuration(); /conf.set(mapred.job.tracker, 192.168.1.2:9001); /String ioArgs = new String MTjoin_in, MTjoin_out ; String otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length != 2) System.err.println(Usage: Multiple Table Join ); System.exit

9、(2); Job job = new Job(conf, Multiple Table Join); job.setJarByClass(MTjoin.class); / 设置Map和Reduce处理类 job.setMapperClass(Map.class); job.setReducerClass(Reduce.class); / 设置输出类型 job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); / 设置输入和输出目录 FileInputFormat.addInputPath(job, new P

10、ath(otherArgs0); FileOutputFormat.setOutputPath(job, new Path(otherArgs1); System.exit(job.waitForCompletion(true) ? 0 : 1); 三、 主要仪器设备及耗材Ubuntu、Hadoop、PC第二部分:实验调试与结果分析(可加页)一、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)1 调试方法描述以下是部分核心Hadoop的调试过程截图(1)主节点:namenode(2)配置jdk: 第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描

11、述、实验数据记录,实验现象记录,实验过程发现的问题等)1调试方法描述(3)配置ssh:(4) 配置Hadoop第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) 2实验输入数据记录输入两个txt文件:代表工厂表的文件(factory.txt)和代表地址表的文件(adsress.txt) 第二部分:实验调试与结果分析(可加页)3 实验输出数据记录运行过程输入的命令如下所示:删除已经存在的output文件夹(包括子目录):hadoop fs -rmr output在hadoop指定目录内创建新目录: hadoop fs -mkd

12、ir input将factory.txt文件夹存储至hadoop: hadoop fs -put factory input将address.txt文件夹存储至hadoop: hadoop fs -put address input运行已经打包好的MTJoin.java文件: hadoop jar MTJoin.jar MTJoin input output查看运行结果:hadoop fs -cat output/part-r-00000输入查看结果命令就会按要求输出“工厂名地址名”表,按工厂名排序输出。二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)1结果描述

13、 输入工厂表对应的文件factory.txt和地址表对应的文件address.txt,则按要求输出了“工厂名地址名”表。完成了实验要求。2实验现象分析 在配置Hadoop的过程中遇到了很多问题,因为对Hadoop的不熟悉导致多次重启系统,但是最后还是较好的完成了实现,在实验的规程中并没有出现过于严重的问题。3影响因素讨论 首先我们必须完成Hadoop的集群配置:安装Linux系统,推荐Ubuntu14.03,建议直接使用hadoop作为用户安装、配置jdk、更改环境变量、配置ssh、用jps验证集群是否配置成功,使用多台计算机连接主节点和多个次节点完成多台计算机的并行分布。这些配置的过程对于该

14、实验是非常重要的,只有搭建好了Hadoop才能完成该实验。同时设计好数据文件也会直接影响数据的输出。4算法分析(包括时间和空间) 若工厂表长度为N,地址表的长度为M,则时间复杂度为O(N*M),空间复杂度为O(1)。第二部分:实验调试与结果分析(可加页)二、 实验小结、建议及体会 多表关联和单表关联相似,都类似于数据库中的自然连接。相比单表关联,多表关联的左右表和连接列更加清楚。所以可以采用和单表关联的相同的处理方式,map识别出输入的行属于哪个表之后,对其进行分割,将连接的列值保存在key中,另一列和左右表标识保存在value中,然后输出。reduce拿到连接结果之后,解析value内容,根

15、据标志将左右表内容分开存放,然后求笛卡尔积,最后直接输出。在进行该多表关联之前我们必须完成Hadoop的集群配置:安装Linux系统,推荐Ubuntu14.03、配置jdk、更改环境变量、配置ssh、用jps验证集群是否配置成功,使用多台计算机连接主节点和多个次节点完成多台计算机的并行分布。然后设计代表工厂表的factory.txt文件和代表地址表的address.txt文件,该文件作为输入文件。输入“hadoop fs -rmr output”命令删除已经存在的output文件夹(包括子目录),输入“hadoop fs -mkdir input”命令在hadoop指定目录内创建新目录。输入“hadoop fs -put factory input”命令将factory.txt文件夹存储至hadoop;输入“hadoop fs -put address input”命令将address.txt文件夹存储至hadoop;输入“hadoop jar MTJoin.jar MTJoin input output”命令运行已经打包好的MTJoin.java文件;输入“hadoop fs -cat output/part-r-00000”命令查看运行结果。运行结果就会输出“工厂名地址名”表。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁