MapReduce入门案例WordCount(动画演示)_大数据面试宝典的博客-程序员秘密

技术标签: WordCount  动画  hadoop  大数据  MapReduce  

自定义代码流程

WordCount-Map实现

  • 1、实例一个class 继承Mapper<输入的key的数据类型,输入的value的数据类型,输出的key的数据类型,输出的value的数据类型
  • 2、重写map方法 map(LongWritable key, Text value, Context context)
    key: 行首字母的偏移量
    value: 一行数据
    context:上下文对象
  • 3、根据业务需求进行切分,然后逐一输出

WordCount-Reduce实现

  • 1、实例一个class 继承Reducer<输入的key的数据类型,输入的value的数据类型,输出的key的数据类型,输出的value的数据类型
  • 2、重写reduce方法 reduce(Text key, Iterable values, Context context)
    key: 去重后单词
    values: 标记的1(好多个1,key出现几次就有几个1)
    context:上下文对象
  • 3、遍历values 进行汇总计算

WordCount-Driver实现

1、实例一个class 继承Configured 实现Tool
2、重写run方法
3、在run方法中将自己编写的map和reduce添加到集群

package com.czxy.hadoop.mapReduce.demo02;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocalFileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

/**
 * @author [email protected]
 * @version v 1.0
 * @date 2019/11/16
 */
public class PosCountDriver extends Configured implements Tool {
    
    public static void main(String[] args) throws Exception {
    
        ToolRunner.run(new PosCountDriver(), args);
    }

    @Override
    public int run(String[] args) throws Exception {
    
        //判断目录是否存在  存在则删除
        Path outPath = new Path("posCount");
        LocalFileSystem local = FileSystem.getLocal(new Configuration());
        if (local.exists(outPath)) {
    
            local.delete(outPath, true);
        }
        //1.获取job实例
        Job job = Job.getInstance(new Configuration(), "posCount");
        //2.注册主类
        job.setJarByClass(PosCountDriver.class);
        //3.设置输入
        job.setInputFormatClass(TextInputFormat.class);
        TextInputFormat.setInputPaths(job, new Path("C:\\Users\\27727\\Desktop\\学习文件夹\\03.课后作业\\03.MapReduce\\运营商题目\\数据"));
        //4.设置mapper
        job.setMapperClass(PosCountMapper.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(Text.class);
        //5.设置reduce
        job.setReducerClass(PosCountReduce.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(NullWritable.class);
        //6.设置输出
        job.setOutputFormatClass(TextOutputFormat.class);
        TextOutputFormat.setOutputPath(job, outPath);
        //7.开启作业
        boolean result = job.waitForCompletion(true);
        return result ? 0 :1;
    }
}

动画:

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43893397/article/details/103101098

智能推荐

spring-cloud五大基本组件_小太阳T'u'T的博客-程序员秘密

Eureka注册中心1.eureka注册中心需要对外暴露,其他服务需要注册到注册中心2.注册中心会将服务的地址列表发送给订阅服务的消费者3.各种服务需要定期向eureka发送心跳,刷新自己的状态4.服务下线则注册中心就会剔除掉服务5.如果某个服务无法正常工作,但并没有向服务器提出下线,则会创建一个定时任务,每隔60s发送一次确认,如果90s没有响应则剔除.6.如果15分钟之内某个服务的续约成功率不足85%,则会剔除Zuul网关作用:用来控流,控制,路由1.身份验证与安全,识别访问某个资源的

浅谈PCIe技术(一):发展历史_linmh2005的博客-程序员秘密_pcie发展史

话说大约八十年前祖师爷冯-诺依曼提出电子计算机系统结构五大件之后,计算机开始渗透到社会生活的各个方面。在存储程序电子计算机的世界,这五大件小到芯片上的组件大到全球不同地域见的计算节点,总是需要有各种各样的连接:1.(Chip Scale):规模大约在厘米尺度,芯片上的互联。典型的连接有目前地球上最强大处理器Xeon芯片内部环形连接;应用最广泛移动处理器ARM芯片内部AXI总线。2.(Box Sca...

从零开始学USB(一、基础知识1)_oshan2012的博客-程序员秘密

1.什么是USB?USB是Universal Serial Bus的缩写,中文译为通用串行总线。正如USB的第一个单词表述的那样,为了通用。那么我们看一下,还有哪些总线不是串行的,哪些是不通用的串行总线下表来自《USB Complete》里面对一些常见总线所总结的一些区别:当然上表中关于SPI的2.1M肯定是不对的,之前学习单片机的时候用STM32的SPI接口读写SD卡,现在...

diskgenius创建efi分区_黑苹果原版安装从零开始之 :MBR转GPT和新建EFI分区详细教程..._知乎校园的博客-程序员秘密

摘 要这篇文章主要说怎么去分区让磁盘支持安装原版,安装原版需要GPT 个别同学不知道怎么从MBR转GPT,要么就是转了gpt还是不能安装这里我给大家整理出来 方便大家继续入坑!这里我拿我的移动硬盘做所以会在WIN系统里 对于只有一个硬盘的同学自己做好winPE 进pe分区 双硬盘且Mac打算安装另一个硬盘的可以在Win里制作。文章前言这篇文章主要说怎么去分区让磁盘支持安装原版,安装原版需要GPT ...

计算机windows7启动不了桌面,Win7启动后不显示桌面的解决方法_爱小宝要久久的博客-程序员秘密

有时候我们启动电脑,桌面怎么样都出不来,等待很长时间无果。学习啦小编今天跟大家分享Win7启动后不显示桌面怎么办。Win7启动后不显示桌面解决方法[一]、如何恢复桌面?在查杀病毒前,先将桌面恢复出来,这样才能够更加方便地操作。恢复方法:1.按CTRL+ALT+DEL调出任务管理器,点“进程”,然后结束“explorer.exe”。2.点任务管理器的“文件”——“新建任务”,运行explorer.e...

随便推点

the+android+gradle,升级gradle至3.0+,一路填坑_2prime的博客-程序员秘密

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?本人项目中的gradle版本比较低,为了不影响后续开发,故决定升级到最新的gradle3.1.2,特此记录一下自己填过的坑,以供后来者借鉴,避免躺在同样的坑。1,首先修改项目根目录下的build.gradle文档把gradle依赖升级到3.1.2。12// 说明gradle的版本号classpath 'com.andro...

7200 Star!开源免费的内网穿透工具_开源前哨的博客-程序员秘密

【导语】:inlets是一个基于WebSocket隧道实现的内网穿透工具,可以将本地服务暴露到公网。简介inlets利用反向代理和Websocket隧道,将内部或开发中的服务通过出口节点暴露到公网。出口节点可以是一个VPS,也可以是任何带有公网IPv4的电脑。类似的工具还有Ngrok、Argo Tunnel等,但这两者都是闭源的,有其本身的限制,价格不菲,以及对arm/arm64的支持有限。Ngrok还经常会被公司防火墙策略拦截而导致无法使用。而其它开源的隧道工具,基本只考虑到静态地配置单个隧道。in

C/C++ 使用MEMSET对数组进行整体赋值以及MEMCPY对数组复制/释放指针_老白436196571的博客-程序员秘密_memset复制数组

对数组的整体赋值,以及两个数组间的复制容易出错,这里使用string头文件中的memset和memcpy进行不必遍历数组,速度快。代码:/*Project: 数组的整体赋值与复制Date: 2018/07/31Author: Frank Yumemset(数组名,0或-1,字节)memcpy(数组名,数组名,字节)*/#include#include //memset需要头文件#include#define n 5using namespace std;int main

Fabric1.4.3 Docker镜像的导出与载入_Jason_Bourne_的博客-程序员秘密

本地环境为 ubuntu16.04,已部署好 fabric1.4.3网络,first-network 运行成功,现需要在服务器上部署 fabric1.4.3,考虑到网络问题在服务器上无法拉取 fabric 所需要的 docker 镜像,只有先将本地虚拟机上的 fabric1.4.3 的 docker 镜像导出,再 copy 到服务器端载入,具体过程如下:目录一、导出 fabric dock...

Kotlin学习笔记——接口_精装机械师的博客-程序员秘密

Kotlin 的接口与Java的接口类似,可以声明抽象方法,但是Kotlin不同的是,它还可以包含实现(Java中的接口不能有方法实现)。与抽象类不同的是,接口无法保存状态。Kotlin的接口可以有属性但必须声明为抽象或提供访问器实现。Kotlin可以在接口中定义属性。在接口中声明的属性要么是抽象的,要么提供访问器的实现。在接口中声明的属性不能有幕后字段(backing fi...

Java程序员秋招三面蚂蚁金服,阿里高级算法专家公开10份资料_普通网友的博客-程序员秘密

Linux下你常用的命令有哪些?操作系统什么情况下会死锁?常用的hash算法有哪些?什么是一致性哈希?如何理解分布式锁?数据库中的范式有哪些?数据库中的索引的结构?什么情况下适合建索引?Java中的NIO,BIO,AIO分别是什么?用什么工具调试程序?JConsole,用过吗?现在JVM中有一个线程挂起了,如何用工具查出原因?线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗?同步和异步有什么区别?线程池用过吗?如何创建单例模式?说了双重检查,他说不是线程安全的。如何高效的创建.