java大数据hadoop2.9.2 Java编写Hadoop分析平均成绩

news2024/11/19 9:24:15

1、准备文件,例如score.txt,内容如下:

zs k1 88
ls k1 98
ww k1 78
zs k2 88
ls k2 98
ww k2 78
zs k3 88
ls k3 98
ww k3 78

2、创建maven项目

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-common</artifactId>
			<version>2.9.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-client</artifactId>
			<version>${hadoop.version}</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-hdfs</artifactId>
			<version>${hadoop.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-mapreduce-client-core</artifactId>
			<version>${hadoop.version}</version>
		</dependency>

3、编写代码

(1)读取文件数据

package cn.com.dfs.score;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;
import org.apache.hadoop.util.LineReader;

public class ScoreRecoderReader extends RecordReader<Text, Text> {
	// 起始位置(相对整个分片而言)
	private long start;
	// 结束位置(相对整个分片而言)
	private long end;
	// 当前位置
	private long pos;
	// 文件输入流
	private FSDataInputStream fin = null;
	// key、value
	private Text key = null;
	private Text value = null;
	// 定义行阅读器(hadoop.util包下的类)
	private LineReader reader = null;

	@Override
	public void close() throws IOException {
		if (this.fin != null) {
			this.fin.close();
		}
	}

	@Override
	public Text getCurrentKey() throws IOException, InterruptedException {
		return this.key;
	}

	@Override
	public Text getCurrentValue() throws IOException, InterruptedException {
		return this.value;
	}

	@Override
	public float getProgress() throws IOException, InterruptedException {
		if (start == end) {
			return 0.0f;
		} else {
			return Math.min(1.0f, (pos - start) / (float) (end - start));
		}
	}

	@Override
	public void initialize(InputSplit split, TaskAttemptContext context) throws IOException, InterruptedException {
		// 获取分片
		FileSplit fileSplit = (FileSplit) split;
		// 获取起始位置
		start = fileSplit.getStart();
		// 获取结束位置
		end = start + fileSplit.getLength();
		// 创建配置
		Configuration conf = context.getConfiguration();
		// 获取文件路径
		Path path = fileSplit.getPath();
		// 根据路径获取文件系统
		FileSystem fileSystem = path.getFileSystem(conf);
		// 打开文件输入流
		fin = fileSystem.open(path);
		// 找到开始位置开始读取
		fin.seek(start);
		// 创建阅读器
		reader = new LineReader(fin);
		// 将当期位置置为1
		pos = this.start;
	}

	@Override
	public boolean nextKeyValue() throws IOException, InterruptedException {
		boolean bool = false;
		Text lineText = new Text();
		// 读取一行数据
		int count = this.reader.readLine(lineText);
		if(count != 0) {
			String line = lineText.toString();
			String[] content = line.split(" ");
			this.key = new Text(content[0]);
			this.value = new Text(content[1]+":"+content[2]);
			bool = true;
		}
		return bool;
	}

}

(2)格式化

public class ScoreInputFormat extends FileInputFormat<Text, Text> {

	@Override
	public RecordReader<Text, Text> createRecordReader(InputSplit arg0, TaskAttemptContext arg1)
			throws IOException, InterruptedException {
		return new ScoreRecoderReader();
	}

}

(3)mapper操作

package cn.com.dfs.score;

import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

public class ScoreMapper extends Mapper<Text, Text, Text, DoubleWritable> {
	// 从输入的value中获取分数
	// 输出key-名称 value-》分数
	@Override
	protected void map(Text key, Text value, Mapper<Text, Text, Text, DoubleWritable>.Context context)
			throws IOException, InterruptedException {
		String kmScore = value.toString();
		String[] content = kmScore.split(":");
		int score = Integer.parseInt(content[1]);

		context.write(key, new DoubleWritable(score));
	}

}

(4)reduce操作

package cn.com.dfs.score;

import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

public class ScoreReduce extends Reducer<Text, DoubleWritable, Text, DoubleWritable> {

	@Override
	protected void reduce(Text arg0, Iterable<DoubleWritable> arg1,
			Reducer<Text, DoubleWritable, Text, DoubleWritable>.Context arg2) throws IOException, InterruptedException {
		double sum = 0;
		int count = 0;
		for(DoubleWritable num:arg1) {
			sum += num.get();
			count++;
		}
		sum = sum/count;
		arg2.write(arg0, new DoubleWritable(sum));
	}

}

(5)执行操作

package cn.com.dfs.score;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.DoubleWritable;
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 ScoreDriver {

	public static void main(String[] args) throws Exception{
		Configuration conf = new Configuration();
		Job job = Job.getInstance(conf, "My WordCount Demo Job");
		
		job.setJarByClass(ScoreDriver.class);
		job.setInputFormatClass(ScoreInputFormat.class);
		job.setMapperClass(ScoreMapper.class);
		job.setReducerClass(ScoreReduce.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(DoubleWritable.class);
		
		FileInputFormat.addInputPath(job, new Path("/demo/score/input"));
		FileOutputFormat.setOutputPath(job, new Path("/demo/score/output"));
		
		System.exit(job.waitForCompletion(true)?0:1);
	}

}

这几个类编写完成后,执行maven打包操作

mvn install

4、上传文件

例如把打包的maven项目的jar和score.txt文件上传到自己的目录/usr/local/jar

cd /usr/local/jar

hdfs dfs -mkdir /demo/score/input

hdfs dfs -put ./score.txt /demo/score/input

下面的命令是执行jar包的类中的main函数

hadoop jar ./HadoopDfs-0.0.1-SNAPSHOT.jar cn.com.dfs.score.ScoreDriver

任务开始执行,执行完成如下

hdfs dfs -cat /demo/score/output/part-r-00000

part-r-00000任务执行完成生成的,会分析出每个学生的平均成绩

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1384623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

哈希表与哈希算法(Python系列30)

在讲哈希表数据结构和哈希算法之前&#xff0c;我想先刨析一下数组和python中的列表 首先来讲一下数组&#xff0c;我想在这提出一个疑问&#xff1a; 为什么数组通过索引查询数据的时间复杂度为O(1)&#xff0c;也就是不管数组有多大&#xff0c;算法的执行时间都是不变的。…

《SPSS统计学基础与实证研究应用精解》视频讲解:SPSS 软件的安装要求、启动与关闭

《SPSS统计学基础与实证研究应用精解》1.6 视频讲解 视频为《SPSS统计学基础与实证研究应用精解》张甜 杨维忠著 清华大学出版社 一书的随书赠送视频讲解1.6节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。本书旨在手把手教会使…

【ROS2】使用C++实现简单的发布订阅方

1 构建自定义数据类型 1、自定义消息类型Student 1.1 创建base_interfaces_demo包 1.2 创建Student.msg文件 string name int32 age float64 height 1.2 在cmakeLists.txt中增加如下语句 #增加自定义消息类型的依赖 find_package(rosidl_default_generators REQUIRED) # 为…

操作系统复习篇

目录 一、引论 1.1、操作系统的目标 方便性&#xff1a; 有效性&#xff1a; 可扩充性&#xff1a; 开放性&#xff1a; 1.2、操作系统的作用 用户与计算机硬件系统之间的接口&#xff1a; 计算机系统资源的管理者&#xff1a; 实现对计算机资源的抽象&#xff1a; 1…

PDF结构详解

文章目录 介绍前言高保真的文件什么是PDF&#xff1f;PDF的一些优点版本摘要谁在使用PDF&#xff1f;有用的免费软件谁应该阅读 构建一个简单PDF文件基本PDF语法File StructureDocument ContentPage Content 构建简单PDF文件头目录&#xff0c;交叉引用表和文件尾主要对象图形内…

Github Copilot最全的安装与使用教程:一款非常好用的AI编程工具

Github Copilot最全的安装与使用教程 第一章 安装1.安装 GitHub Copilot2.获取资格第二章 使用1.产生建议1.1 键入你想要完成的操作的注释1.2 CtrlI 2. 接受建议3.查看下一个建议3.接受部分建议4.在新选项卡接受建议5.完成多项功能6.聊天 GitHub Copilot 供经过验证的学生、教师…

DAY7--learning english

一、积累 1.instinct Bro showed me his primal instinct 老兄给我展示他原始的本能&#xff08;返祖现象&#xff09;. 2. assembly Todays assembly is about part of journey. 今天的集会是讲述关于旅程的一部分。 3.aluminum Aluminum Casting Motocycle Engine Cover. …

java基础知识点系列——数据输入(五)

java基础知识点系列——数据输入&#xff08;五&#xff09; 数据输入概述 Scanner使用步骤 &#xff08;1&#xff09;导包 import java.util.Scanner&#xff08;2&#xff09;创建对象 Scanner sc new Scanner(System.in)&#xff08;3&#xff09;接收数据 int i sc…

数据结构.线性表(2)

一、模板 例子&#xff1a; a: b: 二、基本操作的实现 &#xff08;1&#xff09;初始化 &#xff08;2&#xff09;销毁和清空 &#xff08;3&#xff09;求长度和判断是否为空 &#xff08;4&#xff09;取值 &#xff08;5&#xff09;查找 &#xff08;6&#xff09;插入 &…

使用VS2015在win7 x64上编译调试FFmpeg(附源码和虚拟机下载)

1. 前言 在文章《使用VS2017在win10 x64上编译调试FFmpeg&#xff08;附源码和虚拟机下载&#xff09;》中&#xff0c;我们在win10VS2017的环境下基于开源项目ShiftMediaProject完成了FFmpeg源码调试环境的配置。在win7VS2015的环境下&#xff0c;ShiftMediaProject配置过程和…

机械工业品电商平台android

文章目录 一、开发组件和项目结构1、分包完成初始化工具1.1 开源库介绍&#xff1a;1.2 框架搭建1.3 自定义application&#xff0c;初始化网络加载库1.4 配置Glide1.5 网络请求响应对象1.6 工具类JSONUtil&Utils 二、环境配置1、将服务器的基地址&#xff0c;填到android&…

【算法练习】leetcode算法题合集之二分查找篇

二分查找 LeetCode69.x的平方根 LeetCode69.x的平方根 只要小于等于就可以满足条件了。 class Solution {public int mySqrt(int x) {int left 0, right x;int ans -1;while (left < right) {int mid (right - left) / 2 left;if ((long) mid * mid < x) {ans mi…

杨中科 EFCore 第二部分 实体配置

实体的配置 约定配置 主要规则: 1:表名采用DbContext中的对应的DbSet的属性名。 2:数据表列的名字采用实体类属性的名字&#xff0c;列的数据类型采用和实体类属性类型最兼容的类型。 3:数据表列的可空性取决于对应实体类属性的可空性。 4:名字为Id的属性为主键&#xff0c;如…

isis实验

根据要求制作大概&#xff1a; 使用isis配置路由器&#xff1a; 配置好物理接口地址后配置isis 为实现r1访问r5的环回走r6,需要在r6上制作路由泄露&#xff1a; 在r5上产生r1的路由明细&#xff1a; 全网可达&#xff1a;

Linux学习之网络编程1(纯理论)

写在前面 刚刚更新完Linux系统编程&#xff0c;特别推荐大家去看的Linux系统编程&#xff0c;总共44个小时&#xff0c;老师讲的非常好&#xff0c;我是十天肝完的&#xff0c;每天大概看20集&#xff0c;每天还要以写blog的形式来写笔记来总结一下&#xff0c;虽然这十天有点…

Redis(概述、应用场景、线程模式、数据持久化、数据一致、事务、集群、哨兵、key过期策略、缓存穿透、击穿、雪崩)

目录 Redis概述 应用场景 Redis的线程模式 数据持久化 1.Rdb&#xff08;Redis DataBase&#xff09; 2.Aof&#xff08;Append Only File&#xff09; mysql与redis保持数据一致 redis事务 主从复制&#xff08;Redis集群) 哨兵模式 key过期策略 缓存穿透、击穿、…

Docker安装Jenkins,配置Maven和Java

前言 这是一个java的springboot项目&#xff0c;使用maven构建 安装准备 需要将maven和jdk安装在服务器上&#xff0c;Jenkins需要用到&#xff0c;还有创建一个jenkins的目录&#xff0c;安装命令如下&#xff1a; docker run -d -uroot -p 9095:8080 -p 50000:50000 --n…

UE5 PCG插件场景静态网格模块化、快速搭建场景

PCG图表可以理解为静态网格体图表&#xff0c;里面可以自定义放不同有静态网格体、可以对密度、大小、面积等等在场景实际应中做相应的调整&#xff0c;可以根据地形高度随机生成静态网络体&#xff0c;可以模化作业。大大降低了场景制的时间成本。PCG插件目前需要UE5.2以上的版…

为什么光刻要用黄光

光刻是集成电路&#xff08;IC或芯片&#xff09;制造中的重要工艺之一。简单来说&#xff0c;它是通过使用光掩膜和光刻胶在基板上复制电路图案的过程。 基板将涂覆硅二氧化层绝缘层和光刻胶。光刻胶在被紫外光照射后可以容易地用显影剂溶解&#xff0c;然后在腐蚀后&#xf…

手把手图解教你Java SPI源码分析

原创/朱季谦 我在《Java SPI机制总结系列之开发入门实例》一文当中&#xff0c;分享了Java SPI的玩法&#xff0c;但是这只是基于表面的应用。若要明白其中的原理实现&#xff0c;还需深入到底层源码&#xff0c;分析一番。 这里再重温一下SPI机制的概念&#xff1a;SPI&#…