基于Hadoop的优良机器分析报告.docx
- 文档编号:28304390
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:15
- 大小:767.40KB
基于Hadoop的优良机器分析报告.docx
《基于Hadoop的优良机器分析报告.docx》由会员分享,可在线阅读,更多相关《基于Hadoop的优良机器分析报告.docx(15页珍藏版)》请在冰豆网上搜索。
基于Hadoop的优良机器分析报告
《云计算》
课程设计报告书
题目:
基于Hadoop的优良机器分析
姓名:
***
学号:
********
班级:
********
指导教师:
****
设计日期:
2021年6月19日至2021年6月30日
第一章实验目的1
第二章算法设计与描述2
第三章程序设计3
第四章程序运行环境及结果7
第五章关键问题及解决方法14
第六章小结15
第一章实验目的
1.1实验目的:
随着科技的发展,如今机器替代人工的情况越来越多,许多行业对机器加工部件的需求也很大,比如汽车变速箱的轴承加工中,不仅人工加工难度高,并且精度要求高。
所以这要求每一台生产轴承的机器都必须性能优良,良品率高于90%。
故在每一台生产轴承的机器出厂前都需要对机器进行实验生产,查看其生产结果是否达标,如果不达标则需要进行重新校准,再进行重新验证。
本次实验中基于轴承生产机器的生产数据,通过hadoop进行计算,分析出某台机器一天的生产数据中,良品的个数,及其通过结果判断该机器是否达标。
第二章算法设计与描述
2.1Hadoop平台简介
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。
充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(DistributedFileSystem),其中一个组件是HDFS(HadoopDistributedFileSystem)。
HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(highthroughput)来访问应用程序的数据,适合那些有着超大数据集(largedataset)的应用程序。
HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streamingaccess)文件系统中的数据。
Hadoop的框架最核心的设计就是:
HDFS和MapReduce。
HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。
2.2设计分析。
生产数据的内容中,每一条数据都为:
为时间+序号+产品的情况(良好、中等、错误件)的格式,如:
“2021/03/02number:
0Grade:
excellent”。
每个试生产件都有一个对应的产品情况字段,则可以利用对Grade:
excellent字段的计算分析,统计该字段的个数,得到本次试生产的情况,如果优良的字段占比较少,则说明该加工轴承的机器不大标,需要从新进行校验,本次实验数据为一万条。
2.3设计原理
利用MapReduce框架设计,在Map过程将输入文本按空格进行拆分,并对数据进行初步统计,将各个字段及字段频率进行组合作为Map过程输出的value值,将Map过程的Key值设为统一固定值。
在Reduce过程获取Map过程的输出,拆分value值,获取并汇总统计出所有字段的频率。
2.4设计流程图
具体流程图如下,先获取目标文件的相应数据,再把结果输入到map中,再把map处理的结果作为Reduce的输入,最终把Reduce的结果输出到文件中,即可对文件进行查看分析。
图1流程图
第三章程序设计
3.1程序说明
1.定义TokenizerMapper类,并重新写map函数。
在map函数中将每个字段进行一一拆解出来,并且进行打标签,进行初步统计后放入Map集合中,并把结果给于Reducer进行处理。
2.定义IntSumReducer类,重新对reduce方法进行编写。
对Map过程中发送过来的键值对,拆分value值取出字段及对应字段频率,进行工单的相关字段进行统计。
3.主方法main中。
1)首先通过Jobjob=Job.getInstance(conf,"wordcount");封装计算程序的Mapper和reducer,封装输入和输出。
2)其次通过job.setJarByClass(WordCount.class);设置计算程序的主驱动类。
3)接着通过job.setMapperClass(WordCount.TokenizerMapper.class);设置Mapper类和通过job.setReducerClass(WordCount.IntSumReducer.class);设置Reducer类。
4)然后设置reducer的输出类型:
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
3.2WordCount.java代码
packagewordcount;
importjava.io.IOException;
importjava.util.Date;
importjava.util.Iterator;
importjava.util.StringTokenizer;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.Path;
importorg.apache.hadoop.io.IntWritable;
importorg.apache.hadoop.io.Text;
importorg.apache.hadoop.mapreduce.Job;
importorg.apache.hadoop.mapreduce.Mapper;
importorg.apache.hadoop.mapreduce.Reducer;
importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;
importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
importorg.apache.hadoop.util.GenericOptionsParser;
publicclassWordCount{
publicWordCount(){
}
publicstaticvoidmain(String[]args)throwsException{
//Datedata=newDate();
//Calendercal=Calender.getInstance();
//System.out.print("开始运行时间--"+data);
//System.out.println(System.currentTimeMillis());
longa=System.currentTimeMillis();
//加载配置文件
Configurationconf=newConfiguration();
String[]otherArgs=(newGenericOptionsParser(conf,args)).getRemainingArgs();
if(otherArgs.length<2){
System.err.println("Usage:
wordcount
System.exit
(2);
}
Jobjob=Job.getInstance(conf,"wordcount");
job.setJarByClass(WordCount.class);
job.setMapperClass(WordCount.TokenizerMapper.class);
job.setCombinerClass(WordCount.IntSumReducer.class);
job.setReducerClass(WordCount.IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
for(inti=0;i FileInputFormat.addInputPath(job,newPath(otherArgs[i])); } FileOutputFormat.setOutputPath(job,newPath(otherArgs[otherArgs.length-1])); longb=System.currentTimeMillis()-a; System.out.print("运行时间"+b+"ms"); System.exit(job.waitForCompletion(true)? 0: 1); //System.out.print("结束时间--"+data); } publicstaticclassIntSumReducerextendsReducer privateIntWritableresult=newIntWritable(); publicIntSumReducer(){ } publicvoidreduce(Textkey,Iterable intsum=0; IntWritableval; for(Iteratori$=values.iterator();i$.hasNext();sum+=val.get()){ val=(IntWritable)i$.next(); } this.result.set(sum); context.write(key,this.result); } } publicstaticclassTokenizerMapperextendsMapper privatestaticfinalIntWritableone=newIntWritable (1); privateTextword=newText(); publicTokenizerMapper(){ } publicvoidmap(Objectkey,Textvalue,Mapper StringTokenizeritr=newStringTokenizer(value.toString()); while(itr.hasMoreTokens()){ this.word.set(itr.nextToken()); context.write(this.word,one); } }} } 第四章程序运行环境及结果 4.1系统环境 1)系统: Ubuntu16.04虚拟机 2)jdk版本: 1.8.0_161 3)Hadoop版本: 2.7.3 4.2运行环境 1、先在自己的window电脑中下载好相应的包,然后通过WinSCP软件实现文件的传输到Linux中。 2、Hadoop安装检验 2、Jdk安装检验 3、配置jdk环境变量为: exportJAVA_HOME=/usr/local/java exportJRE_HOME=$JAVA_HOME/jre exportCLASSPATH=.: $JAVA_HOME/lib: $JRE_HOME/lib exportPATH=$PATH: $JAVA_HOME/bin 4、修改配置文件core-site.xml 5、修改配置文件hdfs-site.xml 4.3实验的输入 1、文件的输入内容如下图所示,第一列为机器生产的试件的时间,第二列为试件的编号,第三列为该试件产品的情况,是否优良或为错误件。 文件中总计产品试件一万件,本次实验用到的是Grade字段的内容,由于每个编号的试件结果值只有三种可能,只需统计三种可能的出现次数,即可分析知道该生产轴承的机器,是否达到生产的标准。 4.4实验操作 1、开启hadoop,通过在终端中输入: cd/usr/local/hadoop进入到Hadoop文件夹中,然后输入命令: sbin/start-all.sh,进行开启Hadoop的运行。 2、上传试生产的数据文件word2.txt。 在终端送输入命令行: hadoopfs-put/home/j/Deskop/work2.txt/input。 3、上传成功后可在eclipse中刷新查看到相应的文件。 4、在eclipse中创建相应的包和类,并编写程序、运行。 运行后java控制台输出的信息如下图所示,从中可看出本次对一万条数据进行计算,最终运行消耗的时间为1562ms。 5、在运行后,eclipse中多出了个part-r-00000的文件,如下图所示,该文件为结果的输出文件。 6、结果的查看,打开结果输出文件可查看到如下的信息。 7、网页端查看Hadoop详情。 4.5实验结果分析 对输出结果进行分析,从时间的出现次数可以判断出该输入文件的数据量为一万条,从输出结果的第二行可看出,本次生产中产品中,优良的件数为7437件,中等的件数为2048件,错差件的件数为515件。 统计即可得到大概值: 优良率: 74.3%,中等率: 20.4%,差错率: 0.05%。 本生产机器的差错率较低,但中优良率未到90%的达标,还需调试,不可直接投入使用。 数据处理分析,本次实验所用的所有输入数据为某台生产机器,一天中模拟生产试件的全部信息,本次数据处理量为10000条,通过运行可看出其单机运行最终运行消耗的时间为1562ms。 第五章关键问题及解决方法 在本次的实训中,从环境的搭建到,到程序的编写,再到结果的分析等,其中遇到了许多的问题,从中也学习到了很多的东西,选取了其中一些进行分享,具体如下。 1)出现报错: Exceptioninthread"main"org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Inputpathdoesnotexist: file: /home/hadoop/workspace/WordCountProject/input。 在查找文献后知道问题。 Eclipse运行MapReduce程序时,会读取Hadoop-Eclipse-Plugin的Advancedparameters作为Hadoop运行参数,如果我们未进行修改,则默认的参数其实就是单机(非分布式)参数,因此程序运行时是读取本地目录而不是HDFS目录,就会提示Input路径不存在。 解决方法为: 将配置文件复制到项目中的src目录,来覆盖这些参数。 让程序能够正确运行 2)无法开启Hadoop问题,在安装成功,可查看到Hadoop的版本后,进行开启Hadoop,但只无法找到命令各种报错。 在询问同学后发现,进入的目录有误,在进入到正确的目录后,重新运行成功开启了Hadoop。 3)./start-all.sh启动Hadoop报JAVA_HOMEisnotset,在XX中查询了相关的关键词后,知道原因,其中的JAVA_HOME环境没配置正确,在重新查看配置后发现,配置的路径出现了问题,在重新配置正确后,进行运行,问题得到解决。 第六章总结 经过本次的实验,我更加了解了Hadoop相关环境的搭建安装、运行、分析。 数据处理与生活问题解决的联合,在一开始的搭建中由于是使用主机中真实安装的ubuntu14进行实验,遇到了更多的问题,如文件的window10下载的文件传输到Linux中,Linux的网络操作等问题,由于对Linux不够熟练,导致进度较慢,虽然搭建成功了hadoop的运行环境,但最终在误删了几个文件后,Linux宕机了,无法开机。 最终和舍友共用一台电脑进行了后序的实验,为了本次实验的正常进行,本次实验的数据也进行了修改,由于原数据中存在中文,在处理数据时出现乱码,故对中文部分进行了替换整理,数据共一万条。 在经过本次实验对生产数据的分析,进而判断机器的生产是否达标。 结合生活与运用,更加发现了云计算的强大,本次数据一万条,但只是一台机器,一天的生产量,如果一天需要测试一百台机器,还要分析机器的其他性能,那每天的数据量都是非常大的,对于一台电脑来说是很难解决如此庞大的数据量的,故需要进行分布式计算和分布式存储。 结合生活的技能运用也提高了我对本次Hadoop的认知。 在加下来的时间中,我还会去学习这一项技术,并结合生活中的需求进行运用。 也相信云计算的路会越走越远。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Hadoop 优良 机器 分析 报告