Hadoop的MapReduce详解

文章目录

  • Hadoop的MapReduce详解
    • 一、引言
    • 二、MapReduce的核心概念
      • 1、Map阶段
        • 1.1、Map函数的实现
      • 2、Reduce阶段
        • 2.1、Reduce函数的实现
    • 三、MapReduce的执行流程
    • 四、MapReduce的使用实例
      • Word Count示例
        • 1. Mapper类
        • 2. Reducer类
        • 3. 执行Word Count
    • 五、总结

Hadoop的MapReduce详解

一、引言

MapReduce是一个由Google提出并实现的软件框架,用于大规模数据集(大于1TB)的并行计算。在Hadoop项目中,MapReduce被用来进行分布式数据处理。它将任务分为Map阶段和Reduce阶段,Map阶段负责处理输入数据并产生中间结果,Reduce阶段则对Map阶段的中间结果进行汇总以得到最终结果。

二、MapReduce的核心概念

1、Map阶段

Map阶段是MapReduce框架中的第一个阶段,它的主要任务是处理输入数据并生成中间结果。Map函数接收输入的键值对,并产生一组中间键值对,这些中间结果会被框架自动收集并传递给Reduce阶段。

1.1、Map函数的实现
public static class TokenizerMapperextends Mapper<Object, Text, Text, IntWritable>{private final static IntWritable one = new IntWritable(1);private Text word = new Text();public void map(Object key, Text value, Context context) throws IOException, InterruptedException {StringTokenizer itr = new StringTokenizer(value.toString());while (itr.hasMoreTokens()) {word.set(itr.nextToken());context.write(word, one);}}
}

在上述代码中,Mapper类继承自org.apache.hadoop.mapreduce.Mapper类,map方法接收输入的文本行,并将其分割成单词,每个单词作为键,对应的值固定为1。

2、Reduce阶段

Reduce阶段是MapReduce框架中的第二个阶段,它接收来自Map阶段的中间结果,并进行汇总处理,最终输出计算结果。

2.1、Reduce函数的实现
public static class IntSumReducerextends Reducer<Text,IntWritable,Text,IntWritable> {private IntWritable result = new IntWritable();public void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {int sum = 0;for (IntWritable val : values) {sum += val.get();}result.set(sum);context.write(key, result);}
}

在上述代码中,Reducer类继承自org.apache.hadoop.mapreduce.Reducer类,reduce方法接收相同的键和该键对应的所有值的集合,计算这些值的总和,并将结果输出。
在这里插入图片描述

三、MapReduce的执行流程

MapReduce的执行流程大致可以分为以下几个步骤:

  1. 输入分片:Hadoop将输入数据切分成多个数据块,并为每个数据块分配一个Map任务。
  2. Map任务执行:每个Map任务对分配到的数据块进行处理,并产生中间结果。
  3. Shuffle和Sort:Map任务产生的中间结果被Shuffle(重新分配)和Sort(排序)。
  4. Reduce任务执行:Reduce任务对排序后的中间结果进行处理,并输出最终结果。
  5. 输出结果:Reduce任务的输出结果被写入到HDFS中。

在这里插入图片描述

四、MapReduce的使用实例

Word Count示例

Word Count是MapReduce中的经典应用之一,其主要任务是统计文本文件中每个单词出现的次数。以下是Word Count的实现步骤和代码示例:

1. Mapper类

Mapper类负责读取输入的文本行,并将其分割成单词,然后输出键值对,其中键是单词,值是1。

public class TokenizerMapperextends Mapper<Object, Text, Text, IntWritable>{private final static IntWritable one = new IntWritable(1);private Text word = new Text();public void map(Object key, Text value, Context context) throws IOException, InterruptedException {StringTokenizer itr = new StringTokenizer(value.toString());while (itr.hasMoreTokens()) {word.set(itr.nextToken());context.write(word, one);}}
}
2. Reducer类

Reducer类接收相同的键和该键对应的所有值的集合,计算这些值的总和,并将结果输出。

public static class IntSumReducerextends Reducer<Text,IntWritable,Text,IntWritable> {private IntWritable result = new IntWritable();public void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {int sum = 0;for (IntWritable val : values) {sum += val.get();}result.set(sum);context.write(key, result);}
}
3. 执行Word Count

执行Word Count的命令如下:

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar wordcount input.txt output

这里input.txt是输入文件,output是输出目录。执行后,输出目录中会包含处理结果,通常包括_SUCCESSpart-r-00000两个文件,其中part-r-00000包含了最终的单词计数结果。

五、总结

MapReduce是一种强大的分布式数据处理框架,它通过将复杂的数据处理任务分解为简单的Map和Reduce操作,使得对大规模数据集的处理变得简单和高效。理解MapReduce的工作原理和核心概念对于大数据处理领域的开发者来说至关重要。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • Hadoop笔记_3
  • (超详细)MapReduce工作原理及基础编程

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

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

相关文章

【操作系统】每日 3 题(三十五)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12820365.html &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享操作系统面试中常见的面试题给大家~ ❤️…

c#:winform引入bartender

1、vs新建项目 ①选择Windows窗体应用&#xff08;.NET Framework&#xff09; 2、将bartender引入vs中 ①找到bartender的安装目录&#xff0c;复制Seagull.BarTender.Print.dll文件 ②粘贴到项目->bin->Debug文件&#xff0c;并可创建Model文件夹&#xff1a;为了存放…

基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…

macOS安装nvm node

macOS安装nvm macOS安装nvm创建 nvm 工作目录配置环境变量使用 nvm查看可用的 Node.js 版本安装特定版本 macOS安装nvm brew install nvm创建 nvm 工作目录 mkdir ~/.nvm配置环境变量 vim ~/.zshrc# nvm export NVM_DIR"$HOME/.nvm" [ -s "/opt/homebrew/opt…

详细描述一下Elasticsearch更新和删除文档的过程?

大家好&#xff0c;我是锋哥。今天分享关于【详细描述一下Elasticsearch更新和删除文档的过程&#xff1f;】面试题。希望对大家有帮助&#xff1b; 详细描述一下Elasticsearch更新和删除文档的过程&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 E…

Ruby 模块(Module)

Ruby 模块&#xff08;Module&#xff09; 概述 Ruby 是一种动态、开放源代码的编程语言&#xff0c;以其简洁明了的语法和强大的功能而闻名。在 Ruby 中&#xff0c;模块&#xff08;Module&#xff09;是一个重要的概念&#xff0c;它用于封装一组相关的方法和常量。模块提…

关于相机选型的一些参数说明

上一篇&#xff1a;关于相机的一些参数计算&#xff08;靶面、视野等&#xff09; 目录 1.卷帘快门和全局快门1.1 卷帘快门1.2 全局快门PS&#xff1a;视觉伺服与快门选择 2.黑白和彩色3.CCD和CMOS3.1 CCD3.2 CMOSCCD VS CMOS 4.面阵和线扫4.1 面阵4.2 线扫4.3 面阵 VS 线扫 5.…

ctfshow

1,web21 Basic认证采用Base64加密方式&#xff0c;Base64解码字符串发现是 用户名:密码 的格式进行Base64编码。 密码shark63 2,web22 用 子域名扫描器 扫出flag.ctf.show拿到flag&#xff0c;但这个域名已经没了所以就直接交的官方提供的flag。 3,web23 这段PHP代码是一个简单…

python 什么是数据类dataclass,以及它的应用场景

一、什么是数据类dataclass? dataclass 是 Python 3.7 引入的一个模块&#xff0c;旨在简化类的定义&#xff0c;特别是对于那些主要用于存储数据的类。它通过自动生成常见的方法&#xff08;如 __init__、__repr__、__eq__ 等&#xff09;来减少样板代码&#xff0c;使得开发…

条件编译(手绘)

大家好&#xff0c;今天给大家分享一下条件编译&#xff0c;由于符号有点难写&#xff0c;我已经将内容记在笔记本中&#xff0c;现在供大家学习。 那么我们来看看代码的实现

前端和后端

前端和后端 前端、后端的编程语言/服务器前端定义前端技术栈后端定义后端技术栈 web服务器数据库浏览器URL 前端、后端的编程语言/服务器 前端定义 前端指的是用户在使用软件时所看到的那部分&#xff0c;是与用户直接进行交互的部分。主要负责展示信息或数据&#xff0c;并将…

【滤波器】低通、带通、高通滤波器区别及作用

滤波器种类与区别 滤波器是用来选择信号中某一频段并抑制其他频段的一类电路元件或系统&#xff0c;主要根据频率选择性分类。以下是常见的三种滤波器&#xff08;低通、带通、高通&#xff09;的区别&#xff0c;以及其他类型的滤波器。 1. 低通滤波器&#xff08;Low-Pass F…

大数据技术之SparkCore

RDD概述 什么是RDD RDD&#xff08;Resilient Distributed Dataset&#xff09;叫做弹性分布式数据集&#xff0c;是Spark中最基本的数据抽象。代码中是一个抽象类&#xff0c;它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 RDD五大特性 RDD编程 RDD的创…

MacOS通过VMware Fusion安装windows 11问题汇总

环境 虚拟机&#xff0c;VMware Fusion 13.6.1本地机器&#xff0c;ARM芯片的Mac&#xff0c;系统版本14.5Windows系统镜像&#xff0c;Window11 ARM 64 bit 安装卡在WiFi连接界面 适合我本地环境的解决步骤为&#xff1a; 1、系统设置网络共享 我开启的是en5&#xff0c;这…

高度统一:极大和极小如何统于一

英语里有两个单词&#xff1a; min n.最小值max n.最大值 min和max其实是缩略值&#xff0c;它们词源上的本质&#xff0c;min来自于“极小”&#xff0c;max来自于“极大”&#xff0c;都来自于“极&#xff0c;极限&#xff0c;极度”的概念 那么&#xff0c;问题来了&…

Python 快速入门(上篇)❖ Python基础知识

Python 基础知识 Python安装**运行第一个程序:基本数据类型算术运算符变量赋值操作符转义符获取用户输入综合案例:简单计算器实现Python安装** Linux安装: yum install python36 -y或者编译安装指定版本:https://www.python.org/downloads/source/ wget https://www.pyt…

element-plus教程:Layout 布局

一、基础用法 1. 引入Layout布局组件 首先&#xff0c;确保你已经在项目中安装了Element Plus&#xff0c;并在main.js或main.ts中引入了Element Plus及其样式。 2. 使用<el-row>和<el-col>组件 在Element Plus中&#xff0c;Layout布局主要通过<el-row>…

Python 使用 Token 认证方案连接 Kubernetes (k8s) 的详细过程

在 Kubernetes 中&#xff0c;使用 Token 认证是一种常见的客户端身份验证方式&#xff0c;尤其适用于 ServiceAccount。以下是详细的步骤&#xff0c;包括如何查看 Token、获取 API 服务地址、配置远程连接&#xff0c;以及如何在 Python 中连接 k8s。 1. 获取 Token 首先&a…

Exploring Prompt Engineering: A Systematic Review with SWOT Analysis

文章目录 题目摘要简介方法论背景相关工作评估结论 题目 探索快速工程&#xff1a;基于 SWOT 分析的系统评价 论文地址&#xff1a; https://arxiv.org/abs/2410.12843 摘要 在本文中&#xff0c;我们对大型语言模型 (LLM) 领域的提示工程技术进行了全面的 SWOT 分析。我们强…

Android Framework WMS面试题及参考答案

什么是 WindowManagerService&#xff08;WMS&#xff09;&#xff1f;它的作用是什么&#xff1f; WindowManagerService&#xff08;WMS&#xff09;是 Android 系统中非常重要的一个系统服务。它运行在系统进程&#xff08;system_server 进程&#xff09;中。 从本质上来说…