深入学习MapReduce:原理解析与基础实战
标题:深入学习MapReduce:原理解析与基础实战
MapReduce是一种分布式计算框架,用于大规模数据的处理和分析。作为Hadoop生态系统的核心组件,MapReduce凭借其简单的编程模型和强大的并行计算能力,广泛应用于大数据领域。本文将从理论到实践,逐步讲解MapReduce的原理、实现和基础案例。
一、MapReduce的基本原理
MapReduce框架以分布式计算为核心,分解任务并分配到多个计算节点上执行,其主要工作流程由两部分组成:Map阶段 和 Reduce阶段。
1.1 MapReduce的工作流程
-
输入分片(Input Splitting)
将输入数据分片,每个分片会被分配给一个Map任务。 -
Map阶段
Map任务对输入数据进行处理,生成键值对(Key-Value Pairs)。 -
分组与排序(Shuffle and Sort)
按键对中间结果进行分组并排序,将相同键的值分为一组。 -
Reduce阶段
对每组键值对进行聚合操作,输出最终结果。 -
结果输出
将Reduce的结果存储到指定位置(如HDFS)。
1.2 核心组件
- Map函数:将输入数据映射为键值对形式。
- Reduce函数:对相同键的数据进行汇总或聚合。
- Shuffle:Map和Reduce之间的桥梁,负责分组和排序。
二、MapReduce编程模型
MapReduce的编程模型抽象为以下两种操作:
-
Map操作
输入:原始数据
输出:中间键值对(Key, Value) -
Reduce操作
输入:分组后的键值对(Key, [Values])
输出:聚合结果
三、MapReduce基础实战:单词计数
3.1 实现目标
给定一段文本内容,统计每个单词的出现次数。
示例输入:
Hello World
Hello Hadoop
预期输出:
Hello 2
World 1
Hadoop 1
3.2 Python实现
Mapper代码
Mapper读取输入数据,将其转化为键值对形式:
import sys# 从标准输入中读取数据
for line in sys.stdin:# 去除首尾空格,并按空格分割成单词words = line.strip().split()for word in words:# 输出键值对,键为单词,值为1print(f"{word}\t1")
Reducer代码
Reducer将Mapper的输出按键分组,并统计每个键的值:
import syscurrent_word = None
current_count = 0# 从标准输入中读取Mapper输出
for line in sys.stdin:word, count = line.strip().split('\t')count = int(count)if word == current_word:current_count += countelse:if current_word:# 输出当前单词及其总数print(f"{current_word}\t{current_count}")current_word = wordcurrent_count = count# 输出最后一个单词的统计结果
if current_word:print(f"{current_word}\t{current_count}")
3.3 运行步骤
-
准备输入数据
创建一个名为input.txt
的文件,内容如下:Hello World Hello Hadoop
-
运行Hadoop Streaming
使用Hadoop Streaming运行MapReduce任务:hadoop jar /path/to/hadoop-streaming.jar \-input /path/to/input.txt \-output /path/to/output \-mapper mapper.py \-reducer reducer.py
-
查看输出结果
执行以下命令查看输出:hadoop fs -cat /path/to/output/part-00000
输出内容如下:
Hadoop 1 Hello 2 World 1
四、MapReduce的实际应用
4.1 日志分析
通过MapReduce处理Web服务器日志,分析访问次数、响应时间等关键指标。
示例:统计每个IP的访问次数。
-
Mapper代码:
import sysfor line in sys.stdin:ip = line.strip().split()[0] # 提取IP地址print(f"{ip}\t1")
-
Reducer代码:
import syscurrent_ip = None current_count = 0for line in sys.stdin:ip, count = line.strip().split('\t')count = int(count)if ip == current_ip:current_count += countelse:if current_ip:print(f"{current_ip}\t{current_count}")current_ip = ipcurrent_count = countif current_ip:print(f"{current_ip}\t{current_count}")
4.2 数据清洗
在大数据处理中,MapReduce可以用于过滤无效数据、清洗噪声数据。
示例:过滤文本中的空行和特殊字符。
- Mapper代码:
import sysfor line in sys.stdin:clean_line = ''.join(filter(str.isalnum, line))if clean_line.strip():print(clean_line.strip())
4.3 机器学习
MapReduce可以用于训练分布式机器学习模型,如K-means、线性回归等。
五、MapReduce的优缺点
5.1 优点
- 分布式计算:MapReduce通过分布式计算大幅提升处理性能。
- 容错性强:任务失败时,自动重试机制确保结果正确。
- 扩展性高:支持大规模集群,轻松扩展计算能力。
5.2 缺点
- 实时性较差:MapReduce主要适合批处理任务,对实时性要求高的任务支持较弱。
- 调试困难:分布式环境中的调试较复杂。
- 编程模型简单但笨重:复杂任务需要设计多个MapReduce作业,代码维护成本较高。
六、MapReduce的演进
随着大数据技术的发展,新的分布式计算框架如Apache Spark和Apache Flink出现,它们在性能、编程模型和实时性方面超越了MapReduce。但MapReduce的思想依然是这些框架的基础,特别是在批处理任务中仍然具有广泛的应用。
七、总结
MapReduce通过简单的编程模型,将复杂的分布式计算任务分解为Map和Reduce两个阶段,极大地降低了开发难度。本文从理论到实践,详细介绍了MapReduce的基本原理和实战案例,希望能够帮助读者快速上手MapReduce编程,并在实际项目中加以应用。
无论是在日志分析、数据清洗还是机器学习领域,MapReduce都提供了一种高效、可靠的解决方案。通过不断实践和优化,您可以充分发挥MapReduce在大数据处理中的强大能力。
本文由CSDN作者撰写,转载请注明出处!
相关文章:
深入学习MapReduce:原理解析与基础实战
标题:深入学习MapReduce:原理解析与基础实战 MapReduce是一种分布式计算框架,用于大规模数据的处理和分析。作为Hadoop生态系统的核心组件,MapReduce凭借其简单的编程模型和强大的并行计算能力,广泛应用于大数据领域。…...
医院数据库优化:提升性能与响应时间的关键策略
一、引言 在当今数智化时代,医院信息系统不仅要追踪管理伴随人流、财流、物流所产生的管理信息,还应支持以病人医疗信息记录为中心的整个医疗、科学、科研活动,提高整个医院的运作效率。但随着信息化系统积累数据的增长,特别是病…...
OpenAI Whisper 语音识别 模型部署及接口封装
环境配置: 一、安装依赖: pip install -U openai-whisper 或者,以下命令会从这个存储库拉取并安装最新的提交,以及其Python依赖项: pip install githttps://github.com/openai/whisper.git 二、安装ffmpeg: cd …...
设计模式 外观模式 门面模式
结构性模式-外观模式 门面模式 适用场景:如果你需要一个指向复杂子系统的直接接口, 且该接口的功能有限, 则可以使用外观模式。 不用关心后面的查询具体操作 /*** 聚合查询接口*/ RestController RequestMapping("/search") Slf…...
AI智算-正式上架GPU资源监控概览 Grafana Dashboard
下载链接 https://grafana.com/grafana/dashboards/22424-ai-gpu-20241127/...
颜色分类
颜色分类 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sort 函数…...
使用 pycharm 新建使用 conda 虚拟 python 环境的工程
1. conda 常见命令复习: conda env list // 查看 conda 环境列表 conda activate xxxenv // 进入指定 conda 环境2. 环境展示: 2.1. 我的物理环境的 Python 版本为 3.10.9: 2.2. 我的 conda 虚拟环境 env_yolov9_python_3_8 中的 pyth…...
图形渲染性能优化
variable rate shading conditional render 设置可见性等, 不需要重新build command buffer indirect draw glMultiDraw* - 直接支持多次绘制glMultiDrawIndirect - 间接多次绘制multithreading 多线程录制 实例化渲染 lod texture array 小对象剔除 投影到…...
14、保存与加载PyTorch训练的模型和超参数
文章目录 1. state_dict2. 模型保存3. check_point4. 详细保存5. Docker6. 机器学习常用库 1. state_dict nn.Module 类是所有神经网络构建的基类,即自己构建一个深度神经网络也是需要继承自nn.Module类才行,并且nn.Module中的state_dict包含神经网络中…...
简单获取json预览
data: JSON 数据。 collapsedNodeLength: 对象或数组的长度超过此阈值时会折叠 deep: json路径深度超过此值时会折叠 showLineNumber: 显示左侧行号 showIcon: 显示图标。 virtual: 使用虚拟滚动 height: 使用虚拟滚动时列表的高度 itemHeight: 使用虚拟滚动时节点的高…...
【C语言】连接陷阱探秘(5):头文件
目录 一、头文件的作用 1.1. 声明共享 1.2. 模块化 1.3. 实践中的注意事项 二、常见的头文件陷阱 2.1 重复包含(Include Guards) 2.1.1. Include Guard 工作原理 2.1.2. Pragma Once(某些编译器支持) 2.2 循环依赖(Circular Dependencies) 2.2.1. 前向声明 2.…...
burpsuite功能模块学习(2)
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...
Vue 2.0->3.0学习笔记(Vue 3 (四)- Composition API 的优势)
Vue 2.0->3.0学习笔记(Vue 3 (四)- Composition API 的优势) Composition API 的优势1. Options API 存在的问题2. Composition API 的优势 Composition API 的优势 1. Options API 存在的问题 笔记 使用传统OptionsA…...
在 ASP.NET C# Web API 中实现 Serilog 以增强请求和响应的日志记录
介绍 日志记录是任何 Web 应用程序的关键方面。它有助于调试、性能监控和了解用户交互。在 ASP.NET C# 中,集成 Serilog 作为记录请求和响应(包括传入和传出的数据)的中间件可以显著提高 Web API 的可观察性和故障排除能力。 在过去的几周里&…...
MongoDB集群分片安装部署手册
文章目录 一、集群规划1.1 集群安装规划1.2 端口规划1.3 目录创建 二、mongodb安装(三台均需要操作)2.1 下载、解压2.2 配置环境变量 三、mongodb组件配置3.1 配置config server的副本集3.1.1 config配置文件3.1.2 config server启动3.1.3 初始化config …...
DimensionX 学习部署笔记
目录 依赖项: huggingface/DimensionX 是huggingface 下载后的目录; 报错处理参考网址: 测试代码 ok: 依赖项: pip install peft huggingface/DimensionX 是huggingface 下载后的目录; orbit_left_lora_weights.safetensors orbit_up_lora_weights.safetensors …...
设计模式:11、迭代器模式(游标)
目录 0、定义 1、迭代器模式的四种角色 2、迭代器模式的UML类图 3、示例代码 4、迭代器的next()方法与集合的get(int index)方法的效率对比(LinkedList为例) 0、定义 提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象…...
【CameraPoseRefinement】以BARF为例介绍三维重建中的位姿优化
文章目录 IntroductionApproachPlanar Image Alignment(2D)Neural Radiance Fields (3D)Bundle-Adjusting Neural Radiance Fields Experiment平面图像对齐的定性实验合成场景上的定量实验 Introduction 在计算机视觉三维重建中,求解3D场景的表示和定位给定的相机帧…...
大语言模型压缩技术;推理优化技术;SparseGPT算法;GPTQ算法
目录 大语言模型落地的成本、效率与效果 模型压缩技术 推理优化技术 SparseGPT算法 GPTQ算法 大语言模型落地的成本、效率与效果 模型压缩技术 模型压缩技术是大语言模型轻量化的关键。介绍了多种模型压缩方法,其中权重量化和模型稀疏化是两种主要的技术。 权重量化:权重…...
ctrl键和大写键互换解决方法
电脑卡住之后突然发现Ctrl键和大小写键(CapsLock)互换了,后面试了几种方法都没解决这个问题,最后在万能的贴吧中找到解决方法——键位复位。 108和87键位复位操作: 1.先按住FN不放, 然后,再按住…...
spring boot mapper测试类优化
spring boot mapper测试类优化 有些时候我们只需要测试在 mybatis 写的mapper 是否正确,在注入mapper的时候, SpringBootTest 会启动整个容器,包括servlet容器和spring 容器,随着项目文件数逐渐增加,测试一个类会启动…...
k8s集成skywalking
如果能科学上网的话,安装应该不难,如果有问题可以给我留言 本篇文章我将给大家介绍“分布式链路追踪”的内容,对于目前大部分采用微服务架构的公司来说,分布式链路追踪都是必备的,无论它是传统微服务体系亦或是新一代…...
贪心算法理论
系列博客目录 文章目录 系列博客目录贪心算法 (Greedy Algorithm)贪心算法的特点贪心算法的适用条件常见的贪心算法问题贪心算法的步骤贪心算法示例:活动选择问题贪心算法的优缺点 贪心算法 (Greedy Algorithm) 贪心算法是一种在每一步选择中都采取当前状态下最优的…...
前端项目扫描漏洞整改的解决方案,附带部分漏洞的解决方法。
天崩开局 最近项目开始了漏洞扫描,于是乎 哎嘿嘿。。。 我直接彻底疯狂!!!! 我真的受不了了,这破班谁爱上谁上!依赖开发的锅,为什么要我来背。 在这里点名批评一下 inflight&#…...
brew安装NVM新手教程
首先确保macos下已安装好brew,搜索nvm资源代码: brew search nvm 演示效果图如下: 安装命令 brew install nvm 卸载命令 brew uninstall node 安装完成后提示如下: 直接命令行执行下代码的代码 export NVM_DIR"$HOME/.…...
Open3D (C++) 生成任意2D椭圆点云
目录 一、算法原理二、代码实现三、结果展示一、算法原理 椭圆标准参数方程为: x = a ∗ c o s ( t ) y = b ∗...
前端框架Vue3项目实战(基于Vue3实现一个小相册)
下面是是对Vue3操作的一个项目实战 下面代码是html的基本骨架(没有任何的功能): <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>相册</title> <style&…...
【Git系列】利用 Bash 脚本获取 Git 最后一次非合并提交的提交人
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
启动tomcat报错./startup.sh: Permission denied
报错解释: 这个错误表明你正在尝试启动Tomcat服务器,但是没有足够的权限来执行startup.sh脚本。 解决方法: 使用chmod命令修改脚本的权限,使得用户具有执行权限。 chmod x /path/to/tomcat/bin/startup.sh 或者 chmod x /path…...
【开篇】.NET开源 ORM 框架 SqlSugar 系列
.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...
【机器学习】支持向量机SVR、SVC分析简明教程
关于使用SVM进行回归分析的介绍很少,在这里,我们讨论一下SVR的理论知识,并对该方法有一个简明的理解。 1. SVC简单介绍 SVR全称是support vector regression,是SVM(支持向量机support vector machine)对回…...
EasyDSS视频推拉流技术的应用与安防摄像机视频采集参数
安防摄像机的视频采集参数对于确保监控系统的有效性和图像质量至关重要。这些参数不仅影响视频的清晰度和流畅度,还直接影响存储和网络传输的需求。 安防摄像机图像效果的好坏,由DSP处理器和图像传感器sensor决定,如何利用好已有的硬件资源&…...
【详细介绍及演示】Flink之checkpoint检查点的使用
目录 一、介绍 二、 设置checkpoint检查点演示 1、 代码演示 2、测试代码效果 3、查看快照情况 编辑 三、在集群上运行 1、第一次运行 2、第二次运行 四、自定义检查点savePoint 1、提交一个flink job 打成jar包 2、输入一些数据,观察单词对应的数字的…...
使用uni-app进行开发前准备
使用uni-app进行开发,需要遵循一定的步骤和流程。以下是一个详细的指南,帮助你开始使用uni-app进行开发: 一、开发环境搭建 安装Node.js: 首先,从Node.js的官方网站(https://nodejs.org/)下载并…...
deepin 安装 chrome 浏览器
deepin 安装 chrome 浏览器 最近好多小伙伴儿和我说 deepin 无法安装最新的谷歌浏览器 其实是因为最新的 谷歌浏览器 其中的一个依赖需要提前安装 提前安装依赖然后再安装谷歌浏览器就可以了 安装 fonts-liberationsudo apt -y install fonts-liberation安装 chrome 浏览器sudo…...
Vue-01
Vue框架 Vue官网: Vue.js 框架 数据模型和view的通信就是依靠viewmodel的关键。 目前主流版本仍然是vue2版本。 Vue快速入门 1.新建一个HTML文件,引入Vue.js文件。Vue.js文件是官方引入的一个文件,我们如果要使用Vue就必须引入这个文件。…...
【Oracle】个人收集整理的Oracle常用SQL及命令
【建表】 create table emp( id number(12), name nvarchar2(20), primary key(id) ); 【充值一】 insert into emp select rownum,dbms_random.string(*,dbms_random.value(6,20)) from dual connect by level<101; 【充值二】 begin for i in 1..100 loop inser…...
11.28.2024刷华为OD
文章目录 C-100-5键键盘(extend来加入list后尾)题目2语法知识记录 C-100-5键键盘(extend来加入list后尾) 考虑所有情况extend来加入clip数组内容到screen 【】 题目2 链接 代码 语法知识记录...
【S500无人机】--地面端下载
之前国庆的时候导师批了无人机,我们几个也一起研究了几次,基本把无人机组装方面弄的差不多了,还差个相机搭载,今天我们讲无人机的调试 硬件配置如下 首先是地面端下载,大家可以选择下载: Mission Planne地…...
Redis2——协议与异步方式
文章目录 Redis2——协议与异步方式1. Redis Pipeline2. Redis事务2.1 无锁事务控制(乐观事务控制)2.2 事务语句与lua脚本2.3 事务特性ACID 3. 通信方式3.1 hiredis库3.2 同步连接3.3 异步连接3.3.1 hiredis管理监听事件接口3.3.2 hiredis libevent3.3.…...
面向下一代技术,遨游通讯如何助力北斗规模化应用提速?
近日,纪念北斗卫星导航系统工程建设三十周年座谈会在北京隆重召开,据悉,我国计划在2035年完成下一代北斗系统的建设。“北斗牵手,守护永久”北斗三号短报文公众应用商用试验启动仪式也于本月在雄安新区举行,会上透露&a…...
vue实现echarts饼图自动轮播
echarts官网:Examples - Apache ECharts echartsFn.ts 把echarts函数封装成一个文件 import * as echarts from "echarts";const seriesData [{"value": 12,"name": "过流报警"},{"value": 102,"name&qu…...
数据分析的尽头是web APP?
数据分析的尽头是web APP? 在做了一些数据分析的项目,也制作了一些数据分析相关的web APP之后,总结自己的一些想法和大家分享。 1.web APP是呈现数据分析结果的另外一种形式。 数据分析常见的结果是数据分析报告,可以是PPT或者…...
windows电脑上安装树莓派操作系统
在Windows电脑上安装树莓派通常涉及以下几个步骤:准备安装工具、下载树莓派系统镜像、烧录系统到SD卡、配置树莓派以及远程连接(如果需要无显示器操作)。以下是详细的步骤说明: 一、准备安装工具 安装树莓派官方烧录工具: 下载并安装Raspberry Pi Imager。这是一个官方的…...
openssl编译安装升级为新版本
文章目录 1、下载版本2、上传并解压3、编译安装4、验证 1、下载版本 https://www.openssl.org/source/old/1.1.1/ 2、上传并解压 tar zxvf openssl-1.1.1s.tar.gz 3、编译安装 注意:要提前安装好 gcc perl cd openssl-1.1.1s ./config --prefix/usr/local/open…...
监控视频汇聚平台:Liveweb视频监控管理平台方案详细介绍
Liveweb国标视频综合管理平台是一款以视频为核心的智慧物联应用平台。它基于分布式、负载均衡等流媒体技术进行开发,提供广泛兼容、安全可靠、开放共享的视频综合服务。该平台具备多种功能,包括视频直播、录像、回放、检索、云存储、告警上报、语音对讲、…...
【论文复现】基于BERT的语义分析实现
📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ WRN: 宽度残差网络 概述语义分类文本分类情感分类 实现原理 核心逻辑pre_deal.pytrain.pytest_demo.py 实现方式&演示效果训练阶段测试阶…...
SMOTE | 使用SMOTE算法来处理不平衡数据的问题
需求 在学习机器学习识别信用卡欺诈交易这个项目的时候,样本数据集非常不平衡: data_df_new[Class].value_counts()0: 正常 1:欺诈 在这里了解到了SMOTE算法: 过采样(Oversampling) 过采样是…...
week 9 - Entity-Relationship Modelling
一、数据库设计的重要性 • 设计数据库可使查询更高效、简洁。 • 减少数据冗余(data redundancy),提升表的整洁性。 二、Key Components of ER Modelling 实体-关系建模的基本构成 1. 实体(Entity):表…...
彻底理解如何保证ElasticSearch和数据库数据一致性问题
一.业务场景举例 需求: 一个卖房业务,双十一前一天,维护楼盘的运营人员突然接到合作开发商的通知,需要上线一批热门的楼盘列表,上传完成后,C端小程序支持按楼盘的名称、户型、面积等产品属性全模糊搜索热门…...