MapReduce之WordCount案例实操

news2024/11/23 12:31:40

 

目录

前期准备:

本机测试:

mapper阶段:

Reduce阶段:

Driver类:

集群测试:


前期准备:

因为MapReduce中案例比较多,所以需要单独创建一个工程

准备工作   创建工程后先改maven仓库的地址(创建工程后默认为idea自带的仓库**提示 在你打开别的项目后,在你重新打开本项目的时候,maven会改回idea的maven)

让后在   项目的src/main/resources目录下,新建一个文件,命名为“log4j.properties”

(打印INFO级别的日志

填入:

log4j.rootLogger=INFO, stdout  
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/spring.log  
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout  
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

让后在Java包下创建三级目录  并且创建三个类(对应mapper,reduce,driver)

本机测试:

mapper阶段:

        mapper阶段继承自Mapper

  在类中重写map方法  在map方法外对     Text  和   IntWritable  进行实例化

代码:

package com.tangxiaocong.mapreduce.wordcount2;

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;

/*
VALUEIN,        map阶段的value输入类型   text类型  一行
<KEYIN,         map阶段的key输入类型  LongWritable (偏移量)
KEYOUT,                输出的key  类型为text
VALUEOUT                输出的value  类型为int
>*/
public class WordCountMapper extends Mapper <LongWritable, Text,Text, IntWritable>{

    //定义属性 实例化 减少内存的消耗  在下边循环中的话  会循环创建 在全局可以多次使用
    private Text text = new Text();
    private IntWritable intWritable = new IntWritable(1);//map阶段不需要计算 同1为1
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
        //获取一行数据  转换成string
        String s = value.toString();
        //切割  切割后的单词存入数组
        String[] s1 = s.split(" ");
        //循环写出--输出  写出需要桥梁context这个抽象类
        for (String s2 : s1) {
            //数组中是String类型  需要转换成Text
            //封装text
            //此set是方法  不是Java中的接口  Java中有接口set 不可重复
            text.set(s2);
            //转换后通过context的write写出
            context.write(text,intWritable);


        }
    }
}

Reduce阶段:

        

package com.tangxiaocong.mapreduce.wordcount2;

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

import java.io.IOException;

public class WordCountReduce extends Reducer<Text, IntWritable,Text,IntWritable> {
       private IntWritable outv= new IntWritable();
    /*
    * Iterable<IntWritable> values   是一个集合的老祖宗   reduce阶段为会把同类集合化   两个<tangxiaoc,1>  reduce阶段会先合并成
    * tangxiaocong,(1,1)
    * */
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
            //Iterable<IntWritable> values  里现在是    (1,1)  现在需要把他们求和
        int sum =0;
        for (IntWritable value : values) {
            sum+=value.get();   //get方法是获取他的值
        }
        outv.set(sum);
        context.write(key,outv);
    }
}

Driver类:

package com.tangxiaocong.mapreduce.wordcount;

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;

//driver   其实是一个固定的套路
public class WordCountDriver {
    public static void main(String[] args) throws Exception {
        //1.获取job

        //Configuration  是job的配置信息类
        Configuration entries = new Configuration();
        Job job = Job.getInstance(entries);
        //2.设置jar包路径

        job.setJarByClass(WordCountDriver.class);  //一般通过全类名反射过去jar包的位置
        //3. 关联mapper和reducer

        job.setReducerClass(WordCountReduce.class);
        job.setMapperClass(WordCountMapper.class);
        //4.设置map输出的kv类型.

        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        //5.设置最终的kv类型

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        //6.设置输入路径和输出路径

        FileInputFormat.setInputPaths(job, new Path("D:\\hello.txt"));
        FileOutputFormat.setOutputPath(job, new Path("D:\\hellocount"));
        //7.提交job

        boolean b = job.waitForCompletion(true);
        System.exit(b ? 0 : 1);  //退出  成功返回0 失败返回1

    }
}

本次测试为本机测试,通过maven导入Hadoop的包来进行的   输入输出文件的路径为本地路径,而我们在企业开发中一般是在windows上编写,打包发送到Linux上,如果执行任务较多 后期会编写脚本执行程序。

集群测试:

下边重写driver类:只需要把输入输出的路径改成手动输入    输入输出路径

 

 进行打包

将不带依赖的包进行复制到Linux系统(Hadoop目录下)

使用hadoop jar  命令  执行jar包所在的本地系统中的项目  

(输出目录不能存在)

执行计算的过程中可以通过Hadoop yarn看到计算的资源调度的web页面

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

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

相关文章

ssh远程端口转发

ssh远程转发的原理&#xff1a;内网主机开了一个程序去连接外网的服务器&#xff0c;一直等待外网的服务器来连接。 应用场景 设备 IP 备注 系统 内网电脑C 192.168.10.129 内网&#xff0c;可访问外网。SSH登陆端口为22。 linux 个人电脑A 动态变化 无公网IP Linux…

Java的Idea怎么用ChatGpt,让些代码变丝滑?

发现两款idea的AI插件神器&#xff0c;和一个AI编辑器 1、tabnine https://zhuanlan.zhihu.com/p/343938113 当提示代码出现后&#xff0c;其中 按tab键就可以通用提示出的代码了&#xff0c;alt[ 是换提示代码&#xff0c;试用期限为14天。&#xff08;注意标红的&#xff0…

获美国企业认可,中国大飞机取得重大突破,已具备挑战波音的实力

日前消息指美国通用电气资本航空服务公司订购了20架中国商飞C919客机&#xff0c;这是中国大飞机首次获得美国航空企业的认可&#xff0c;代表着中国大飞机的重大突破&#xff0c;证明中国的大飞机已达到国际先进水平。通用电气资本航空服务公司是全球最大的飞机租赁公司&#…

初学C++,坚决不能挂!

目录 1、C&#xff0b;&#xff0b;相对于C语言的不同 2、类&#xff08;class&#xff09; 3、类与实例&#xff08;对象&#xff09;的关系 4、头文件 5、命名空间 6、输入输出 7、位运算 8、基本数据类型 9、结构体和三目运算符 10、for循环 11、const 12、类型别…

SEEM:微软基于 CV 大模型新作,分割“瞬息全宇宙”

文 | 智商掉了一地交互式视觉分割新作&#xff0c;具有语义感知的新模型~自从 Meta 发布了“分割一切”的 SAM 之后&#xff0c;各种二创如雨后春笋般冒出&#xff0c;昨天微软的一篇论文又在推特上引起讨论&#xff0c;虽然最开始吸引小编的是它的名字——分割“瞬息全宇宙”&…

让技术造福残障人士,让开发助力无障碍

前言 随着互联网技术的快速发展&#xff0c;越来越多的领先技术运用到公益领域中来。运用科技来造福残障人士&#xff0c;比如前几年比较智能化的自动行走轮椅&#xff0c;盲人阅读器&#xff0c;以及聋哑人助听器等&#xff0c;都是通过科技来帮助残障人士方便生活的例子。作为…

OpenAI文档翻译——在不通的场景下如何更好的设计ChatGPT提示词

概述 OpenAI可以被广泛的应用于各种任务&#xff0c;他为各种模型提供使用简单而功能强大的API。你可以输入一些文本作为提示词&#xff0c;OpenAI则会生成对应的提示词补全&#xff0c;在使用过程中这就是会话形式以及能够记住上下文的体现。探索如何生成提示词的最好方法就是…

地图和规则来啦!全国大学生智能汽车竞赛百度创意组正式发布

‍‍「全国大学生智能汽车竞赛」是教育部倡导的大学生科技A类竞赛&#xff0c;是2022年全国普通高校大学生竞赛榜单内竞赛&#xff0c;中国高等教育学会将其列为含金量最高的大学生竞赛之一。在全国数百所高校的支持下&#xff0c;全国大学生智能汽车竞赛至今已成功举办了十七届…

2023AE软件、Adobe After Effects下载、安装教程

最后附下载地址 2023AE软件是一款由Adobe公司开发的视频编辑软件&#xff0c;也被称为Adobe After Effects。它在广告、电影、电视和网络视频等领域广泛应用&#xff0c;用于制作动态图形、特效、合成和其他视觉效果。该软件支持多种视频和音频文件格式&#xff0c;具有丰富的…

一文了解vue3的toRef和toRefs?

文章目录toRef / toRefs首先toRef的使用toRefs的使用&#xff1a;总结reactive定义对象类型<template><h3>姓名&#xff1a;{{ person.name }}</h3><h3>年龄&#xff1a;{{ person.age }}</h3><h3>薪资&#xff1a;{{ person.job.j1.salar…

微软发布了 97 个漏洞的补丁,包括主动勒索软件漏洞

今天是本月的第二个星期二&#xff0c;微软发布了另一组安全更新&#xff0c;修复了影响其软件的97 个漏洞&#xff0c;其中一个漏洞已被广泛用于勒索软件攻击。 97 个错误中有 7 个被评为严重&#xff0c;90 个被评为重要。有趣的是&#xff0c;其中 45 个缺陷是远程代码执行…

抽象简单web

由于js中for循环大致可以包含为 简单的遍历数组 遍历对象的属性 遍历字符串 多层循环 使用 break 和 continue 使用 for...of 遍历数组 使用 forEach 遍历数组 那么由于水平问题&#xff0c;将会一个个精通后才出一图流 简单的遍历数组 在进行实践前&#xff0c;需要简单了解…

Redis 7 事务、管道、发布订阅、主从、哨兵、集群

一、事务 1、简介 可以一次执行多个命令&#xff0c;本质是一组命令的集合。一个事务中的所有命令都会序列化&#xff0c; 按顺序地串行化执行而不会被其他命令插入&#xff0c;不许加塞一个队列中&#xff0c;一次性、顺序性、排他性的执行一系列命令 2、实战 常用命令 正…

(学习日记)2023.4.12

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

在线安装rancher2.4管理K8S集群并部署服务

条件&#xff1a; 1. 准备至少3台机器&#xff1b; 2. 三台机器需要有网络&#xff1b; 3. 安装rancher和K8S集群&#xff1b; # master节点 [rootlocalhost ~]# hostnamectl set-hostname k8s-master && bash [rootk8s-master ~]# hostname k8s-master [rootk8s-ma…

【面试】Mysql主键索引普通索引索引和唯一索引的区别是什么?

前言 在 MySQL 中, 索引是在存储引擎层实现的, 所以并没有统⼀的索引标准, 由于 InnoDB 存储引擎在 MySQL数据库中使⽤最为⼴泛, 下⾯以 InnoDB 为例来分析⼀下其中的索引模型.在 InnoDB 中, 表都是根据主键顺序以索引的形式存放的, InnoDB 使⽤了 B 树索引模型&#xff0c;所…

WAF攻防-信息收集识别被动探针代理池仿指纹白名单

文章目录信息收集常见检测&#xff1a;信息收集常见方法&#xff1a;信息收集-被动扫描-黑暗引擎&三方接口信息收集-工具扫描-Awvs&Xray&Goby内置信息收集常见检测&#xff1a; 1、脚本或工具速度流量快 2、脚本或工具的指纹被识别 3、脚本或工具的检测Payload 信…

013:Mapbox GL添加marker

第013个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中添加marker。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共70行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https://xiaozhu…

重装系统需要做的事

1 设置小鹤双拼 winr 输入regedit&#xff0c;定位到「计算机\HKEY_CURRENT_USER\Software\Microsoft\InputMethod\Settings\CHS」 右键新建新建字符串值 数值名称&#xff1a;UserDefinedDoublePinyinScheme0 数值数据&#xff1a;小鹤双拼2*iuvdjhcwfgxmlnpbksqszxkrltvyovt …

css 使用blur,实现背景色高斯模糊,但不影响背景上的内容

实现效果 实现原理 1.filter&#xff1a;blur() 2.伪元素设置&#xff0c;不影响子元素显示 <!-- 库位使用率 --><div class"bkPart statusPart"><div class"co-title">库位使用率</div><div class"pickPos"><…