当前位置: 首页 > news >正文

Hadoop学习总结(MapRdeuce的词频统计)

      MapRdeuce编程示例——词频统计

一、MapRdeuce的词频统计的过程

二、编程过程

1、Mapper 组件

WordcountMapper.java

package com.itcast.mrdemo;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;/*** Map 需要指定四个泛型,用来限定输入和输出的 key 和 value 的类型** hadoop 有自己的数据类型,不使用 java 的数据类型,对应的 java 类型名字后面 + Writable 就是 hadoop 类型* String 除外,String 对于的 hadoop 类型叫做 Text*  <2, "java">* */
public class WordcountMapper extends Mapper<LongWritable, Text,Text,IntWritable> {//重写Ctrl+o@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {/*** 1、把一行字符串拆分成单词 "hello java"* 2、把单词、数字每一个按照 map 规定的格式输出*/// 把 hadoop 类型转换为 java 类型(接收传入进来的一行文本,把数据类型转换为 String 类型)String line = value.toString();// 把字符串拆分为单词String[] words = line.split(" ");//使用 for 循环把单词数组胡每个单词输出for (String word : words){context.write(new Text(word), new IntWritable(1));}}
}

2、Reducer 组件

WordcountReducer.java

package com.itcast.mrdemo;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;/*** Reduce 需要指定四个泛型,用来限定输入和输出的 key 和 value 的类型* 1、Map 的输出就是 Reduce 的输入* 2、Reduce 的输出是 <"java", 2>*/
public class WordcountReducer extends Reducer<Text,IntWritable,Text,IntWritable> {@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int sum = 0;for (IntWritable value : values){sum ++;}context.write(key,new IntWritable(sum));}
}

3、MapRdeuce 运行模式

MapRdeuce 程序的运行模式主要有两种

(1)本地运行模式

      在当前的开发环境模拟 MapRdeuce 执行环境,处理的数据及输出结果在本地操作系统WordcountDriver.java

package com.itcast.mrdemo;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, ClassNotFoundException, InterruptedException {//通过 Job 来封装本次 MR 的相关信息Configuration conf = new Configuration();//System.setProperty("HADOOP_USER_NAME","root");//配置 MR 运行模式,使用 local 表示本地模式,可以省略conf.set("mapreduce.framework.name","local");Job job = Job.getInstance(conf);//指定 MR Job jar 包运行主类job.setJarByClass(WordcountDriver.class);//指定本次 MR 所有的 Mapper Reducer 类job.setMapperClass(WordcountMapper.class);job.setReducerClass(WordcountReducer.class);//设置业务逻辑 Mapper 类的输出 key 和 value 的数据类型job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);//设置业务逻辑 Reducer 类的输出 key 和 value 的数据类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);//使用本地模式指定处理的数据所在的位置FileInputFormat.setInputPaths(job,"D:/homework2/Hadoop/mr/input");//使用本地模式指定处理完成之后的结果所保存的位置FileOutputFormat.setOutputPath(job, new Path("D:/homework2/Hadoop/mr/output"));//提交程序并且监控打印程序执行情况boolean res = job.waitForCompletion(true);//执行成功输出 0 ,不成功输出 1System.exit(res ? 0 : 1);}
}

运行结果为:

(2)集群运行模式

  • *在HDFS中创建文件

在HDFS中的/input目录下有word.txt文件,且文件中编写有内容(内容随意编写)

  • *对 WordcountDriver.java 修改

 修改WordcountDriver.java中的路径为HDFS上的路径

package com.itcast.mrdemo;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, ClassNotFoundException, InterruptedException {//通过 Job 来封装本次 MR 的相关信息Configuration conf = new Configuration();//System.setProperty("HADOOP_USER_NAME","root");//配置 MR 运行模式,使用 local 表示本地模式,可以省略conf.set("mapreduce.framework.name","local");Job job = Job.getInstance(conf);//指定 MR Job jar 包运行主类job.setJarByClass(WordcountDriver.class);//指定本次 MR 所有的 Mapper Reducer 类job.setMapperClass(WordcountMapper.class);job.setReducerClass(WordcountReducer.class);//设置业务逻辑 Mapper 类的输出 key 和 value 的数据类型job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);//设置业务逻辑 Reducer 类的输出 key 和 value 的数据类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);//使用本地模式指定处理的数据所在的位置FileInputFormat.setInputPaths(job,"/input");//使用本地模式指定处理完成之后的结果所保存的位置FileOutputFormat.setOutputPath(job, new Path("/output"));//提交程序并且监控打印程序执行情况boolean res = job.waitForCompletion(true);//执行成功输出 0 ,不成功输出 1System.exit(res ? 0 : 1);}
}
  • *对pom.xml添加内容

        <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.30</version></dependency>
    <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.6.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><!-- 把依赖的所有 jar 包打包到可执行 jar 中 --><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>

 在这个位置进行添加

*在resources创建文件

在resources创建文件log4j.properties

添加以下内容

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

  • *打包成jar包

 双击,进行打包

 结果出现以下字段则打包成功

  • *上传到虚拟机的home目录下

右键打开

重命名为wc 

 随便复制到一个目录下

使用远程连接工具(Xshell或者SecurityCRT)进行上传

  • *进行集群运行

进入home目录

cd /home
ll

 在 WordcountDriver.java下复制路径

hadoop jar wc.jar com.itcast.mrdemo.WordcountDriver

运行结果 

  • *查看HDFS 集群

进行查看

      集群运行成功

4、运行前准备操作

现在目录下创建一个文本

编写内容(随意编写)

5、Error while running command to get file permissions : java.io.IOException: (null) entry in command string: null ls -F D:\homework2\Hadoop\mr\input\word.txt

出现以下错误

解决方法一

下载winutils.exe和hadoop.dll放到C:\Windows\System32

链接:https://pan.baidu.com/s/1XwwUD9j3YT2AJMUNHmyzhw 
提取码:q7i7

解决方法二

输入指定文本路径

然后运行

相关文章:

Hadoop学习总结(MapRdeuce的词频统计)

MapRdeuce编程示例——词频统计 一、MapRdeuce的词频统计的过程 二、编程过程 1、Mapper 组件 WordcountMapper.java package com.itcast.mrdemo;import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; …...

PPT基础入门

目录 相关设置快捷键shift 快捷键Ctrl 快捷键Ctrl Shift 组合快捷键快捷键总结 相关设置 设置撤回次数 自动保存 图片压缩 字体嵌入&#xff1a;目的是在不同的电脑上保留已经设置好的字体 多格式导出 &#xff08;1&#xff09;可以导出PDF &#xff08;2&#xff09;可以导…...

Java 语言关键字有哪些

Java 语言关键字有哪些 分类关键字访问控制privateprotectedpublic类&#xff0c;方法和变量修饰符abstractclassextendsfinalimplementsinterfacenativenewstaticstrictfpsynchronizedtransientvolatileenum程序控制breakcontinuereturndowhileifelseforinstanceofswitchcase…...

Go vs Rust:文件上传性能比较

在本文中&#xff0c;主要测试并比较了Go—Gin和Rust—Actix之间的多部分文件上传性能。 设置 所有测试都在配备16G内存的 MacBook Pro M1 上执行。 软件版本为&#xff1a; Go v1.20.5Rust v1.70.0 测试工具是一个基于 libcurl 并使用标准线程的自定义工具&#xff0c;能…...

C# NAudio 音频库

C# NAudio 音频库 NAudio安装NAudio简述简单示例1录制麦克风录制系统声卡WAV格式播放MP3格式播放AudioFileReader读取播放音频MediaFoundationReader 读取播放音频 NAudio安装 项目>NuGet包管理器 搜索NAudio点击安装&#xff0c;自动安装依赖库。 安装成功后工具箱会新增…...

springcloudalibaba-3

一、Nacos Config入门 1. 搭建nacos环境【使用现有的nacos环境即可】 使用之前的即可 2. 在微服务中引入nacos的依赖 <!-- nacos配置依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-…...

异步复位同步释放与同步复位打拍

参考链接&#xff1a;复位系列之异步复位同步释放与同步复位打拍...

使用Python进行二维图像的三维重建

2D图像的三维重建是从一组2D图像中创建对象或场景的三维模型的过程。这个技术广泛应用于计算机视觉、机器人技术和虚拟现实等领域。 在本文中&#xff0c;我们将解释如何使用Python执行从2D图像到三维重建的过程。我们将使用TempleRing数据集作为示例&#xff0c;逐步演示这个过…...

go-zero微服务的使用

一、入门案例 1、使用goland创建一个工程 2、新建一个user.proto syntax "proto3";package user; // 这个地方表示生成的go的包名叫user option go_package "./user";message UserInfoRequest {int64 userId 1; }message UserInfoResponse {int64 user…...

Java排序算法之基数排序

基数排序&#xff08;Radix Sort&#xff09;是一种线性时间复杂度的排序算法&#xff0c;其时间复杂度为O(d(nk))&#xff0c;其中d是数字的位数&#xff0c;k是进制数。基数排序是一种非比较排序算法&#xff0c;它按照数位的大小来进行排序。它可以处理正整数、负整数和小数…...

Ubuntu20.0中安装Gradle

下载Gradle到temp文件夹 wget https://services.gradle.org/distributions/gradle-8.3-bin.zip -P /tmp 然后解压文件到/opt/gradle目录 sudo unzip -d /opt/gradle /tmp/gradle-8.3.zip 配置Gradle环境变量 接下来我们会创建一个gradle.sh文件来保存Gradle的环境变量 sudo…...

【Java并发编程六】多线程越界问题

ArrayList()越界错误 import java.util.ArrayList; public class myTest implements Runnable {static ArrayList<Integer> a new ArrayList<>(10);public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(new myTest());T…...

聊聊httpclient的disableConnectionState

序 本文主要研究一下httpclient的disableConnectionState disableConnectionState org/apache/http/impl/client/HttpClientBuilder.java /*** Disables connection state tracking.*/public final HttpClientBuilder disableConnectionState() {connectionStateDisabled t…...

Tomcat web.xml文件中的mime-mapping

在Tomcat安装目录的conf/web.xml文件中&#xff0c;定义了大量的<mime-mapping>元素&#xff0c;例如&#xff1a; 其中<extension>指定了文件的扩展名&#xff0c;<mime-type>指定了mime类型&#xff0c;放在<mime-mapping>元素中&#xff0c;就是将…...

【Java 进阶篇】JQuery 事件绑定:`on` 与 `off` 的奇妙舞曲

在前端开发的舞台上&#xff0c;用户与页面的互动是一场精彩的表演。而 JQuery&#xff0c;作为 JavaScript 的一种封装库&#xff0c;为这场表演提供了更为便捷和优雅的事件绑定方式。其中&#xff0c;on 和 off 两位主角&#xff0c;正是这场奇妙舞曲中的核心演员。在这篇博客…...

模块化Common JS 和 ES Module

目录 历程 1.几个函数&#xff1a;全局变量的污染&#xff0c;模块间没有联系 2.对象&#xff1a;暴露成员&#xff0c;外部可修改 3.立即执行函数&#xff1a;闭包实现模块私有作用域 common JS module和Module 过程 模块依赖&#xff1a;深度优先遍历、父 -> 子 -…...

基于java web个人财务管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

soc估计:DESIGN AND DEVELOPMENT OF SoC ESTIMATION MODEL USING MACHINE LEARNING

这是一篇印度那边学生的毕业论文&#xff0c;唯一要记录的是里面提到了一个特征构造的思想&#xff0c;记录如下&#xff1a; 论文思想&#xff1a; 特征选用速度、电流、电压、温度、平均电压、平均电流、平均速度&#xff0c;模型用cnnlstmlrlr 平均特征计算方式&#xff1a;…...

2、LeetCode之两数相加

给你两个非空的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照逆序的方式存储的&#xff0c;并且每个节点只能存储一位数字。请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。你可以假设除了数字0之外&#xff0c;这两个数都不会以0开头。 输入&am…...

redis三种集群方式

redis有三种集群方式&#xff1a;主从复制&#xff0c;哨兵模式和集群。 1.主从复制 主从复制原理&#xff1a; 从服务器连接主服务器&#xff0c;发送SYNC命令&#xff1b; 主服务器接收到SYNC命名后&#xff0c;开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所…...

InnoDB REDO LOG 详解:从原理到实现(基于 MySQL 8.0)

在现代关系型数据库系统中&#xff0c;事务的 持久性&#xff08;Durability&#xff09;是 ACID 特性的关键一环。为了在系统崩溃后仍能恢复数据一致性&#xff0c;InnoDB 引擎引入了 REDO LOG&#xff08;重做日志&#xff09;机制。 本文将深入剖析 REDO LOG 的作用、设计思…...

天梯赛L2-006 树的遍历

L2-006 树的遍历 给定一棵二叉树的后序遍历和中序遍历&#xff0c;请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤30&#xff09;&#xff0c;是二叉树中结点的个数。第二行给出其后序遍历序…...

【统计学】

统计学是数据分析与决策的基础工具&#xff0c;广泛应用于经济管理、金融保险等领域。统计数据包括分类、顺序和数值变量&#xff0c;按计量尺度、收集方法和时间状况分类。统计学核心概念包括总体、样本、参数、统计量、标志和指标&#xff0c;确保数据真实、方法科学、结论严…...

从演示到实战:基于快马平台构建一个功能完整的AI绘画社区应用

今天想和大家分享一个很有意思的实战项目 - 在InsCode(快马)平台上构建一个功能完整的AI绘画社区应用。这个想法来源于阿里悟空官网展示的AI绘画应用场景&#xff0c;但我们要做的是更贴近真实产品的综合性解决方案。 项目整体规划 首先需要明确&#xff0c;一个完整的AI绘画社…...

3个维度解析PhpWebStudy新版本:打造更稳定安全的本地开发环境

3个维度解析PhpWebStudy新版本&#xff1a;打造更稳定安全的本地开发环境 【免费下载链接】PhpWebStudy Lightweight Native Local Dev Toolbox for Windows, macOS & Linux. Run OpenClaw/n8n/Apache/Nginx/Caddy/Tomcat/PHP/Node.js/Bun/Deno/Python/Java/Go/Ruby/Perl/R…...

基于STM32的充电桩控制器设计(有完整资料)

资料查找方式&#xff1a;特纳斯电子&#xff08;电子校园网&#xff09;&#xff1a;搜索下面编号即可编号&#xff1a;T4532205M设计简介&#xff1a;本设计是基于单片机的充电桩控制器设计&#xff0c;主要实现以下功能&#xff1a;1、RFID可以注册卡以及删除卡&#xff0c;…...

UE5蓝图 沿着路径移动

...

4大模块构建企业级专利智能分析平台:基于Google Patents Public Data的深度技术解析

4大模块构建企业级专利智能分析平台&#xff1a;基于Google Patents Public Data的深度技术解析 【免费下载链接】patents-public-data Patent analysis using the Google Patents Public Datasets on BigQuery 项目地址: https://gitcode.com/gh_mirrors/pa/patents-public-…...

MongoDB中大型文本字段怎么存_GridFS切分与外部存储对比

会。MongoDB单文档上限16MB&#xff0c;但超2MB字符串易致客户端OOM或超时&#xff1b;GridFS非自动魔法&#xff0c;需手动管理分块、拼接与清理&#xff1b;大文本应优先存OSS/S3&#xff0c;Mongo仅存元数据。大文本存MongoDB会撑爆内存吗&#xff1f;会。MongoDB单文档上限…...

Web全栈开发学习路径规划:Phi-3-mini-gguf你的个性化导师

Web全栈开发学习路径规划&#xff1a;Phi-3-mini-gguf你的个性化导师 1. 为什么需要个性化学习路径 学习Web全栈开发就像建造一栋房子&#xff0c;不同的人需要不同的施工图纸。传统学习路径往往千篇一律&#xff0c;忽略了学习者的基础差异和目标差异。Phi-3-mini模型通过分…...