Hadoop数据处理 (2020年大二上实训)
一、项目背景
本次实训内容为汽车销售数据统计分析项目。通过这个项目,加深对HDFS分布式文件系统和MapReduce分布式并行计算框架的理解,熟练掌握和应用,并且体验大数据企业实战项目的开发过程,积累实际项目开发的经验。
二、项目开发实战
(一)设计思路分析
1.任务七:
统计分析不同车型销售数据我们的需求是统计某一个月份各个类型车辆的总销售量,在这里,我们以9月份为例进行统计,那么需要过滤出9月份的汽车总销售数组,然后按照类型分组,最后针对每组中的数据进行统计即可。Map阶段:首先,先写一个Map类继承于Mapper,重写map方法,在Map类下筛选出月份为“9”的月份,在这里用到了equals()方法来比较字符串中的数据是不是为“9”,还有用到了trim()方法去除空的部分,之后用context.write()方法输出key,value值Reduce阶段:之后,写的Reduce类继承于Reducer,重写rduce方法,在Reduce类下计算汽车的销售数量。首先定义一个存放销售总数的数据类型并赋值,然后用for()遍历整个数组进行计算总数,最后将计算的结果输出。Job阶段:创建main函数,new一个Job对象,新建出Job任务,分别设置Job运行的主类,设置Job运行时的Mapper和Reducer,设置Map的中间输出结果,设置Job的输出类型,设置Job处理的输入文件路径和输出文件路径,最后提交Job任务。
2.任务八:
通过不同类型(品牌)汽车销售情况统计发动机型号和燃料种类若要统计不同品牌车辆的各个发动机型号和燃油种类,那么需要按照品牌、发动机型号和燃油种类进行分组,然后将分组之后的内容输出即可。Map阶段:在Map阶段首先先进行分组,需要按照品牌、发动机型号和燃油种类进行分组,csv表格中的第8列,第13列以及第16列分别表示品牌,发动机型号,燃油种类,先定义一个String类型的数组str[],数组中下标从0开始,所以品牌,发动机型号,燃油种类在数组中分别表示为str[7],str[12],str[15],之后context输出key,value值,即品牌,发动机型号和燃料种类。Reduce阶段:Reduce继承Reducer,重写reduce方法,由于此任务只需要统计不同品牌下发动机型号和燃油种类,不需要计算数量,因此不需要使用到for()以及计算的操作,只需要最后输出key,value时输出的值为一个文本格式的空白文本即可。Job阶段:创建main函数,new一个Job对象,新建出Job任务,分别设置Job运行的主类,设置Job运行时的Mapper和Reducer,设置Map的中间输出结果,设置Job的输出类型,设置Job处理的输入文件路径和输出文件路径,最后提交Job任务。
(二)代码设计编写
注://注释部分为代码解释说明
任务七: 统计分析不同车型销售数据
代码部分如下:
package com.jsnl; import org.apache.hadoop.io.Text; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; //写一个Map类继承Mapper类 class Map extends Mapper
任务八:统计发动机型号和燃料种类
代码部分如下:
package com.jsnl; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; //Map类继承Mapper类 class Map extends Mapper
(三)运行结果展示
任务七: 统计分析不同车型销售数
三、实训感受
通过为期一周的Hadoop实训,在老师的指导下完成了这 周的实训任务。通过一周的实训学习,大致了解了这个框架,大体 、能够自行编写一个简单的MapReduce程序。 实训第一天,老师给出任务,让我们对汽车销售数据进行统 计分析。第一天的任务是给出一个基本框架,在已有的代码上填 空。之后的第二天第三天以循序渐进的过程,给出的代码越来越 少,需要自己编写的代码越来越多,直到后面不给代码框架,完全自 己编写代码。老师通过指导后让我们以独立思考进行代码编程的 方式,能够提高我们的独立思考能力和编程能力。由于此前的实 验 没有理解透原理,没有深入分析代码含义,于是我开始尝试着分析 了一下map,reduce函数究竟是怎样写成的。此前在大 一学的Java基础知识不牢固以及对mapreduce原理的不够 熟悉,虽然搜索了相关资料,但错误还是难以避免。实验过程中遇 到了许多Java基础语法上的问题,比如类的继承,方法重载,强制 类型转换问题,hadoop中对mapreduce的原理还不够了解 。但最终通过老师指导,还有CSDN 网站以及百度的参考和自己的独立思考,最终都解决了出现的问 题。 因此,通过这次对汽车销售数据统计分析项目,学到了许多 。提高了我对Java代码的编写能力,加深了对Hadoop的相关 组件以及他们的原理的认识,基本了解了HDFS分布式文件系统 和MapReduce分布式并行计算框架,并且能够熟练掌握和应 用,还体验到了大数据企业实战项目的开发过程,积累实际项目开 发的经验。



