文章目录

  • 一、提出任务
  • 二、任务进行
    • (一)准备数据
      • 1、在虚拟机上创建文本文件
      • 2、上传文件到HDFS指定目录
    • (二)实现步骤
      • 1、创建Maven项目
      • 2、添加相关依赖
      • 3、创建日志属性文件
      • 4、创建成绩映射器类
      • 5、创建成绩驱动器类
      • 6、启动成绩驱动器类,查看结果
      • 7、创建成绩归并器类
      • 8、修改成绩驱动器类
      • 9、启动成绩驱动器列,查看结果

一、提出任务

  • 计算灭个同学的总分与平均分

二、任务进行

(一)准备数据

  • 启动hadoop服务
1、在虚拟机上创建文本文件
  • 创建calcscore目录,在里面创建score.txt文件

2、上传文件到HDFS指定目录
  • 创建/calcscoreinput目录
  • 命令:hdfs dfs -mkdir -p /calcscore/input

  • 将文本文件score.txt,上传到HDFS的/calcscore/input目录
  • 命令: hdfs dfs -put score.txt /calcscore/input

(二)实现步骤

1、创建Maven项目
  • Maven项目 : CalcScore
2、添加相关依赖
  • pom.xml文件里添加hadoopjunit依赖
<dependencies>                                      <!--hadoop客户端-->                                <dependency>                                    <groupId>org.apache.hadoop</groupId>        <artifactId>hadoop-client</artifactId>      <version>3.3.4</version>                    </dependency>                                   <!--单元测试框架-->                                   <dependency>                                    <groupId>junit</groupId>                    <artifactId>junit</artifactId>              <version>4.13.2</version>                   </dependency>
</dependencies>                                     
3、创建日志属性文件
  • resources目录里创建log4j.properties文件
log4j.rootLogger=ERROR, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/calcscore.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
4、创建成绩映射器类
  • net.xxr.mr里创建ScoreMapper
package net.xxr.mr;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;/*** 功能:成绩映射器类* 作者:xxr* 日期:2022年12月17日*/
public class ScoreMapper extends Mapper <LongWritable, Text, Text, IntWritable>{@Overrideprotected void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException {// 获取行内容String line = value.toString();// 按空格拆分得到字段数组String[] fields = line.split(" ");// 获取姓名String name = fields[0].trim();// 遍历各科成绩for (int i = 1; i < fields.length; i++) {// 获取成绩int score = Integer.parseInt(fields[i].trim());// 写入<姓名,成绩>键值对context.write(new Text(name), new IntWritable(score));}}
}
5、创建成绩驱动器类
  • net.xxr.mr包里创建ScoreDriver
package net.xxr.mr;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.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;import java.net.URI;/*** 功能:成绩驱动器类* 作者:xxr* 日期:2022年12月17日*/
public class ScoreDriver {public static void main(String[] args) throws Exception {// 创建配置对象Configuration conf = new Configuration();// 设置数据节点主机名属性conf.set("dfs.client.use.datanode.hostname", "true");// 获取作业实例Job job = Job.getInstance(conf);// 设置作业启动类job.setJarByClass(ScoreDriver.class);// 设置Mapper类job.setMapperClass(ScoreMapper.class);// 设置map任务输出键类型job.setMapOutputKeyClass(Text.class);// 设置map任务输出值类型job.setMapOutputValueClass(IntWritable.class);// 定义uri字符串String uri = "hdfs://master:9000";// 创建输入目录Path inputPath = new Path(uri + "/calcscore/input");// 创建输出目录Path outputPath = new Path(uri + "/calcscore/output");// 获取文件系统FileSystem fs =  FileSystem.get(new URI(uri), conf);// 删除输出目录(第二个参数设置是否递归)fs.delete(outputPath, true);// 给作业添加输入目录(允许多个)FileInputFormat.addInputPath(job, inputPath);// 给作业设置输出目录(只能一个)FileOutputFormat.setOutputPath(job, outputPath);// 等待作业完成job.waitForCompletion(true);// 输出统计结果System.out.println("======统计结果======");FileStatus[] fileStatuses = fs.listStatus(outputPath);for (int i = 1; i < fileStatuses.length; i++) {// 输出结果文件路径System.out.println(fileStatuses[i].getPath());// 获取文件系统数据字节输入流FSDataInputStream in = fs.open(fileStatuses[i].getPath());// 将结果文件显示在控制台IOUtils.copyBytes(in, System.out, 4096, false);}}
}
6、启动成绩驱动器类,查看结果
  • 运行ScoreDriver

7、创建成绩归并器类
  • net.xxr.mr包里创建ScoreReducer类
package net.xxr.mr;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;
import java.text.DecimalFormat;/*** 功能:成绩归并器类* 作者:xxr* 日期:2022年12月17日*/
public class ScoreReducer extends Reducer<Text, IntWritable, Text, NullWritable> {@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context)throws IOException, InterruptedException {// 声明变量int count = 0; // 科目数int sum = 0; // 总分double avg = 0; // 平均分// 遍历迭代器计算总分for (IntWritable value : values) {count++; // 科目数累加sum += value.get(); // 总分累加}// 计算平均分avg = sum * 1.0 / count;// 创建小数格式对象DecimalFormat df = new DecimalFormat("#.#");// 拼接每个学生总分与平均分成绩信息String scoreInfo = "(" + key + "," + sum + "," + df.format(avg) + ")";// 写入键值对context.write(new Text(scoreInfo), NullWritable.get());}
}
8、修改成绩驱动器类
  • 设置Reducer类及其输出键值类型
9、启动成绩驱动器列,查看结果
  • 运行ScoreDriver

大数据:计算学生成绩相关推荐

  1. 标准差 php,PHP基于方差和标准差计算学生成绩的稳定性示例

    本文实例讲述了PHP基于方差和标准差计算学生成绩的稳定性.分享给大家供大家参考,具体如下: 项目中的学生端有处个人成长档案模块,要求依据学生近期十次考试成绩通过波动采集分析学生的成绩稳定性.学过数学都 ...

  2. 大数据统计分析毕业设计_大数据时代的成绩管理与数据分析 毕业设计论文

    I 大数据时代的成绩管理与数据分析 专业:通信工程 摘 要 随着新世纪我们进入信息时代以来,科学技术越来越发达.在社会的各个层次,都在 加强自身的信息化管理.现在的信息管理系统已经成为各行各业中应用非 ...

  3. 【ATF】林伟:大数据计算平台的研究与实践

      2016 ATF阿里技术论坛于4月15日在清华大学举办,主旨是阐述阿里对世界创新做出的贡献.阿里巴巴集团技术委员会主席王坚,阿里巴巴集团首席技术官(CTO)张建锋(花名:行癫),阿里巴巴集团首席风 ...

  4. 王坚十年前的坚持,才有了今天世界顶级大数据计算平台MaxCompute...

    如果说十年前,王坚创立阿里云让云计算在国内得到了普及,那么王坚带领团队自主研发的大数据计算平台MaxCompute则推动大数据技术向前跨越了一大步. 数据是企业的核心资产,但十年前阿里巴巴的算力已经无 ...

  5. 王坚十年前的坚持,才有了今天世界顶级大数据计算平台MaxCompute

    2019独角兽企业重金招聘Python工程师标准>>> 如果说十年前,王坚创立阿里云让云计算在国内得到了普及,那么王坚带领团队自主研发的大数据计算平台MaxCompute则推动大数据 ...

  6. 数据蒋堂 | 大数据计算语法的SQL化

    作者:蒋步星 来源:数据蒋堂 本文共1602字,建议阅读5分钟. 通过本文为大家解读为什么现在SQL变成了当前大数据计算语法的一个发展倾向. 回归SQL是当前大数据计算语法的一个发展倾向.在Hadoo ...

  7. 华为云大数据存储的冗余方式是三副本_阿里云大数据产品 | 大数据计算

    阿里云大数据计算产品包括MaxCompute.E-MapReduce和实时计算(Alibaba Cloud Realtime Compute). 一.MaxCompute 1.MaxCompute概述 ...

  8. 腾讯 PB 级大数据计算如何做到秒级?

    天穹 SuperSQL 是腾讯自研,基于统一的 SQL 语言模型,面向机器学习智能调优,提供虚拟化数据和开放式计算引擎的大数据智能融合平台.在开放融合的 Data Cloud 上,业务方可以消费完整的 ...

  9. 我们怎样确保从大数据计算中获得价值

    我们怎样确保从大数据计算中获得价值 支持大数据方案并不是在硬件以及软件层次终止,企业要想真正地从大数据中受益,领导者必须改变思考与对待信息的方式.    我们怎样确保从大数据计算中获得价值? 当所有可 ...

  10. python做大数据的框架_Python+大数据计算平台,PyODPS架构手把手教你搭建

    原文链接:http://click.aliyun.com/m/13965/ 在2016年10月的云栖社区在线培训上,来自阿里云大数据事业部的秦续业分享了<双剑合壁--Python和大数据计算平台 ...

最新文章

  1. Apache 配置关闭文件目录浏览
  2. python music21将音符转为mid格式音乐
  3. Spring MVC漏洞学习总结
  4. python安装pyautogui遇到的gbk异常解决
  5. 单实例数据库和多实例数据库
  6. Windows XP中的通用即插即用
  7. 根据图片名批量创建文件夹
  8. 有监督学习,无监督学习,半监督学习和强化学习
  9. python训练模型一直循环怎么办_用pycharm编写程序进行模型训练时总是有memory error错误,如何解决?...
  10. DataHunter完成千万级A轮融资 打造数据协作平台
  11. thinkphp5.1接入银联支付
  12. Centos系统如何开启关闭防火墙
  13. 组件、Prop属性的基本用法
  14. 基于Java Swing编写的简易运费计算工具
  15. PageRank 计算博客园用户排名
  16. Go: 模拟一张银行卡存、取、查的功能(综合练习)
  17. 2021年陕西省安全员C证考试内容及陕西省安全员C证考试资料
  18. 阿迪卫衣79/茅台茅韵两瓶149/南极人内裤4条14.9/八杯水九件套59.9
  19. python培训广告语
  20. Redis在手,跟我走

热门文章

  1. OrCAD原理图绘制使用操作
  2. 云原生k8s的盘古开天辟地
  3. 【报告分享】京东到家休闲食品即时消费趋势报告-京东到家数据研究院(附下载)
  4. 2020同远728亲子节“看见美好”公益主题论坛在渝圆满落幕
  5. 解决ifconfig command not found 问题
  6. STM32F4结合ESP8266上传信息到one_net(中国移动物联网云台)的总结(含客户端查询)
  7. php 同步微信大量粉丝在数据表,微粉丝—— 微信加粉统计系统/复制统计准确率90%以上...
  8. 【影像组学】CT数据与MRI数据
  9. O034、 Nova Pause / Resume Instance 操作详解
  10. matlab的estimate函数,matlab的estimate函数输出值什么意思 [fit3 varcov logL info]=estimate(mdl,a)...