MapReduce笔记

  • 实现分布式的作用:

    • 通过并行处理提高能力
    • 通过复制机制进行容错处理
    • 与传感器等物理设备的分布相匹配
    • 通过隔离实现安全
  • 难点:

    • 许多并行的部件,他们之间有复杂的相互作用
    • 必须应对处理部分故障
    • 难以实现性能潜力
  • 容错

    • 1000多台服务器、庞大的网络----->总有故障发生
    • 我们希望向应用程序隐藏这些故障
    • 高可用性:尽管出现故障,但服务仍然能继续
    • 复制服务器:如果一台服务器崩溃,可以使用另一台服务器继续运行。
  • 一致性

    • 实现良好的行为很难,“复制”服务器很难保持一致性
  • 性能

    • 目标:可扩展的吞吐量
      • Nx台服务器->通过并行CPU、磁盘和网络获得Nx的总吞吐量。
    • 随着N的增加,扩展变得越来越困难:
      • 负载不均衡
      • N 的延迟很大
      • 初始化、交互等行为不会随着N的增加而加快
  • 均衡

    • 容错、一致性和性能不可能同时满足
    • 容错和一致性需要通信
      • eg:将数据发送到备份,检查我的数据是否最新
      • 通信通常很慢,而且不可扩展
    • 需要设计只提供弱一致性,以提高速度
      • Get不一定会获得最新的Put()!
      • 对程序员很痛苦,但是一个很好的权衡
    • 我们将看到一致性/性能方面的许多设计要点
  • 实施:

    • RPC,线程,并发控制,配置
  • 具体解释

    Abstract view of a MapReduce job -- word count
      Input1 -> Map -> a,1 b,1
      Input2 -> Map ->     b,1
      Input3 -> Map -> a,1     c,1
                        |   |   |
                        |   |   -> Reduce -> c,1
                        |   -----> Reduce -> b,2
                        ---------> Reduce -> a,2
      1) input is (already) split into M files
      2) MR calls Map() for each input file, produces set of k2,v2
         "intermediate" data
         each Map() call is a "task"
      3) when Maps are don,
         MR gathers all intermediate v2's for a given k2,
         and passes each key + values to a Reduce call
      4) final output is set of <k2,v3> pairs from Reduce()s
    
  • 伪代码

    Word-count-specific code
      Map(k, v)
        split v into words
        for each word w
          emit(w, "1")
      Reduce(k, v_set)
        emit(len(v_set))
    
  • MapReduce的可扩展性很好:

    • N个"worker"计算机(可能)会带来Nx的吞吐量
    • Map()可以并行运行,因为他们之间没有交互
    • Reduce()也可以并行运行
    • 因此更多的计算机=更多的吞吐量 Nice
  • MapReduce隐藏了很多细节:

    • 向服务器端发送应用程序的代码
    • 跟踪哪些任务已经完成
    • 将中间数据从Map,Shuffling,到Reduce
    • 故障恢复
  • Map使得应用程序

    • 没有交互或状态(中间输出除外)
    • 没有迭代
    • 无实时或流式处理
  • 输入和输出存储在GFS集群文件系统中

    • MR需要巨大的并行输入和输出吞吐量
    • GFS将文件以64MB为单位分割到多个服务器上
      • Map并行读取
      • Reduce并行写入
    • GFS还将每个文件复制到2或3台服务器上
    • GFS是MapReduce的一个大优势

在这里插入图片描述

  • 一个Master,负责向worker分配任务并记录进度

    1. Master将Map分配给worker,直到所有的Map完成

      Map将输出(中间数据)写入本地磁盘

      Map分裂输出,通过哈希函数将其写入Reduce之前的预处理文件

    2. 在所有的Map完成之后,Master分配Reduce任务

      每个Reduce任务从所有Map worker处获取其中间输出

      每个Reduce在GFS上写入一个单独的输出文件

  • MR如何最小化网络的使用

    • Master尝试在每一个GFS服务器中存储输入数据的位置运行Map任务
      • 所有的计算机都同时运行GFS和MR worker,因此输入数据只是从本地磁盘读取而不通过网络。
    • 中间数据只通过网络传输一次
      • Map处理程序写出本地磁盘
      • Reduce worker 通过网络从Map worker磁盘读取数据
      • 如果存储在GFS中,则至少需要通过网络两次
    • 中间数据被分割成包含多个关键字的文件
      • R远远小于键的数量
      • 大型网络传输效率更高
  • MR如何获得好的负载均衡

    • 如果N-1台服务器必须等待1台慢服务器完成任务,就会造成浪费,速度也会变慢
    • 但有些任务可能比其他任务耗时更长
    • 解决方案:
      • Master将新任务分配给完成之前任务的worker,这样速度快的服务器就会比速度慢的服务器完成更多的任务
  • 容错能力

    • MR只重新运行失败的Map和Reduce
  • worker崩溃后恢复的细节

    • 一个Map worker 崩溃
      • Master注意到worker不再响应ping
      • Master知道该worker上运行哪些任务
      • 这些任务的中间任务输出已经丢失必须重新创建,Master通知其他worker运行这些任务
    • 一个Reduce worker 崩溃
      • 已经完成的任务没有问题 ——保存在GFS中,并且有副本
      • Master会在其他worker上重新启动未完成的任务

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【busybox记录】【shell指令】b2sum

目录 内容来源&#xff1a; 【GUN】【b2sum】指令介绍 【busybox】【b2sum】指令介绍 【linux】【b2sum】指令介绍 使用示例&#xff1a; BLAKE2摘要&#xff08;512bit&#xff09; - 默认输出 BLAKE2摘要&#xff08;512bit&#xff09; - 指定校验和长度 BLAKE2摘要…

Python量化炒股的数据信息获取—获取沪深股市每日成交概况信息

Python量化炒股的数据信息获取—获取沪深股市每日成交概况信息 沪深股市每日成交概况信息&#xff0c;都存放在STK_EXCHANGE_TRADE_INFO表中&#xff0c;该表保存在finance包中。要查看表中的数据信息&#xff0c;需要使用query()函数。 单击聚宽JoinQuant量化炒股平台中的“…

还有谁……想知道“线下与线上布局之间的本质区别”

还有谁……想知道 线下与线上布局之间的本质区别 hello,亲爱的你们好.… 我是你们的好朋友,正博,今天是非常特殊的一天,给每一位读者准备了一份特殊的神秘礼物…… 在分享【特殊礼物】之前,请允许我分享一下《线下营销与线上销售的9大核心差异》…… 1、注意力; 2、销…

nginx--反向代理

反向代理 指的是代理外网用户的请求到内部的指定web服务器器&#xff0c;并将数据返回给用户的一种方式&#xff0c;这是用的比较多的一种方式 模块和功能 ngx_http_proxy_module&#xff1a; 将客户端的请求以http协议转发至指定服务器进行处理。ngx_stream_proxy_module&…

我从这些书籍中学来的财务以及税务知识

“你不能指望在开始工作的头两年攒下任何积蓄。” 这句话一直是我的座右铭&#xff0c;也是我给大学生的个人理财建议。这也就难怪我二十出头的时候&#xff0c;基本就是靠薪水过日子。 回想起来&#xff0c;我意识到其实这并不是最好的建议&#xff0c;甚至非常不好。 我现…

MySQL卸载

目录 MySQL卸载 1.关闭服务 2.卸载软件 3.清理文件夹 4.清理注册表 5.重启电脑 说明 上一篇文章介绍了数据库的一些基本概念&#xff0c;以及MySQL的数据模型&#xff0c;并在文章末尾附上了MySQL的下载地址&#xff0c;但是对于已经安装过MySQL的同学&#xff0c;如果需…

【小菜鸟之---Ansible基础详解】

文章目录 1 【Ansible简介】1.1简介1.2 Ansible 特点1.3 Ansible的工作机制1.4Ansible任务工作模式 2【安装部署】2.1安装命令2.2 Ansible配置文件2.3主机清单配置2.4 基于ssh免密登录2.5常用命令 3【Ansible常用模块】3.1 ping模块3.2 shell模块3.3 command模块3.4 copy模块3.…

力扣100284. 有效单词(C++)

【题解】 (实际在力扣中运行的代码只需要把下方的check函数放到力扣作答区给的模板中就可以) #include <bits/stdc.h> #include <iostream> #include <vector> #include <string> #include <cctype> #include <cstring> #include <st…

【机器学习】机器学习在教育领域的应用场景探索

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

漫谈音频深度伪造技术

作为人工智能时代的新型媒体合成技术&#xff0c;深度伪造技术近年来在网络媒体中的涉及领域越发广泛、出现频次越发频繁。据路透社报道&#xff0c;2023年&#xff0c;社交媒体网站上发布50万个深度伪造的语音和视频。 1、深度伪造技术的五个方面 音频深度伪造技术&#xff…

Spring拦截器

一、简介&#xff1a; Spring Boot 拦截器是面向切面编程-----AOP 的具体实现&#xff0c;用于对请求做预处理。 1.1.什么是拦截器&#xff1a;在AOP&#xff08;Aspect-Oriented Programming&#xff09;中用于在某个方法或字段被访问之前&#xff0c;进行拦截然后在之前或之…

华为二层交换机与路由器连通上网实验

华为二层交换机与路由器连通上网实验 二层交换机是一种网络设备&#xff0c;用于在局域网&#xff08;LAN&#xff09;中转发数据帧。它工作在OSI模型的第二层&#xff0c;即数据链路层。二层交换机通过学习和维护MAC地址表&#xff0c;实现了数据的快速转发和广播域的隔离。 实…

读天才与算法:人脑与AI的数学思维笔记19_深度数学

1. 深度数学 1.1. 组合与选择&#xff0c;是发明新事物的两个不可或缺的条件 1.1.1. 保尔瓦雷里&#xff08;Paul Valry&#xff09; 1.2. 利用以往的数学定理证明过程训练算法&#xff0c;以发现新的定理 1.3. 谷歌设在伦敦的总部整体有一种现代牛津大学的感觉&#xff0c…

17_Scala面向对象高阶功能

文章目录 1.继承1.1 构造对象时,父类对象优于子类对象1.2父类主构造有参数,子类必须要显示地调用父类主构造器并传值 2.封装3.抽象3.1抽象定义3.2子类继承抽象类3.3抽象属性 4.伴生对象4.1创建类和伴生对象4.2调用 1.继承 –和Java一样,权限protected , public.父类定义子类用…

【Java】基本程序设计结构(二)

前言&#xff1a;上一篇我们详细介绍了Java基本程序设计结构中前半部分&#xff0c;一个简单的Java应用&#xff0c;注释&#xff0c;数据类型&#xff0c;变量与常量&#xff0c;运算符&#xff0c;字符串。包括本篇将延续上篇内容介绍后续内容&#xff0c;包括输入输出&#…

UE5 UMG

锚点 参考链接&#xff1a;虚幻5UI系统&#xff08;UMG&#xff09;基础&#xff08;已完结&#xff09;_哔哩哔哩_bilibili

政安晨:【Keras机器学习示例演绎】(三十七)—— 在计算机视觉中学习调整大小

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 本文目标&#xff1a;在计算机视觉中学习调整大小…

数据结构(十一)----图的应用

目录 一.最小生成树 1.Prim算法&#xff08;普里姆&#xff09; 2.Kruskal算法(克鲁斯卡尔): 二.最短路径&#xff08;BFS算法&#xff09; 1.单源最短路径 &#xff08;1&#xff09;BFS算法&#xff08;无权图&#xff09; &#xff08;2&#xff09;Dijkstra算法&…

QT+网络调试助手+TCP客户端

一、网络调试助手UI界面 编程主要思路&#xff1a; 首先将水平的控件 水平布局 &#xff0c;然后相对垂直的控件 垂直布局 &#xff0c;哪怕是底下的groupBox也需要和里面的内容 水平布局&#xff0c;然后最后框选全部 栅格布局。如果需要界面自适应窗口大小&#xff0c…

JavaScript js写九九乘法表(两种方法)

方法一&#xff1a; 观察规律&#xff1a; 第一个数每行都是自增1。 我们发下第二个数都是从1开始&#xff0c;依次递增1&#xff0c;永远不大于前面的数。 前面数字每自增一次&#xff0c;后面数字自增一轮。 我们可以用双重for循环&#xff0c;外层初始值设为i&#xff0…
最新文章