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阶段
- 读取输入数据并按行处理。
- 按空格切分每一行,生成键值对(KV对)。
- 将KV对按键分区,分发到不同的Reduce任务。
Reduce阶段
- 每个Reduce任务接收并处理来自Map阶段的输出数据。
- 统计以特定字母开头的单词数量。
- 将结果输出到文件。
案例流程
- 输入数据:一个包含多个单词的文本文件。
- 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
- Split 1:
2. Map阶段
在Map阶段,Mapper会处理每个Split,并将每个单词映射为键值对(KV对)。
2.1 Mapper处理
对于每个Split中的每一行,Mapper会按空格分隔单词,并生成中间的KV对。例如:
-
对于Split 1:
apple banana grape
- 生成 KV 对:
(apple, 1)
(banana, 1)
(grape, 1)
- 生成 KV 对:
-
对于Split 2:
orange kiwi banana
- 生成 KV 对:
(orange, 1)
(kiwi, 1)
(banana, 1)
- 生成 KV 对:
-
对于Split 3:
apple orange peach
- 生成 KV 对:
(apple, 1)
(orange, 1)
(peach, 1)
- 生成 KV 对:
-
对于Split 4:
kiwi banana zebra
- 生成 KV 对:
(kiwi, 1)
(banana, 1)
(zebra, 1)
- 生成 KV 对:
-
对于Split 5:
grape orange
- 生成 KV 对:
(grape, 1)
(orange, 1)
- 生成 KV 对:
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弹框 功能:不离开当前页面,显示单独内容,供用户操作 步骤: 引入bootstrap.css和bootstrap.js准备弹框标签,确认结构通过自定义属性,控制弹框显示和隐藏 在<head>部分添加:…...
机器学习-KNN分类算法
1.1 KNN分类 KNN分类算法(K-Nearest-Neighbors Classification),又叫K近邻算法。它是概念极其简单,而效果又很优秀的分类算法。1967年由Cover T和Hart P提出。 KNN分类算法的核心思想:如果一个样本在特征空间中的k个最…...
云计算 Cloud Computing
文章目录 1、云计算2、背景3、云计算的特点4、云计算的类型:按提供的服务划分5、云计算的类型:按部署的形式划分 1、云计算 定义: 云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可…...
【算法】DFS 系列之 穷举/暴搜/深搜/回溯/剪枝(上篇)
【ps】本篇有 9 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)全排列 .1- 题目解析 .2- 代码编写 2)子集 .1- 题目解析 .2- 代码编写 3)找出所有子集的异或总和再求和 .1- 题目解析 .2- 代码编写 4)全排列 II…...
怎么绕开华为纯净模式安装软件
我是标题 众所周不知,华为鸿蒙系统自带纯净模式,而且 没法关闭 : ) 我反正没找到关闭键 以前或许会有提示,无视风险,“仍要安装”。但我这次遇到的问题是,根本没有这个选项,只有“应用市场”和“取消”&…...
CentOS7 离线部署docker和docker-compose环境
一、Docker 离线安装 1. 下载docker tar.gz包 下载地址: Index of linux/static/stable/x86_64/ 本文选择版本:23.0.6 2.创建docker.service文件 vi docker.service文件内容如下: [Unit] DescriptionDocker Application Container Engi…...
Vue 自定义组件实现 v-model 的几种方式
前言 在 Vue 中,v-model 是一个常用的指令,用于实现表单元素和组件之间的双向绑定。当我们使用原生的表单元素时,直接使用 v-model 是很方便的,但是对于自定义组件来说,要实现类似的双向绑定功能就需要一些额外的处理…...
Python Pandas数据处理效率提升指南
大家好,在数据分析中Pandas是Python中最常用的库之一,然而当处理大规模数据集时,Pandas的性能可能会受到限制,导致数据处理变得缓慢。为了提升Pandas的处理速度,可以采用多种优化策略,如数据类型优化、向量…...
最大正方形 Python题解
最大正方形 题目描述 在一个 n m n\times m nm 的只包含 0 0 0 和 1 1 1 的矩阵里找出一个不包含 0 0 0 的最大正方形,输出边长。 输入格式 输入文件第一行为两个整数 n , m ( 1 ≤ n , m ≤ 100 ) n,m(1\leq n,m\leq 100) n,m(1≤n,m≤100),接…...
ubuntu中软件的进程管理-结束软件运行
在Ubuntu系统中,当某个运行中的软件无法正常退出时,可以通过以下几种方法强制结束该软件: 方法一:使用系统监视器(System Monitor)–小白专属 这个相当于win上的资源管理器 打开系统监视器 可以通过点击屏…...
Windows环境部署Oracle 11g
Windows环境部署Oracle 11g 1.安装包下载2. 解压安装包3. 数据库安装3.1 执行安装脚本3.2 电子邮件设置3.3 配置安装选项3.4 配置系统类3.5 选择数据库安装类型3.6 选择安装类型3.7 数据库配置3.8 确认安装信息3.9 设置口令 Oracle常用命令 2023年10月中旬就弄出大致的文章&…...
C语言进阶【8】--联合体和枚举(联合体和枚举这么好用,你不想了解一下吗?)
本章概述 联合体类型的声明联合体的特点联合体的大小的计算枚举类型的声明枚举类型的优点枚举类型的使用枚举类型的大小彩蛋时刻!!! 联合体类型的声明 概述:联合体的关键字为 union。它的结构和结构体是一样的。进行展示…...
Android OTA升级
针对Android系统OTA升级,MTK平台有相关介绍文档:https://online.mediatek.com/apps/faq/detail?faqidFAQ27117&listSW 概念一:OTA包的构建 AOSP full build:Android原生提供的全量包的构建,意思就是可以从任何一…...
【项目经验分享】深度学习自然语言处理技术毕业设计项目案例定制
以下毕业设计是与深度学习自然语言处理(NLP)相关的毕业设计项目案例,涵盖文本分类、生成式模型、语义理解、机器翻译、对话系统、情感分析等多个领域: 实现案例截图: 基于深度学习的文本分类系统基于BERT的情感分析系…...
一觉醒来,YOLO11 冷不丁就来了
🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 前言:一觉醒来,YOLO11 冷不丁就来了ultralytics 版本更新…...
智能编辑器、版本控制与自动化脚本
在繁忙的工作中,每个开发者都渴望拥有一个“秘密武器”,帮助自己提升效率、减少错误,从而更快地完成任务。那么,在众多编程工具中,哪一款能够成为你的工作效率翻倍的“秘密武器”呢?本文将探讨智能的代码编…...
jenkinsfile实现镜像构建、发布
实现代码打包编译 容器镜像构建 jenkins编译采用docker构建。 遇到问题: 1.需要限制docker 容器的内存和cpu docker { image ‘ccr.ccs.tencentyun.com/libary/maven:3.6.3-jdk-8’ args “-v ${WORKSPACE}:/workspace --memory‘2048m’ --cpus‘1’” } 2.jenkins构建需要限制…...
OSPF路由计算
关于OSPF路由的基础概述可以看看这篇博客 动态路由---OSPF协议基础https://blog.csdn.net/ZZZCY2003/article/details/141335261 区域内路由计算 LSA概述 LSA是OSPF进行路由计算的关键依据OSPF的LSU报文可以携带多种不同类型的LSA各种类型的LSA拥有相同的报文头部 重要字段解…...
【设计模式-迭代】
定义 迭代器模式(Iterator Pattern)是一种行为型设计模式,用于提供一种顺序访问集合对象元素的方式,而不暴露该对象的内部表示。通过迭代器,客户端可以在不需要了解集合实现的细节的情况下遍历集合中的元素。 UML图 …...
做视频网站需要多大带宽/成都seo排名
https://chart.googleapis.com/chart?chtqr&chs150x150&choeUTF-8&chldL|4&chl%E8%BF%99%E9%87%8C%E6%89%93%E6%96%87%E5%AD%97 chl为需要生成的文字转载于:https://www.cnblogs.com/sxmny/archive/2012/11/18/2776383.html...
外贸开发网站开发/交换友链平台
依赖实际上是大面积存在的,一个Java类是无法完成太多的工作的,所以需要依赖其他的Class来实现目的。例如,business层会依赖data层获取数据,那么dataService就是bizService的依赖。 public class BusinessServiceImpl { public lo…...
蚌埠市做网站/宁波专业seo服务
文章目录一、编写项目代码二、编写Azkaban必须文件三、使用Azkaban执行项目代码一、编写项目代码 package Azkaban;import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import java.util.Arr…...
济南外贸网站建设公司排名/在线识图
计算机网络课程设计某大学校园网设计_1摘要当今世界,各种先进的科学技术飞速发展,给人们的生活带来了深远的影响,它极大地改善着我们的生活方式。在以计算机技术为代表的信息科技的发展更是日新月异,从各个方面影响和改变着我们的…...
网站建设服务器篇/教育培训班
String的hashcode()方法 public int hashCode() {int h hash;if (h 0 && value.length > 0) {char val[] value;for (int i 0; i < value.length; i) {h 31 * h val[i];}hash h;}return h;} 选择31是因为可以用移位和减法运算来代替乘法,从而…...
怎么优化网站加载速度/百度一下官方网址
什么是jar包 jar是Java Archive文件的后缀,它代表的含义是将java的字节码文件以及相关的静态资源进行归档。我们知道通常一个java程序需要包含多个字节码文件,为了方便在网络上进行传输就需要进行压缩,而jar包实际上就是zip压缩文件。 如何…...