Hadoop快速入门+MapReduce案例(赠送17到23年往年真题答案+MapReduce代码文件)-----大数据与人工智能比赛

这篇具有很好参考价值的文章主要介绍了Hadoop快速入门+MapReduce案例(赠送17到23年往年真题答案+MapReduce代码文件)-----大数据与人工智能比赛。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hadoop快速入门+MapReduce案例(赠送17到23年往年真题答案+MapReduce代码文件)-----大数据与人工智能比赛,大数据,hadoop,mapreduce

一.Hadoop快速入门(真题在文章尾)

Hadoop的核心就是HDFS和MapReduce
HDFS为海量数据提供了存储
而MapReduce为海量数据提供了计算框架

Hadoop快速入门+MapReduce案例(赠送17到23年往年真题答案+MapReduce代码文件)-----大数据与人工智能比赛,大数据,hadoop,mapreduce

一.HDFS

整个HDFS有三个重要角色:NameNode(名称节点)、DataNode(数据节点)和Client(客户机)
Hadoop快速入门+MapReduce案例(赠送17到23年往年真题答案+MapReduce代码文件)-----大数据与人工智能比赛,大数据,hadoop,mapreduce

  • NameNode:是Master节点(主节点)
  • DataNode: 是Slave节点(从节点),是文件存储的基本单元,周期性将所有存在的block信息发送给NameNode
  • Client: 与NameNode交互,读取与写入数据
  • Block: Block(块)是HDFS中的基本读写单元;HDFS中的文件都是被分割为block进行储存的;这些块被复制到多个DataNode中。

二.MapReduce

MapReduce其实是一种编程模型。这个模型的核心步骤主要分两部分:Map(映射)Reduce(归约)

当你向MapReduce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每一个Map任务处理输入数据中的一部分,当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce任务的输入数据。Reduce任务的主要目标就是把前面若干个Map的输出汇总到一起并输出。
Hadoop快速入门+MapReduce案例(赠送17到23年往年真题答案+MapReduce代码文件)-----大数据与人工智能比赛,大数据,hadoop,mapreduce
哦,差点忘了,在MapReduce里,为了完成上面这些过程,需要两个角色:JobTrackerTaskTracker
Hadoop快速入门+MapReduce案例(赠送17到23年往年真题答案+MapReduce代码文件)-----大数据与人工智能比赛,大数据,hadoop,mapreduce
JobTracker用于调度和管理其它的TaskTracker。JobTracker可以运行于集群中任一台计算机上。TaskTracker 负责执行任务,必须运行于 DataNode 上。

二.mapreduce案例及其比赛准备

HDFS命令:

  1. 查看目录下的文件 hdfs dfs -ls /score
  2. 将文件上传hdfs上 hdfs dfs -put /score/student.txt(目录) /bean(hdfs中的目录)
  3. 在hdfs上创建文件夹 hdfs dfs -mkdir /test
  4. 查看hdfs上文件内容 hdfs dfs -cat /score/test.txt

pom.xml配置

  1. hadoop-common -v 2.7.6
  2. hadoop-client -v 2.7.6
  3. hadoop-hdfs -v 2.7.6

在xshell中上传并执行

hadoop jar hadoop_hdfs_api-1.0.jar com.dataAhut.phonetraffic.PhoneTrafficSort /score/score.txt /output12

整体java的JDK是8,maven都是8,打包package,注意引入的包都是最新版的MapReduce


double avgScore = sum / count;
String formattedAverage = String.format("%.1f", avgScore);
double avgScore2 = Double.parseDouble(formattedAverage);
// 获取文件数据的路径
    FileSplit fs = (FileSplit) context.getInputSplit();
    String path = fs.getPath().toString();

if(path.contains("student")){
    // 150000 小明 18 男 文科六班
    String student = value.toString();
    String id = student.split(",")[0];
    String k = "#" + student;
    context.write(new Text(id),new Text(k));
    // key150000, value#150000 小明 18 男 文科六班
}else {
    // 1500000 100001 98
    String score = value.toString();
    String id = score.split(",")[0];
    String k = "@" + score;
    context.write(new Text(id),new Text(k));
    // key1500000 value@1500000 100001 98
}


  // 先定义学生为空
String student = null;
// 存放成绩表
ArrayList<String> scores = new ArrayList<>();
for (Text value : values) {
    String line = value.toString();
    // 判断学生信息
    if (line.startsWith("#")){
        // key150000, value#150000 小明 18 男 文科六班
        // 如果是学生表则正常一行读取后放入学生信息中
        student = line.substring(1);
    }else {
        // 成绩表
        scores.add(line.substring(1));
    }
}
// 将学生信息保存到info中,记住是每一行保存一次
String info = student;
for (String score : scores) {
    String s = score.split(",")[2];
    // 150000 小明 18 男 文科六班 98 5
    info = info + "," + s;
}
context.write(new Text(info),NullWritable.get());

Mapper端

Mapper<LongWritable, Text,X,Y >
String lines = value.toString();
String[] data = lines.split(","); // 表格中用的都是“,”,数据间隔的话用“\t”

String name = data[1];

// 输出到reducer端
Context.write(new Text(id),new IntWritable(score));

Reducer端

<X,Y,Text,NullWritable>
// 遍历values
for(IntWritable value : values){
	int score = value.get(); // get()方法是IntWritable中的方法
}

FlowBean实现WritableComparable接口

public class FlowBean implements WritableComparable<FlowBean> {

    // 属性私有化
	private String phone; // 手机号码

    // 提供无参构造方法
    public FlowBean() {
    }

    // 对外提供set、get方法
    、、、、、
    
    // 重写toString方法(这个方法直接映射到hadoop生成的文件格式)
    @Override
    public String toString() {
        return  "电话号码: " + phone + "\t"  + upflow + "\t" + downflow + "\t" + sumflow;
    }

    // 按要求进行排序
    @Override
    public int compareTo(FlowBean other) {
        // 注意一定是get方法,不能用属性
        // 按照总流量进行升序排列
        return this.getSumflow() - other.getSumflow();
        // 按照总流量进行降序排列
        return other.getSumflow() - this.getSumflow();
    }

    @Override
    public int compareTo(PairWritable other) {
        // 先比较first(字符串的比较)
        int result = this.first.compareTo(other.first); // abc  bbb
        if (result == 0) {
            return this.second - other.second;
        }
        return result;
    }

    // 序列化
    @Override
    public void write(DataOutput dataOutput) throws IOException {
        dataOutput.writeUTF(phone);
        dataOutput.writeInt(upflow);
    }

    // 反序列化
    @Override
    public void readFields(DataInput dataInput) throws IOException {
        this.phone = dataInput.readUTF();
        this.upflow = dataInput.readInt();
    }
}

main

Configuration configuration = new Configuration();
Job job = new Job(configuration);

job.setJobName("flowBean");
job.setJarByClass(PhoneTrafficSort.class);

// mapper
job.setMapperClass(FlowBeanMapper.class);
job.setMapOutputKeyClass(FlowBean.class);
job.setMapOutputValueClass(NullWritable.class);

// reducer
job.setReducerClass(FlowBeanReducer.class);
job.setOutputKeyClass(FlowBean.class);
job.setOutputValueClass(NullWritable.class);

FileInputFormat.addInputPath(job,new Path(args[0]));
FileOutputFormat.setOutputPath(job,new Path(args[1]));

boolean b = job.waitForCompletion(true);
System.exit(b ? 0 : 1);
for (String word:words){
 context.write(new Text(word),new LongWritable(1));
}

long sum = 0;
for (LongWritable value : values) {
    // 拿到map集合Text, LongWritable的value:LongWritable
    sum = sum + value.get();
}
// 获取key值,Text
String word = key.toString();

context.write(new Text(word),new LongWritable(sum));

分区

public class MyPartitoner extends Partitioner<FlowBean, NullWritable> {
    @Override
    public int getPartition(FlowBean flowBean, NullWritable nullWritable, int i) {
        if (flowBean.getCourse().equals("algorithm")) {
            return 0;
        } else if (flowBean.getCourse().equals("english")) {
            return 1;
        } else if (flowBean.getCourse().equals("computer")) {
            return 2;
        } else
            return 3;

    }
}

 // 设置分区
job.setPartitionerClass(MyPartitoner.class);
// 设置分区数量
job.setNumReduceTasks(4);
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#导入库
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

df = df.groupby(by=['学校'])['学生人数'].sum()

data = pd.read_csv(r'E:\table.csv')


# 创建散点图
plt.scatter(days, sales, color='red', marker='o', alpha=0.7)  # 设置散点的颜色、标记样式和透明度
# 创建扇形图
plt.figure(figsize=(6, 6))  # 设置图表大小
plt.pie(sales, labels=days, autopct='%1.1f%%', startangle=90, colors=['red', 'blue', 'green', 'yellow'])  # 饼图的颜色和其他参数
# 创建柱状图
plt.bar(days, sales, color='red', alpha=0.7)  # 设置柱子的颜色为红色,alpha为透明度
# 创建折线图
plt.plot(days, sales, color='red')
# 设置图表标题和轴标签
plt.title('销量随天数变化折线图')
plt.xlabel('天数')
plt.ylabel('销量')

# 显示图表
plt.show()

MapReduce四类题型

  1. 正常三类(Mapper、Reducer、Driver)简单
  2. 序列化(Mapper、Reducer、Driver、FlowBean implement Wirtable)
// 注意Writable接口,没有排序的功能
public class FlowBean implements Writable {

    private long upFlow;
    private long downFlow;
    private long sumFlow;

    public FlowBean() {
        
    }

    // setter getter方法
    、、、、

    
    @Override
    public void write(DataOutput dataOutput) throws IOException {
        dataOutput.writeLong(upFlow);
        dataOutput.writeLong(downFlow);
        dataOutput.writeLong(sumFlow);
    }

    @Override
    public void readFields(DataInput dataInput) throws IOException {
        this.upFlow = dataInput.readLong();
        this.downFlow = dataInput.readLong();
        this.sumFlow = dataInput.readLong();
    }

    @Override
    public String toString() {
        return upFlow + "\t" + downFlow + "\t" + sumFlow;
    }
}
  1. 全局排序(Mapper、Reducer、Driver、Bean实现)
  2. 二次排序(Mapper、Reducer、Driver、Bean实现)
@Override
    public int compareTo(OrderBean other) {
        // 首先比较id,升序
        if(this.id > other.id){
            return 1;
        } else if (this.id < other.id) {
            return -1;
        } else {
            // price降序
            return this.price > other.price ? -1 : 1;
        }
    }
        	int upflow = 0;
            int downflow = 0;
            int sumflow = 0;
            for (NullWritable value : values) {
                upflow += key.getUpflow();
                downflow += key.getDownflow();
            }

            sumflow = upflow + downflow;

            flowBean.setPhone(key.getPhone());
            flowBean.setUpflow(upflow);
            flowBean.setDownflow(downflow);
            flowBean.setSumflow(sumflow);
            context.write(flowBean,NullWritable.get());
private TreeMap<Integer, String> top3Temperatures = new TreeMap<>();

protected void reduce(Text key, Iterable<Text> values, Context context)
                throws IOException, InterruptedException {

            top3Temperatures.clear();

            for (Text value : values) {
                int temperature = Integer.parseInt(value.toString());

                // 保持当前每年的温度前三
                top3Temperatures.put(temperature, "");

                // 移除不符合的数据
                if (top3Temperatures.size() > 3) {
                    top3Temperatures.pollFirstEntry();
                }
            }

            // 进行拼串

            StringBuilder output = new StringBuilder("(" + key.toString() + ") ");
            output.append("[");
            boolean first = true;
            for (Integer temperature : top3Temperatures.descendingKeySet()) {
                if (!first) {
                    output.append(", ");
                }
                output.append(temperature);
                first = false;
            }
            output.append("]");

            context.write(new Text(output.toString()), new Text(""));
        }

三.往年真题及其代码文件

2017年至2023年《大数据与人工智能比赛》往年真题+MapReduce代码文件如下
Hadoop快速入门+MapReduce案例(赠送17到23年往年真题答案+MapReduce代码文件)-----大数据与人工智能比赛,大数据,hadoop,mapreduceHadoop快速入门+MapReduce案例(赠送17到23年往年真题答案+MapReduce代码文件)-----大数据与人工智能比赛,大数据,hadoop,mapreduce
由于文件过大,链接如下:
2017年至2023年《大数据与人工智能比赛》往年真题+MapReduce代码文件
讲解视频:
大数据与人工智能比赛文章来源地址https://www.toymoban.com/news/detail-830273.html

到了这里,关于Hadoop快速入门+MapReduce案例(赠送17到23年往年真题答案+MapReduce代码文件)-----大数据与人工智能比赛的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hadoop3 - MapReduce COVID-19 案例实践

    上篇文章对 MapReduce 进行了介绍,并编写了 WordCount 经典案例的实现,本篇为继续加深 MapReduce 的用法,实践 COVID-19 新冠肺炎案例,下面是上篇文章的地址: https://blog.csdn.net/qq_43692950/article/details/127195121 COVID-19,简称“新冠肺炎”,世界卫生组织命名为“2019冠状病毒病” [1-

    2024年02月08日
    浏览(39)
  • 虚拟机+Hadoop下MapReduce的Wordcount案例

    环境:ubuntu18.04 前提:Hadoop已经搭建好 抄作业记得改标题 输入内容(可以自定义,抄作业别写一样的) yarn-site.xml 内容如下,注意第一个property要改: ·输入hadoop classpath(任意路径下均可),将返回的内容复制在第一个property的value中 *修改配置文件之后要重启hadoop(关了又

    2024年02月07日
    浏览(51)
  • 【Hadoop_06】MapReduce的概述与wc案例

    MapReduce是一个 分布式运算程序 的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是 将用户编写的业务逻辑代码 和 自带默认组件 整合成一个完整的 分布式运算程序 ,并发运行在一个Hadoop集群上。 1)MapReduce易于编程 它简单的实现一些接口

    2024年02月04日
    浏览(48)
  • 第三节 Hadoop学习案例——MapReduce课程设计 好友推荐功能

    提示:文章内容主要以案例为主 目录 前言 项目说明 一,程序需求 1.需求 2.数据 二,编码操作 1.项目建包目录 2.FriendsRecommend.java  3.FriendsRecommendMapper.java 4.FriendsRecommendReduce.java 三,Xshell运行的步骤 1.创建目录 2.上传程序  3.分布式文件系统上传测试数据  4.执行程序 5. 查看结

    2024年02月07日
    浏览(52)
  • Hadoop3教程(十九):MapReduce之ETL清洗案例

    ETL,即 Extract-Transform-Load 的缩写,用来描述数据从源端,经过抽取(Extract)、转换(transform),最后加载(load)到目标端的处理过程。 ETL主要应用于数据仓库,但不只是应用于数据仓库,毕竟这个更像是一类思想。 在运行核心的MR程序之前,往往要对数据进行清理,清除掉

    2024年02月06日
    浏览(46)
  • Hadoop3教程(十七):MapReduce之ReduceJoin案例分析

    现在有两个文件: orders.txt,存放的是订单ID、产品ID、产品数量 pd.txt,这是一个产品码表,存放的是产品ID、产品中文名; 现在是想通过join,来实现这么一个预期输出,即订单ID、产品中文名、产品数量。 以上是本次案例需求。 简单思考一下思路。我们需要将关联条件作为

    2024年02月07日
    浏览(52)
  • 大数据实战——基于Hadoop的Mapreduce编程实践案例的设计与实现

    图1:MaxCompute MapReduce各个阶段思路设计 设计思路分析分为六个模块:input输入数据、splitting拆分、Mapping映射、Shuffing派发、Reducing缩减、Final result输出。 输入数据:直接读入文本不进行分片,数据项本身作为单个Map Worker的输入。 Map阶段:Map处理输入,每获取一个数字,将数

    2024年02月05日
    浏览(56)
  • 大数据与云计算——部署Hadoop集群并运行MapReduce集群案例(超级详细!)

    Linux搭建Hadoop集群(CentOS7+hadoop3.2.0+JDK1.8+Mapreduce完全分布式集群) 本文所用到的版本号: CentOS7 Hadoop3.2.0 JDK1.8 基本概念及重要性 很多小伙伴部署集群用hadoop用mapreduce,却不知道到底部署了什么,有什么用。在部署集群之前先给大家讲一下Hadoop和MapReduce的基本概念,以及它们在大

    2024年02月04日
    浏览(46)
  • MapReduce入门(一)—— MapReduce概述 + WordCount案例实操

    MapReduce知识点总览图 MapReduce 是 一个分布式运算程序的编程框架 ,是用户开发“基于 Hadoop 的数据分析应用”的核心框架。 MapReduce 核心功能是 将用户编写的业务逻辑代码 和 自带默认组件 整合成一个 完整的分布式运算程序 ,并发运行在一个 Hadoop 集群上。 1.2.1 优点 1 )M

    2023年04月21日
    浏览(43)
  • Hadoop系统应用之MapReduce相关操作【IDEA版】---经典案例“倒排索引、数据去重、TopN”

      倒排索引是文档检索系统中最常用的数据结构,被广泛应用于全文搜索引擎。倒排索引主要用来存储某个单词(或词组)在一组文档中的存储位置的映射,提供了可以根据内容来查找文档的方式,而不是根据文档来确定内容,因此称为倒排索引(Inverted Index)。带有倒排索引

    2024年02月07日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包