MapReduce官方案例wordcount

2023-11-10

在这里插入图片描述
wordcountReduce.java

package MaperReduce;

import java.io.IOException;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
//reduce阶段

/*
* 四个泛型的解释
*  KEYIN:K2的类型
*  VALUEIN:V2的类型
*  
*  KEYOUT:K3的类型
*  VALUEOUT:V3的类型
*/
public class wordcountReduce extends Reducer<Text, LongWritable, Text, LongWritable> {
	/*
	 * 参数 : key :新k2 
	 * value:新v2 
	 * context:表示上下文对象
	 */
	@Override
	protected void reduce(Text key, Iterable<LongWritable> values,
			Reducer<Text, LongWritable, Text, LongWritable>.Context context) throws IOException, InterruptedException {
		long count = 0;
		//遍历集合,将集合中的数字相加,得到v3
		for (LongWritable value : values) {
			count += value.get();
		}
		//将k3和v3写入上下文中
		context.write(key, new LongWritable(count));
	}
}

wrodcountMaper.java

package MaperReduce;

import java.io.IOException;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
//map阶段

/*
 * 四个泛型的解释
 *  KEYIN:K1的类型
 *  VALUEIN:V1的类型
 *  
 *  KEYOUT:K2的类型
 *  VALUEOUT:V2的类型
 */
public class wrodcountMaper extends Mapper<LongWritable, Text, Text, LongWritable> {
//map方法就是将k1和v1转为k2和v2
	/*
	 * 参数: key :k1 行偏移量 value :v1 每行的文本数据(就是统计的单词本身) context:表示上下文对象
	 */
	@Override
	protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, LongWritable>.Context context)
			throws IOException, InterruptedException {
		Text text = new Text();
		LongWritable longWritable = new LongWritable();
		// 1、将一行的文本数据进行拆分
		String[] split = value.toString().split(",");
		// 2、遍历数组,组装k2和v2
		for (String word : split) {
			// 可以new出来调用 context.write(new Text(word), new LongWritable(1));
			// 3、将k2和v2写入上下文
			text.set(word);
			longWritable.set(1);
			context.write(text, longWritable);
		}
	}
}

JobMain.java(也就是driver类,驱动类)

package MaperReduce;

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

public class JobMain extends Configured implements Tool{
	//该方法用于指定一个job任务
	public int run(String[] args) throws Exception {
		//1、创建一个job任务对象
		Job job=Job.getInstance(super.getConf(),"wordcount");
		//2、配置job任务对象(8个步骤)
		
		//一、指定文件的读取方式和读取路径
		job.setInputFormatClass(TextInputFormat.class);
		TextInputFormat.addInputPath(job, new Path("hdfs:192.168.2.101:9000/wordcount"));
		
		//二、指定Map阶段的处理方式
		job.setMapperClass(wrodcountMaper.class);
		//设置map阶段k2的类型
		job.setMapOutputKeyClass(Text.class);
		//设置map阶段v2的类型
		job.setMapOutputValueClass(LongWritable.class);
		
		
		//suffer阶段 第三四五六步采用默认的方式
		//第七步:指定Reduce阶段的处理方式和和数据类型
		job.setReducerClass(wordcountReduce.class);
		//设置k3的类型
		job.setOutputKeyClass(Text.class);
		//设置v3的类型
		job.setMapOutputValueClass(LongWritable.class);
		
		//第八步:设置输出类型
		job.setOutputFormatClass(TextOutputFormat.class);
		//设置输出的路径
		TextOutputFormat.setOutputPath(job,new Path("hdfs:192.168.2.101:9000/wordcount_out"));
		
		//等待任务结束
		boolean b1 = job.waitForCompletion(true);
		
		//如果b1是ture那就返回0,反之返回1
		return b1 ? 0:1;
		
	}
public static void main(String[] args) throws Exception {
	Configuration configuration=new Configuration();
	//启动job任务
	int run=ToolRunner.run(configuration,new JobMain(), args);
	System.exit(run);
}
}

运行模式:
集群运行:
1、将MapReduce程序提交给Yarn集群,分法到很多节点上并发执行
2、处理的数据和输出结果应该位于HDFS文件系统
3、提交集群的实现步骤,将程序打成jar包,并上传,然后在集群上用hadoop命令启动

hadoop jar hadoop_hdfs_operate-1.0-SNAPSHOT.jar
cn.itcast.mapreduce.JobMain

用maven打jar包,需要添加的打包插件依赖

  <build>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-assembly-plugin </artifactId>
				<configuration>
					<descriptorRefs>
						<descriptorRef>jar-with-dependencies</descriptorRef>
					</descriptorRefs>
					<archive>
						<manifest>
							<mainClass>MaperReduce.JobMain</mainClass>
						</manifest>
					</archive>
				</configuration>
				<executions>
					<execution>
						<id>make-assembly</id>
						<phase>package</phase>
						<goals>
							<goal>single</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

在这里插入图片描述
以上红框内容是需要修改的地方,是你自己的主类路径
在这里插入图片描述
在这里插入图片描述
这有个叉,没事,一会儿就好。

在这里插入图片描述
打包:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
把他重命名
在这里插入图片描述
指定一个目录把刚刚的jar包传上去

在这里插入图片描述在这里插入图片描述

本地运行模式:
1、MapReduce程序是在本地以单进程的形式运行
2、处理的数据及输出结果在本地文件系统

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MapReduce官方案例wordcount 的相关文章

  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • Mockito:如何通过模拟测试我的服务?

    我是模拟测试新手 我想测试我的服务方法CorrectionService correctPerson Long personId 实现尚未编写 但这就是它将执行的操作 CorrectionService将调用一个方法AddressDAO这将
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 如何配置Hive仓库路径?

    我修改了这部分

随机推荐

  • 华为OD机试 -记负均正(C++ & Java & JS & Python)

    描述 首先输入要输入的整数个数n 然后输入n个整数 输出为n个整数中负数的个数 和所有正整数的平均值 结果保留一位小数 0即不是正整数 也不是负数 不计入计算 如果没有正数 则平均值为0 数据范围 1 2000 1 n 2000 输入的整数
  • Ubuntu 内存泄漏检测工具Valgrind的安装

    第一种方式 下载源码 编译安装 比较复杂 wget http valgrind org downloads valgrind 3 4 1 tar bz2 tar xvf valgrind 3 4 1 tar bz2 cd valgrind
  • Openwrt开发之网络配置

    MT7688平台运行Openwrt18 06版本 mt7688的rt305x esw交换芯片有6个交换接口 其中一个和CPU内核连接 其余可通过RJ45接口引出 手里的开发板只引出其中3个口 这3个口一个作为wan口 其余两个作为lan口
  • pink老师【品优购商城】

    最初 好久之前学过H5 CSS JS 跟着黑马的pink老师写了品优购商城的静态界面 复习一下的同时也学到了许多东西 收获 链接 https pan baidu com s 1P5FautCJCwK vTMFycvV1w pwd wsox
  • 【点云重采样Resampling】Python-pcl 基于多项式平滑点云及法线估计的曲面重建

    1 点云重采样 基于多项式平滑点云及法线估计的曲面重建以实现重采样 可以使得点云数据更规整一些 没之前那么杂乱 set Compute Normals True 可以通过在最小二乘法中进行法线估计 提高重采样准确度 set polynomi
  • char&short的整形提升

    目录 前言 整形提升的意义 整形提升的步骤 负数的整形提升 正数的整形提升 无符号整形提升 整形提升的例子 前言 前面我们介绍了有关C语言中操作符的有关知识 当然操作符的作用就是要求相关表达式的值 当不同的数据类型相加减的时候 我们要进行一
  • 嵌入式数据库sqlite3交叉编译和移植测试总结

    一 背景 根据项目需求 需要使用数据库存放一些数据 比如用户信息 配置参数 以及后期所采集RTU设备的数据等 这里选择了适合嵌入式产品的数据库 sqlite3 二 移植平台和环境 主机端 Ubuntu ARM板 ZLG EasyARM i
  • 事务并发问题及事务隔离级别的学习

    以下内容都是看的咕泡学院的大神老师讲的一个公开课 就是记录一下 事务并发带来的三大问题 1 脏读 如下图 左右两个事务A B 事务A首先查询id 1的数据 得到age 16之后 事务B对id 1的数据 将age 16更新为age 18 然后
  • STM32驱动步进电机(原理、程序、解决电机只震动不转动问题)

    一 步进电机的介绍 首先来看一下步进电机的样子 本介绍采用平时最常见也是最简单的28BYJ 48 这是一个五线四项电机 五线 顾名思义 外部五条线 四项 电机内部的定子上有8个齿 正对着的2个齿上的绕组又是串联在一起的 也就是说正对着的2个
  • STM32CUBE 定时器使用

    目录 STM32F407VET6 定时中断 记录各个STM32型号的定时器使用方法 包括定时中断 输入捕获等功能 持续更新 STM32F407VET6 定时中断 时钟配置 这里主频配置为100Mhz 最高168Mhz 即HCLK 100MH
  • [用python辅助学生中考与高考-1]:家长篇-科技特长生概述与优势

    目录 前言 这是科技的最好时代 1 什么是科技特长生 2 科技特长生的优势 科技特长生录取方式 3 科技特长生的类型 4 科技特长生七大招生类目 5 如何成为科技特长生 6 常见的赛事 前言 这是科技的最好时代 随着国家强基计划的出台和国际
  • java编程之java jwt token什么是JWT?(一)

    转自 http www leftso com blog 220 html 一 什么是JWT 了解JWT 认知JWT 首先jwt其实是三个英语单词JSON Web Token的缩写 通过全名你可能就有一个基本的认知了 token一般都是用来认
  • 房屋租赁系统

    java房屋租赁系统
  • RFC文档:官网、中文RFC文档 及 HTTP/2相关文档

    记录一下RFC的官方文档 2023 06 12修正中文RFC文档无法访问问题 一 RFC官方网站 http www rfc editor org Index of rfc RFC文档列表 Index of rfc 二 中文RFC文档 中文R
  • OS面试题(转载)

    转载自 http placement freshersworld com power preparation technical interview preparation os interview questions 23351 1 Wh
  • Tracy 小笔记 Vue - Vue 对象

    Vue 对象 const vue new Vue options el 类型 String HtmlElement 作用 挂载对象 决定之后Vue 对象会管理哪个 Dom template 当同时有 el 和 tempalte 的时候这里写
  • java泛型

    一 泛型概念的提出 为什么需要泛型 首先 我们看下下面这段简短的代码 1 public class GenericTest 2 3 public static void main String args 4 List list new Ar
  • 计算机文档加密如何解锁,bitlocker怎么解锁_bitlocker解锁方法

    许多用户为了保护电脑文件安全不被偷看 都会喜欢使用bitlocker加密功能来进行加密 Bitlocker是一种独特的为磁盘添加密码的工具 但是很多用户使用bitlocke加密完之后 不知道要怎么解锁 为此小编这就给大家带来bitlocke
  • Vue 使用 mqttws31.js 实现消息实时推送功能(WebSocket)

    1 在 vue 文件中引入 mqttws31 js 文件 mqttws31 js 文件代码在本页底部 import utils mqttws31 2 在 vue 文件中添加代码 export default data return clie
  • MapReduce官方案例wordcount

    wordcountReduce java package MaperReduce import java io IOException import org apache hadoop io LongWritable import org