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

Hadoop三大组件之MapReduce(一)

Hadoop之MapReduce

1. MapReduce是什么

MapReduce是一个分布式运算程序的编程框架,旨在帮助用户开发基于Hadoop的数据分析应用。它的核心功能是将用户编写的业务逻辑代码与自带的默认组件整合,形成一个完整的分布式运算程序,并并发运行在一个Hadoop集群上。


2. MapReduce的优点

1) 易于编程

MapReduce框架只需实现几个简单的接口,用户便可以快速开发出一个分布式程序。这使得编写分布式程序的复杂性大大降低,从而促进了MapReduce的普及。

2) 良好的扩展性

随着计算需求的增加,用户只需简单地增加机器即可提升计算能力,Hadoop会自动将任务分配到新增的节点上。

3) 高容错性

Hadoop设计时考虑到了在廉价PC机器上运行的需求,因此具备高容错性。如果某个节点宕机,Hadoop会自动将计算任务转移到其他节点上,无需人工干预。

4) 适合PB级以上海量数据的离线处理

Hadoop可以实现大规模服务器集群的并发工作,提供高效的数据处理能力。


3. MapReduce的缺点

1) 不擅长实时计算

MapReduce无法像MySQL或Oracle那样,在毫秒或秒级内快速返回查询结果,适合批处理场景而非实时应用。

2) 不擅长流式计算

MapReduce的输入数据集是静态的,无法处理动态输入数据,因此不适合流式计算场景。

3) 不擅长DAG(有向无环图)计算

对于存在依赖关系的多个应用程序,MapReduce在处理时会导致大量的磁盘IO,影响性能。


4. MapReduce核心思想

以统计单词出现次数为例,MapReduce程序通常分为两个阶段:Map阶段和Reduce阶段。
在这里插入图片描述

Map阶段

  1. 读取输入数据并按行处理。
  2. 按空格切分每一行,生成键值对(KV对)。
  3. 将KV对按键分区,分发到不同的Reduce任务。

Reduce阶段

  1. 每个Reduce任务接收并处理来自Map阶段的输出数据。
  2. 统计以特定字母开头的单词数量。
  3. 将结果输出到文件。

案例流程

  • 输入数据:一个包含多个单词的文本文件。
  • Map阶段将这些单词分为不同的分区,例如:
    • 分区1:以a-p开头的单词
    • 分区2:以q-z开头的单词
  • Reduce阶段统计每个分区的单词数量,输出结果到文件。

假设我们有一个文本文件,内容如下:

apple banana grape
orange kiwi banana
apple orange peach
kiwi banana zebra
grape orange
1. InputFormat
  • InputFormat 将读取这个文本文件,并将其分割成多个Splits。假设每行作为一个Split。
    • Split 1: apple banana grape
    • Split 2: orange kiwi banana
    • Split 3: apple orange peach
    • Split 4: kiwi banana zebra
    • Split 5: grape orange
2. Map阶段

在Map阶段,Mapper会处理每个Split,并将每个单词映射为键值对(KV对)。

2.1 Mapper处理

对于每个Split中的每一行,Mapper会按空格分隔单词,并生成中间的KV对。例如:

  • 对于Split 1: apple banana grape

    • 生成 KV 对:
      • (apple, 1)
      • (banana, 1)
      • (grape, 1)
  • 对于Split 2: orange kiwi banana

    • 生成 KV 对:
      • (orange, 1)
      • (kiwi, 1)
      • (banana, 1)
  • 对于Split 3: apple orange peach

    • 生成 KV 对:
      • (apple, 1)
      • (orange, 1)
      • (peach, 1)
  • 对于Split 4: kiwi banana zebra

    • 生成 KV 对:
      • (kiwi, 1)
      • (banana, 1)
      • (zebra, 1)
  • 对于Split 5: grape orange

    • 生成 KV 对:
      • (grape, 1)
      • (orange, 1)
2.2 生成的中间KV对

经过Mapper处理,所有中间的数据可能如下所示:

(apple, 1)
(banana, 1)
(grape, 1)
(orange, 1)
(kiwi, 1)
(banana, 1)
(apple, 1)
(orange, 1)
(peach, 1)
(kiwi, 1)
(banana, 1)
(zebra, 1)
(grape, 1)
(orange, 1)
3. Shuffle阶段

Shuffle阶段负责将这些中间的KV对根据键进行分组和排序。

3.1 分区逻辑

将相同键的所有中间KV对聚集到一起,并根据字母范围进行分区:

  • 分区1(a-q):

    • apple: (apple, 1), (apple, 1)
    • banana: (banana, 1), (banana, 1), (banana, 1)
    • grape: (grape, 1), (grape, 1)
    • kiwi: (kiwi, 1), (kiwi, 1)
    • orange: (orange, 1), (orange, 1)
    • peach: (peach, 1)
  • 分区2(r-z):

    • zebra: (zebra, 1)
4. Reduce阶段

Reduce阶段会有两个Reducer,分别处理这两个分区的数据。

4.1 ReduceTask处理
  • ReduceTask 1(处理分区1 a-q)

    • 输入:
      (apple, 1)
      (apple, 1)
      (banana, 1)
      (banana, 1)
      (banana, 1)
      (grape, 1)
      (grape, 1)
      (kiwi, 1)
      (kiwi, 1)
      (orange, 1)
      (orange, 1)
      (peach, 1)
      
    • 处理统计数量,输出:
      apple: 2
      banana: 3
      grape: 2
      kiwi: 2
      orange: 2
      peach: 1
      
  • ReduceTask 2(处理分区2 r-z)

    • 输入:
      (zebra, 1)
      
    • 处理输出:
      zebra: 1
      
5. 输出

最终结果将被写入到HDFS中的指定文件,格式如下:

apple: 2
banana: 3
grape: 2
kiwi: 2
orange: 2
peach: 1
zebra: 1

5. MapReduce运行三大进程

MapReduce运行时的进程包括:

  • MrAppMaster:负责整体程序的调度和状态协调。
  • MapTask:负责Map阶段的数据处理流程。
  • ReduceTask:负责Reduce阶段的数据处理流程。

相关文章:

Hadoop三大组件之MapReduce(一)

Hadoop之MapReduce 1. MapReduce是什么 MapReduce是一个分布式运算程序的编程框架,旨在帮助用户开发基于Hadoop的数据分析应用。它的核心功能是将用户编写的业务逻辑代码与自带的默认组件整合,形成一个完整的分布式运算程序,并并发运行在一…...

SQL Server 分页查询的学习文章

SQL Server 分页查询的学习文章 一、SQL Server 分页查询1. 什么是分页查询?2. SQL Server 的分页查询方法2.1 使用 OFFSET 和 FETCH NEXT语法:示例: 2.2 使用 ROW_NUMBER() 方法语法:示例: 2.3 性能考虑3. 总结 一、S…...

告别PDF大文件困扰!4款PDF在线压缩工具助你轻松优化!

嘿,档案员小伙伴们,今天咱们来聊聊那些让咱们在档案堆里游刃有余的神器。这些工具啊,简直就是咱们档案员的得力助手,特别是在PDF压缩这块儿,简直就是神器中的神器! 1、福昕转换大师 网址:http…...

Find My汽车钥匙|苹果Find My技术与钥匙结合,智能防丢,全球定位

随着科技的发展,传统汽车钥匙向智能车钥匙发展,智能车钥匙是一种采用先进技术打造的汽车钥匙,它通过无线控制技术来实现对车门、后备箱和油箱盖等部件的远程控制。智能车钥匙的出现,不仅提升了汽车的安全性能,同时也让…...

mysql学习教程,从入门到精通,SQL UNION 运算符(27)

1、SQL UNION 运算符 UNION 运算符在 SQL 中用于合并两个或多个 SELECT 语句的结果集,并默认去除重复的行。如果你想要包含所有重复行,可以使用 UNION ALL。下面是一个使用 UNION 运算符的示例,假设我们有两个表:employees_2020 …...

PKCE3-PKCE实现(SpringBoot3.0)

在 Spring Boot 3.0 JDK 17 的环境下,实现 PKCE 认证的核心步骤包括: 1)引入依赖:使用 Spring Security OAuth 2.0 客户端进行授权码流程。 2)配置 OAuth 2.0 客户端:在 Spring Boot 中配置 OAuth 2.0 客…...

C++详解vector

目录 构造和拷贝构造 赋值运算符重载: vector的编辑函数: assign函数: push_back和pop_back函数: insert函数: erase函数: swap函数: clear函数: begin函数: e…...

Redis实战--Redis的数据持久化与搭建Redis主从复制模式和搭建Redis的哨兵模式

Redis作为一个高性能的key-value数据库,广泛应用于缓存、消息队列、排行榜等场景。然而,Redis是基于内存的数据库,这意味着一旦服务器宕机,内存中的数据就会丢失。为了解决这个问题,Redis提供了数据持久化的机制&#…...

World of Warcraft [CLASSIC] Engineering 421-440

工程学421-440 World of Warcraft [CLASSIC] Engineering 335-420_魔兽世界宗师级工程学需要多少点-CSDN博客 【萨隆邪铁锭】421-425 学习新技能,其他都不划算,只能做太阳瞄准镜 【太阳瞄准镜】426、427、428、429 【随身邮箱】430 这个基本要做的&am…...

VUE3.5版本解读

官网:Announcing Vue 3.5 | The Vue Point 2024年9月1日,宣布 Vue 3.5“天元突破:红莲螺岩”发布! 反应系统优化 在 3.5 中,Vue 的反应系统经历了另一次重大重构,在行为没有变化的情况下实现了更好的性能…...

spark计算引擎-架构和应用

一Spark 定义:Spark 是一个开源的分布式计算系统,它提供了一个快速且通用的集群计算平台。Spark 被设计用来处理大规模数据集,并且支持多种数据处理任务,包括批处理、交互式查询、机器学习、图形处理和流处理。 核心架构&#x…...

VUE 开发——AJAX学习(二)

一、Bootstrap弹框 功能&#xff1a;不离开当前页面&#xff0c;显示单独内容&#xff0c;供用户操作 步骤&#xff1a; 引入bootstrap.css和bootstrap.js准备弹框标签&#xff0c;确认结构通过自定义属性&#xff0c;控制弹框显示和隐藏 在<head>部分添加&#xff1a…...

机器学习-KNN分类算法

1.1 KNN分类 KNN分类算法&#xff08;K-Nearest-Neighbors Classification&#xff09;&#xff0c;又叫K近邻算法。它是概念极其简单&#xff0c;而效果又很优秀的分类算法。1967年由Cover T和Hart P提出。 KNN分类算法的核心思想&#xff1a;如果一个样本在特征空间中的k个最…...

云计算 Cloud Computing

文章目录 1、云计算2、背景3、云计算的特点4、云计算的类型&#xff1a;按提供的服务划分5、云计算的类型&#xff1a;按部署的形式划分 1、云计算 定义&#xff1a; 云计算是一种按使用量付费的模式&#xff0c;这种模式提供可用的、便捷的、按需的网络访问&#xff0c;进入可…...

【算法】DFS 系列之 穷举/暴搜/深搜/回溯/剪枝(上篇)

【ps】本篇有 9 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;全排列 .1- 题目解析 .2- 代码编写 2&#xff09;子集 .1- 题目解析 .2- 代码编写 3&#xff09;找出所有子集的异或总和再求和 .1- 题目解析 .2- 代码编写 4&#xff09;全排列 II…...

怎么绕开华为纯净模式安装软件

我是标题 众所周不知&#xff0c;华为鸿蒙系统自带纯净模式&#xff0c;而且 没法关闭 : ) 我反正没找到关闭键 以前或许会有提示&#xff0c;无视风险&#xff0c;“仍要安装”。但我这次遇到的问题是&#xff0c;根本没有这个选项&#xff0c;只有“应用市场”和“取消”&…...

CentOS7 离线部署docker和docker-compose环境

一、Docker 离线安装 1. 下载docker tar.gz包 下载地址&#xff1a; Index of linux/static/stable/x86_64/ 本文选择版本&#xff1a;23.0.6 2.创建docker.service文件 vi docker.service文件内容如下&#xff1a; [Unit] DescriptionDocker Application Container Engi…...

Vue 自定义组件实现 v-model 的几种方式

前言 在 Vue 中&#xff0c;v-model 是一个常用的指令&#xff0c;用于实现表单元素和组件之间的双向绑定。当我们使用原生的表单元素时&#xff0c;直接使用 v-model 是很方便的&#xff0c;但是对于自定义组件来说&#xff0c;要实现类似的双向绑定功能就需要一些额外的处理…...

Python Pandas数据处理效率提升指南

大家好&#xff0c;在数据分析中Pandas是Python中最常用的库之一&#xff0c;然而当处理大规模数据集时&#xff0c;Pandas的性能可能会受到限制&#xff0c;导致数据处理变得缓慢。为了提升Pandas的处理速度&#xff0c;可以采用多种优化策略&#xff0c;如数据类型优化、向量…...

最大正方形 Python题解

最大正方形 题目描述 在一个 n m n\times m nm 的只包含 0 0 0 和 1 1 1 的矩阵里找出一个不包含 0 0 0 的最大正方形&#xff0c;输出边长。 输入格式 输入文件第一行为两个整数 n , m ( 1 ≤ n , m ≤ 100 ) n,m(1\leq n,m\leq 100) n,m(1≤n,m≤100)&#xff0c;接…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...