Hadoop的MapReduce基本流程体验

news2024/11/27 3:49:30

目录

MapReduce 编程规范

Mapper阶段

Reducer阶段

Driver阶段

常用数据序列化类型

案例实施

WordCountMapper类

WordCountReducer类

WordCountDriverr 驱动类

HDFS测试

MapReduce 编程规范

用户编写的程序分成三个部分: Mapper Reducer Driver

Mapper阶段

1 )用户自定义的 Mapper 要继承自己的父类
2 Mapper 的输入数据是 KV 对的形式( KV 的类型可自定义)
3 Mapper 中的业务逻辑写在 map() 方法中
4 Mapper 的输出数据是 KV 对的形式( KV 的类型可自定义)
5map()方法(MapTask进程)对每一个<K,V>调用一次

Reducer阶段

2 Reducer 的输入数据类型对应 Mapper 的输出数据类型,也是 KV
3 Reducer 的业务逻辑写在 reduce() 方法中
4ReduceTask进程对每一组相同k<k,v>组调用一次reduce()方法

 

Driver阶段

相当于 YARN 集群的客户端,用于提交我们整个程序到 YARN 集群,提交的是
封装了 MapReduce 程序相关运行参数的 job 对象

 

常用数据序列化类型

 

案例实施

创建maven工程并添加依赖

<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>                                                  
resources目录里创建 log4j.properties文件
log4j.rootLogger=INFO, 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/wordcount.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

完成后在包下创建三个java类

WordCountMapper类

在WordCountMapper类中继承MapReduce类

参数解读:

KEYIN :map阶段输入的key类型:LongWritable

VALUEIN:map阶段输入的value类型:Text

KEYOUT:map阶段输出的key类型:Text

VALUEOUT:map阶段输入的value类型:IntWritable

 重写一个map方法

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;

public class WordCountMapper extends Mapper<LongWritable, Text,Text, IntWritable> {//继承MapReduce类(泛型)
    private Text outKey = new Text(); //定义输出的key值
    private IntWritable outVlue = new IntWritable(1); //不进行聚合操作默认为1

    //重写一个map方法
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
        //获取一行
        String line = value.toString();

        //切割
        String[] words = line.split(" "); //每一行单词都放到键中 遇到空格则分割

        //循环写出
        for (String word : words) {
            //封装outKey
            outKey.set(word);

            //写出
            context.write(outKey,outVlue); //参数为输出的KEY和VALUE
        }
    }
}

WordCountReducer类

在WordCountReducer类中继承Reducer类

参数解读:

KEYIN :reduce阶段输入的key类型:Text

VALUEIN:reduce阶段输入的value类型:IntWritable

KEYOUT:reduce阶段输出的key类型:Text

VALUEOUT:reduce阶段输入的value类型:IntWritable

 重写reduce方法

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

public class WordCountReducer extends Reducer<Text, IntWritable,Text, IntWritable> { //继承Reducer类(泛型)
    //封装
    private IntWritable outValue = new IntWritable();

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {

        //定义变量累加
        int sum = 0;

        //要统计的单词(1,1)
        //累加
        for (IntWritable value : values) {

            sum += value.get(); //获取

        }

        //变换类型

        outValue.set(sum);

        //写出
        context.write(key,outValue); //outValue就是转换后的sum
    }
}

WordCountDriverr 驱动

基本流程:

  1. 获取job 设置jar包路径
  2. 关联Mapper、Reducer
  3. 设置map输出的k,v类型
  4. 最终输出的k,v类型
  5. 设置输入路径和输出路径
  6. 提交job
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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

public class WordCountDriver {
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException { //抛出异常

        //获取job
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf);

        //设置jar包路径
        job.setJarByClass(WordCountDriver.class);

        //关联Mapper、Reducer
        job.setMapperClass(WordCountMapper.class);
        job.setReducerClass(WordCountReducer.class);

        //设置map输出的k,v类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        //最终输出的k,v类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        //设置输入路径和输出路径
        FileInputFormat.setInputPaths(job,new Path(args[0])); //本机输入路径

        FileOutputFormat.setOutputPath(job,new Path(args[1])); //本机输出路径

        //提交job
        boolean result = job.waitForCompletion(true);

        System.exit(result?0:1); //退出返回

    }
}

 

HDFS测试

 

改名并打包到服务器虚拟机进行测试

启动hadoop集群

 上传到hadoop目录下

 准备好该目录的文件进行词频统计

 拷贝WordCountDriverr 驱动类全类名

 hadoop中执行命令

 hadoop jar MR.jar MP.WordCountDriver /BigData /output

 hadoop jar 使用的jar包 全类名 /输入数据原文件 /输出路径目录

执行完毕在HDFS查看输出成功

 

 查看词频统计的运行结果

 

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

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

相关文章

使用粒子效果动画组成模型[自定义shader实现]

文章目录优点实现思路传递给Shader的数据根据模型数据生成数据传递给Shader自定义shader 连接cpu与gpu顶点着色器 计算位置片元着色器优点 性能卓越 上一篇使用的更改坐标实现 9万个点 页面非常卡顿 光是计算9万个点坐标更替的js就已经造成了堵塞 尝试了在顶点着色器中实现动画…

大数据Kudu(五):Kudu基于Cloudera Manager安装及配置

文章目录 Kudu基于Cloudera Manager安装及配置 一、启动CM集群 二、登录ClouderaManager平台安装Kudu

TCO-PEG-RGD 反式环辛烯聚乙二醇线肽RGD

反式环辛烯(TCO)作为亲双烯体与S-四嗪(Tetrazine)在生理条件下的反应有无需催化剂、反应速率快的优点&#xff0c;被广泛应用于生物和材料科学的研究中。 产品名称 TCO-PEG-RGD 反式环辛烯聚乙二醇线肽RGD 中文名称 线肽-聚乙二醇-反式环辛烯 英文名称 TCO-PEG-RGD 分…

“引进来,走出去”,锦江国际集团多重创新力引领绿色新发展

2022年12月13日&#xff0c;由南方财经全媒体集团指导&#xff0c;21世纪经济报道主办的“21世纪住宿业高峰论坛&#xff08;2022&#xff09;暨2022&#xff08;第十九届&#xff09;【金枕头】酒店大赏发布典礼”在上海如期举行。锦江国际集团副总裁周维应邀出席并发表“创新…

【开源项目】SFUD--通用串口Flash驱动库的移植和使用

1.简介 SFUD 是一款开源的串行 SPI Flash 通用驱动库。由于现有市面的串行 Flash 种类居多&#xff0c;各个 Flash 的规格及命令存在差异&#xff0c; SFUD 就是为了解决这些 Flash 的差异现状而设计&#xff0c;让我们的产品能够支持不同品牌及规格的 Flash&#xff0c;提高了…

JeecgBoot部署(Nginx+Tomcat)

环境搭建JeecgBoot搭建、Linux安装Nginx、Linux安装JDK8、Linux安装MySql8、Linux安装Redis、Linux安装Tomcat9前端打包 1.进入目录&#xff1a;cd D:\win11\git_data\jeecg_3.4.4\jeecgboot-vue32.安装依赖&#xff1a;pnpm install-->node_modules3.打包编译&#xff1a;p…

矩阵树定理

用途 矩阵树一般用于生成树计数的问题&#xff0c;比如求一个无向图中生成树的个数。用矩阵树定理能极大地降低时间复杂度。 前置知识&#xff1a;行列式 此部分可粗略浏览&#xff0c;了解即可。 对于一个一阶行列式&#xff0c;可写作 det(a1,1)a1,1det \left( \begin{ma…

[附源码]Node.js计算机毕业设计房车营地在线管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

大数据学习:shell脚本

文章目录一、执行shell脚本1、直接执行脚本&#xff08;1&#xff09;绝对路径方式执行脚本&#xff08;2&#xff09;相对路径方式执行脚本2、利用source命令执行脚本3、利用bash或sh命令执行脚本二、shell脚本实战任务一&#xff1a;显示当前用户主目录1&#xff09;编写脚本…

3ds Max发生闪退怎么办?

3ds Max闪退 最近&#xff0c;小编在后台收到了一位炫云小伙伴的反馈&#xff1a;“我打开3ds Max后&#xff0c;总是出现闪退&#xff0c;究竟是什么情况&#xff1f;”实际上&#xff0c;闪退也细分为多种类型。例如&#xff1a;打开3ds Max直接闪退&#xff08;logo加载界面…

某轻工制造企业“三步走”战略,搭建一站式数据应用平台

某轻工制造企业成立于1994年&#xff0c;是中国轻工业塑料行业十强企业之一。该企业信息系统之间烟囱化&#xff0c;数据融合难、共享难&#xff0c;无法形成数据资产体系为企业创造价值。因此&#xff0c;该企业与亿信华辰合作&#xff0c;建设一站式数据应用平台&#xff0c;…

【雕爷学编程】Arduino动手做(110)---JDY-31 蓝牙模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

【Kubernetes】资源管理(命令)总结

kubernetes&#xff0c;是一个全新的基于容器技术的分布式架构领先方案&#xff0c;是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本&#xff0c;于2014年9月发布第一个版本&#xff0c;2015年7月发布第一个正式版本。 kubernetes的本质是一组服务器集群&#xff0…

Java+Swing图书管理系统2.0

JavaSwing图书管理系统2.0一、系统介绍二、功能展示1.用户登陆页面2.首页3.图书查询4.图书入库&#xff08;管理员&#xff09;5.图书借还情况&#xff08;管理员&#xff09;6.图书证管理&#xff08;管理员&#xff09;7.借书&#xff08;学生、老师&#xff09;8.还书&#…

pikahcu靶场-12 目录遍历,敏感信息泄露,不安全的URL跳转

目录遍历&#xff0c;敏感信息泄露&#xff0c;不安全的URL跳转 目录遍历漏洞 概述 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量&#xff0c;从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时&#xff0c;便会将请求的这个文件的值(比如文件名称…

Netflix:用神经网络改善视频质量

点击上方“LiveVideoStack”关注我们▲扫描图中二维码或点击阅读原文▲了解音视频技术大会更多信息编者按Editors note眼看用户视频的增长将超过服务器的算力上限&#xff0c;既没有额外的服务器来支持&#xff0c;也不能对用户体验造成大的冲击&#xff0c;Instagram的工程师找…

C罗轮播图(HTML+CSS+JS)

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;前端案例分…

RFM 模型

RFM 模型顾客价值分析顾客价值分析 由于激烈的市场竞争&#xff0c;各个公司相继推出了多样灵活的优惠方式来吸引更多的客户。 对一个没有购买力的顾客&#xff0c;你打电话推销优惠活动毫无作用&#xff0c;可一个高价值顾客&#xff0c;会说有优惠活动怎么不通知我呢&#…

交叉梯度函数的MATLAB实现及代码分享02

交叉梯度函数的MATLAB实现及代码分享02 交叉梯度函数可用于反演成像中。作为一个连接不同物性参数的桥梁&#xff0c;交叉梯度函数可以实现不同物性参数的联合反演成像。 本文是对上一个博文的补充&#xff0c;详见交叉梯度函数的MATLAB实现及代码分享01&#xff0c;上一篇博…

人工智能导论课堂笔记

人工智能导论时间&#xff1a;2022年10月19日下午 班级&#xff1a;2022级人工智能应用技术1班 作业问题&#xff1a; Python安装注意事项 1.下载Python3.X的版本&#xff0c;如&#xff1a;3.10, 3.9&#xff0c; 3.8&#xff0c;不推荐下载2.7版本&#xff08;已经不使用&…