【大数据·Hadoop】从词频统计由浅入深介绍MapReduce分布式计算的设计思想和原理

news2024/12/26 21:16:19

一、引入:词频统计问题

假如我们有一亿份文档,需要统计这一亿份文档的词频。我们会怎么做,有以下思路

  • 使用单台PC执行:能不能存的下不说,串行计算,一份一份文档读,然后进行词频统计,需要运行很长时间
  • 多台PC:把文档分布到多台PC上处理,每个PC处理一部分文件,最后合并。——听起来很简单,但是实际实现的话还是有很多问题的。

对于第二种方法,有以下几种方法,我们来分别分析一下:

在这里插入图片描述

可以看到,我们把数据分布到多台主机上,然后让每台主机并行扫描文档,将读取到的单词发送给一台中央主机,由中央主机统一进行词频统计。

这样有哪些问题:

  • 小粒度通信->网络通信瓶颈:所有子PC分别将一个个单词(超级无敌多)通过网络同时发送 给一台中央主机, 必定造成网络IO通信堵塞
  • 中央主机的负载过重: 虽然数据分布到了多台子PC上进行扫描读取处理,的确和之前的单台PC相比(一个一个文档依次往后读)能节约时间,但是处理时间其实还是差不多的。
  • 缺乏容错机制: 在这种单中央主机的设计思想下,一旦子PC中有一台出错,必定导致整个结果错误。
  • 数据一致性和同步问题: 你想一想,像上图,多个子PC同时对比如dog这个单词进行写入,这是一个并发操作,必须要加锁保证数据一致性。
  • 扩展性问题: 随着数据量的增加,中央主机处理的数据量和计算负载也会线性增长,最终可能超过中央主机的处理能力。扩展系统可能需要更换更强大的中央主机,这不仅成本高昂,而且存在物理限制。

OK,我们先别一下子跳到MapReduce,看看基于上面这个方法我们还能怎么改进:

在这里插入图片描述
其实说实话这个基本上没啥改善,就是改了一下单台PC自己在发送词频之前先做了个预处理统计,这样能够稍微渐缓一下网络IO,但是其实还是没啥用。

那么还有什么其他可以改善的地方的吗?在这里插入图片描述
没错,上面不是说主机压力太大了吗?那么我们现在一个主机就处理一个单词,这样OK了把?其实还是有问题的,或者说带来了新的问题:

  • 网络通信问题:这样一个个单词发,或者统计好了(也就是先做计算嘛)(其实很多时候不能先做计算,比如算整体学生的最大成绩差)再发,还是通信粒度太小了
  • 负载不均衡:一些常见的单词(如“the”、“is”等)可能会导致某些主机负载过重,而其他主机负载轻松。
  • 扩展性问题: 你看,我现在统计单词,那我统计汉字呢?计算主机的数量是不是需要改变??可扩展性还是很差的

其实在实现上还有很多细节问题:

  • 数据怎么分呢?人工?手动分割数据并分配给多台机器处理,这个过程不仅繁琐而且难以管理和扩展。
  • 开发者需要手动管理数据的分发、任务的执行、结果的汇总以及故障的处理等,这不仅增加了编程的复杂性,也增加了出错的几率。
  • 处理分布式数据需要开发者对分布式系统的底层细节有深入的了解,如数据分布、通信机制、容错机制等

下面我们来看看MapReduce的思想,看看它是如何解决了这些问题,在这之中也可以看到:数据结构、算法、数学等知识的融合。

二、MapReduce介绍

2.1:设计思想

MapReduce的算法核心思想是: 分治

学过算法的同学应该会学到分治算法,所谓分治,就是把原问题分解为规模更小的问题,进行处理,最后将这些子问题的结果合并,就可以得到原问题的解。MapReduce这种分布式计算框架的核心就是:分治。

在这里插入图片描述

上图是MapReduce的处理流程图,可以看到,MapReduce的整个过程主要分为:

  1. Map:

    • 输入:来自存储在hdfs上的文件block进行分块(split)后,并且进行读取数据处理的分块数据的键值对(key-value)形式。—— 输入数据被分成一系列的数据块,被称为“input splits”。MapReduce框架尽量保持每个split的大小相同,这样每个Map任务处理的数据量就大致相等。这是负载均衡的第一步。
    • 输出:进行扫描后的(单词,词频)的键值对形式
    • 分析:Map任务通常在存储相应数据分片的节点上执行,这样可以减少网络传输。如果某些节点因为硬件性能好或者当前负载轻而完成任务更快,MapReduce可以把新的Map任务分配给这些节点,从而提高资源的利用率。MapReduce框架会自动管理数据的分片和分发,无需用户手动干预,从而提高数据分发效率
  2. Shuffle与Sort阶段

    • 处理完数据后,Map任务的输出会进入Shuffle阶段。在这个阶段,框架负责将所有Map任务输出的键值对根据键进行排序和分组(还有combine,根据项目需要可选,减少网络io)。只有排序和分组后的数据会被发送到Reduce任务,这减少了网络传输的数据量,从而缓解网络通信瓶颈,同时,由于shuffle阶段对所有的Map任务进行了排序和分组,也就是说,一组数据只分发给一个reduce,这样也不会来自多个map对同一个reduce同时写入的并发,即消除了并发风险,保证了数据一致性
  3. Reduce任务的智能分配

    • Reduce任务是根据Map阶段的输出键值对自动分配(默认是哈希,可以手写更优的分配算法)的。MapReduce尝试均匀地分配负载,确保每个Reduce任务处理相似数量的键值对。如果某个Reduce任务处理得更快,它可以接受更多的数据,从而实现动态的负载均衡

从上面这个处理流程可以看出,MapReduce还有很多其他优点:

  • 容错机制(解决容错和恢复机制问题)
    MapReduce具备强大的容错机制。如果一个Map或Reduce任务失败,框架会自动在另一个节点上重新调度这个任务。此外,中间数据会被写入磁盘,这允许在节点故障后从最后一个检查点恢复,而不是从头开始。
  • 水平扩展(解决扩展性问题)
    MapReduce支持水平扩展。当数据量增加时,可以简单地增加更多的节点到集群中。MapReduce框架会自动利用这些新节点,无需对现有的应用程序做任何修改,这使得扩展性得到了极大的提高。

2.2:设计理念:移动计算而非移动数据

其实在开篇讲到的三种分布式计算统计词频的方法中,它们的想法核心都是移动数据,把数据移动到中央主机进行计算,这样带来很明显的问题:网络IO,带宽。

而MapReduce, 它将计算任务(Map和Reduce操作)分布到存储实际数据的节点上,这样就可以在数据存储的地方直接进行计算。这种方法减少了大量数据在网络中的移动,因为只有中间结果和最终结果需要在节点之间传输,这些比原始数据小得多。

这种做法不仅提高了网络传输的效率,也增强了系统的容错性。因为MapReduce框架会将Map任务的输出写入磁盘(中间结果),在发生故障时,可以从这些已经写入磁盘的中间结果恢复,而不需要从头开始处理数据。这意味着即使在节点失败的情况下,作业的执行仍然可以继续,从而保证了计算的连续性和完整性

总结来说,MapReduce通过**“移动计算而非移动数据”**的设计理念,有效地解决了传统分布式计算方法中的网络效率和容错性问题。

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

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

相关文章

最新版Ceph( Reef版本)文件存储简单对接k8s(下集)

假如ceph集群已经创建 1.创建cephfs_pool存储池 ceph osd pool create fs_kube_data 16 162.创建cephfs_metadata存储池 ceph osd pool create fs_kube_metadata 16 163 创建cephfs ceph fs new cephfs01 fs_kube_metadata fs_kube_data4 设置最大活动数 ceph fs set cephfs01…

保健品小程序商城线上经营的作用是什么

保健品涵盖酒水、醋、食品等多个类型,无论厂商还是经销商,手里的品牌和数量都比较多,由于特殊性,商家经营时需要找到目标客户,而市场中虽然有大量客户,但商家实际想要触达却并不容易。 渠道多样化&#xf…

MTEB - Embedding 模型排行榜

文章目录 关于 MTEBMTEB 任务和数据集概览使用 MTEB Pythont 库Installation使用 关于 MTEB MTEB : Massive Text Embedding Benchmark github : https://github.com/embeddings-benchmark/mtebhuggingface : https://huggingface.co/spaces/mteb/leaderboardpaper : https:/…

Java医院绩效考核系统源码B/S+avue+MySQL助力医院实现精细化管理 医院综合绩效核算系统源码

Java医院绩效考核系统源码B/SavueMySQL助力医院实现精细化管理 医院综合绩效核算系统源码 医院绩效考核系统目标是实现对科室、病区财务指标、客户指标、流程指标、成长指标的全面考核、分析,并与奖金分配、学科建设水平评价挂钩。 具体功能模块包括收入核算、成本…

(超简单)SpringBoot中简单用工厂模式来实现

简单讲述业务需求 业务需要根据不同的类型返回不同的用户列表,比如按角色查询用户列表、按机构查询用户列表,用户信息需要从数据库中查询,因为不同的类型查询的逻辑不相同,因此简单用工厂模式来设计一下; 首先新建一个…

安装SQL Server详细教程_sql server安装教程

一,SQL Server数据库安装 1.首先,下载安装程序 (1)从网盘下载安装exe 点击此处直接下载 (2)从官网下载安装exe文件 在官网选择Developer进行下载 2.开始安装 双击安装程序,开始安装 这里直…

springboot(3.2.5)初步集成MinIO(8.5.9)开发记录

springboot初步集成MinIO开发记录 说明一:引入maven依赖二:手动注入minioClient三:创建service类四:测试打印连接信息五:时区转化工具类六:常用操作演示 说明 这里只是作者开发的记录,已备将来…

程序人生 | 人生如棋,落子无悔

人生的开始,始于哭声,浮浮沉沉几十年。终了,一声长叹,在一片哭声中撒手离去。 人生的道路虽然漫长,但是关键就是那么几次机会的选择,可以决定此后几十年的光阴。 有个故事讲:古代有个人去砍柴…

Vue3:路由

1. 路由简介 在Vue3中,路由是一个核心概念,特别是在构建单页面应用程序(SPA)时。以下是Vue3中路由的基本概念: 1. **路由(Route)**:在Vue3中,路由是指根据特定的规则将用…

贪心算法----摆动序列

今日题目:leetcode376 点击跳转题目 观察样例2: 发现最长摆动序列都是极大值和极小值 再加上两个端点,那么我们保证每次都能选择到每个极值点,就能从局部最优推广全局最优了! 但是还有一些细节情况需要注意&#xff…

基于springboot+vue+Mysql的外卖点餐系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

【Linux】-IP地址、主机名配置[5]

目录 一、IP和主机名 1、IP地址 2、特殊IP地址 3、主机名 4、在Linux中修改主机名 5、配置主机名映射 二、虚拟机配置固定IP 1、为什么需要固定IP 2、在VMware Workstation中配置固定ip 一、IP和主机名 1、IP地址 每一台联网的电脑都会有一个地址,用于和…

淘宝扭蛋机小程序:开启你的幸运探索之旅!

在淘宝的星辰大海中,我们为您点亮了一颗全新的幸运之星——淘宝扭蛋机小程序。这是一个集惊喜、乐趣与收藏于一体的创新平台,让您随时随地都能感受到扭蛋带来的无限魅力。 一、探索未知的幸运 淘宝扭蛋机小程序,将传统扭蛋机的神秘与淘宝购…

【2024亚马逊云科技峰会】Amazon Bedrock + Llama3 生成式AI实践

在 4 月 18 日,Meta在官网上公布了旗下最新大模型Llama 3。目前,Llama 3已经开放了80亿(8B)和700亿(70B)两个小参数版本,上下文窗口为8k,据称,通过使用更高质量的训练数据…

JavaScript 动态网页实例 —— 事件处理应用

前言 事件处理的应用很广泛。在事件处理的应用中,鼠标事件的应用是最常用到的。本章给出几个鼠标事件处理应用的示例,包括:页面预览、图像切换、点亮文本、鼠标跟随、鼠标感应和禁用鼠标按键。在这些示例中,有的可以直接拿来应用,有的则只提供了一种应用的方法,稍加拓展,…

聚合工程搭建、工程依赖导入

上一章讲了自动化云测平台的一些环境的准备 如果还未完成云服务器的环境搭建和本地环境的搭建,请点击左侧 -> 传送门 那么正式开始这一章的内容 聚合工程搭建 创建项目 我们先给项目命个名:xxx-meter,构建系统,我们选择M…

MySQL中索引失效的问题

索引失效的情况 这是正常查询情况,满足最左前缀,先查有先度高的索引。 1. 注意这里最后一种情况,这里和上面只查询 name 小米科技 的命中情况一样。说明索引部分丢失! 2. 这里第二条sql中的,status > 1 就是范围查…

WPF之工具栏菜单栏功能区。

1&#xff0c;菜单栏&#xff0c;工具栏&#xff0c;状态栏。 1.1&#xff0c;Menu中可添加菜单分隔条<Separator></Separator>作为分割线&#xff0c;使用Separator可以通过改变其template来自定义&#xff0c;Separator是无焦点的&#xff0c;如果简单的在MenuIt…

攻防世界-web-unseping

题目 知识点 PHP代码审计PHP序列化和反序列化PHP中魔术方法命令执行绕过方式 解读源码 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function …

心理应用工具包 psychtoolbox 绘制小球走迷宫

psychtoolbox 是 MATLAB 中的一个工具包&#xff0c;对于科研人员设计实验范式来说是不二之选&#xff0c;因为它可以操作计算机的底层硬件&#xff0c;精度可以达到帧的级别。 文章目录 一、实验目的二、psychtoolbox 的下载安装三、Psychtoolbox 的基本使用四、完整代码 一、…