大数据hadoop参考资料-案例分析

上传人:第*** 文档编号:61707715 上传时间:2018-12-10 格式:DOC 页数:69 大小:1.47MB
返回 下载 相关 举报
大数据hadoop参考资料-案例分析_第1页
第1页 / 共69页
大数据hadoop参考资料-案例分析_第2页
第2页 / 共69页
大数据hadoop参考资料-案例分析_第3页
第3页 / 共69页
大数据hadoop参考资料-案例分析_第4页
第4页 / 共69页
大数据hadoop参考资料-案例分析_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《大数据hadoop参考资料-案例分析》由会员分享,可在线阅读,更多相关《大数据hadoop参考资料-案例分析(69页珍藏版)》请在金锄头文库上搜索。

1、目录目录 第第 1 0 单元单元 练习案例练习案例.2 10.1 案例 1 通过采集的气象数据分析每年的最高温度2 10.2 案例 2:数据去重问题5 10.3 案例 3:数据排序9 10.4 案例 4:平均成绩14 4.编写编写 MAP 代码代码.16 10.5 案例 5:求最大值和最小值20 10.6 案例 6:TOPN 问题.25 2.数据数据25 10.7 案例 7:分析非结构化文件31 10.8 案例 8:获取员工所在部门信息36 第第 1 1 单元单元 西普研究生学员分析西普研究生学员分析.47 11.1 数据准备.47 11.1.1 整理所有学员基本信息.47 11.1.2 项目

2、准备.50 第10单元 练习案例 要点提示:通过几个实际案例,巩固前面学习的相关知识 10.1 案例 1 分析年气象数据最高温度 1原始数据分析 0067011990999991950051507004888888889999999N9+00001+9999999999999999999999 0067011990999991950051512004888888889999999N9+00221+9999999999999999999999 0067011990999991950051518004888888889999999N9-00111+9999999999999999999999 00

3、67011990999991949032412004888888889999999N9+01111+9999999999999999999999 数据说明: 第 15-19 个字符是 year 第 45-50 位是温度表示,+表示零上 -表示零下,且温度的值不能是 9999,9999 表示异 常数据。 第 50 位值只能是 0、1、4、5、9 几个数字。 第一步:在 eclipse 中新建一个项目“TemperatureHight” 。如下图所示 第二步:在项目 src 目录下,右键点击,选择“新建”创建一个类文件名称为 “MaxTemperatureMapper”并指定包名”com.simp

4、le.temperature”。 第三步:在编写“MaxTemperatureMapper”类之前需要把 hadoop 相关的 jar 包导入, 首先在项目根目录下创建一个文件夹并把指定位置中的包放入该文件中。 第四步:把 lib 下所有的 jar 包导入到环境变量,全选 lib 文件夹下的 jar 包文件,右键 点击,选择“build path”“add to build path”,添加后,发现在项目下多一个列表项 “Referenced Libraries” 第四步:让类“MaxTemperatureMapper”继承类 Mapper 同时指定需要的参数类型,根 据业务逻辑修改 map

5、类的内容如下。 package com.simple.temperature; import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class MaxTemperatureMapper extends Mapper private static final in

6、t MISSING = 9999; Override protected void map(LongWritable key, Text value, Mapper.Context context) throws IOException, InterruptedException String line = value.toString();/读取一条记录 String year = line.substring(15, 19);/获取温度数 System.out.println(“year=“+year); int airTemperature; if (line.charAt(45) =

7、+) /判断温度正负 airTemperature = Integer.parseInt(line.substring(46, 50); else airTemperature = Integer.parseInt(line.substring(45, 50); String quality = line.substring(50, 51); System.out.println(“quality: “ + quality); /判断温度是否异常 if (airTemperature != MISSING 第五步:在项目 src 目录下指定的包名”com.simple.temperature”

8、下右键点击,新建一个 类名为“MaxTemperatureReducer “并继承。 package com.simple.temperature; import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; public class MaxTemperatureReducer extends Reducer Override protected void red

9、uce(Text key, Iterable values, Context context) throws IOException, InterruptedException /把Integer.MIN_VALUE = 2147483847作为maxValue的初 始值 int maxValue = Integer.MIN_VALUE; /循环取出最大值 for(IntWritable value: values) maxValue = Math.max(maxValue, value.get(); context.write(key, new IntWritable(maxValue);

10、第五步:在项目 src 目录下指定的包名”com.simple.temperature”下右键点击,新建一个 测试主类名为“MaxTemperature “并指定主方法。 第五步:在项目 src 目录下指定的包名”com.simple.temperature”下右键点击,新建一个 测试主类名为“MaxTemperature “并指定主方法。 package com.simple.temperature; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache

11、.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class MaxTemperature public static void main(String args) throws Exce

12、ption /获取作业对象 Job job = Job.getInstance(new Configuration(); /设置主类 job.setJarByClass(MaxTemperature.class); /设置job参数 job.setMapperClass(MaxTemperatureMapper.class); job.setReducerClass(MaxTemperatureReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); /设置job

13、输入输出 FileInputFormat.addInputPath(job, new Path(“file:/simple/source.txt“); FileOutputFormat.setOutputPath(job, new Path(“file:/simple/output“); System.exit(job.waitForCompletion(true) ? 0 : 1); 第六步:测试结果 10.2 案例 2:数据去重问题 1原始数据 1)file1: 2012-3-1 a 2012-3-2 b 2012-3-3 c 2012-3-4 d 2012-3-5 a 2012-3-6

14、b 2012-3-7 c 2012-3-3 c 2)file2: 2012-3-1 b 2012-3-2 a 2012-3-3 b 2012-3-4 d 2012-3-5 a 2012-3-6 c 2012-3-7 d 2012-3-3 c 数据输出: 2012-3-1 a 2012-3-1 b 2012-3-2 a 2012-3-2 b 2012-3-3 b 2012-3-3 c 2012-3-4 d 2012-3-5 a 2012-3-6 b 2012-3-6 c 2012-3-7 c 2012-3-7 d 2说明 数据去重的最终目标是让原始数据中出现次数超过一次的数据在输出文件中只出 现

15、一次。我们自然而然会想到将同一个数据的所有记录都交给一台 reduce 机器, 无论这个数据出现多少次,只要在最终结果中输出一次就可以了。具体就是 reduce 的输入应该以数据作为 key, 而对 value-list 则没有要求。当 reduce 接收到一个时就直接将 key 复制到输出的 key 中,并将 value 设置成空值。 第一步:创建一个项目 第二步:编写 Mapper 代码 package com.simple.deduplication; import java.io.IOException; import org.apache.hadoop.io.LongWritable

16、; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class DeduplicationMapper extends Mapper public void map(Object key, Text value, Context context) throws IOException, InterruptedException /按行读取信息并作为mapper的输出键,mapper的输出值 置为空文本即可 Text line = value; context.write(line, new Text(“); 第三步:编写 Reducer 代码 package com.simple.deduplication; import java.io.IOException; import org.apache.hadoo

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

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号