分布式处理框架 MapReduce

news2024/11/15 19:30:57

3.2.1 什么是MapReduce

  • 源于Google的MapReduce论文(2004年12月)
  • Hadoop的MapReduce是Google论文的开源实现
  • MapReduce优点: 海量数据离线处理&易开发
  • MapReduce缺点: 实时流式计算

3.2.2 MapReduce编程模型

  • MapReduce分而治之的思想

    • 数钱实例:一堆钞票,各种面值分别是多少
      • 单点策略
        • 一个人数所有的钞票,数出各种面值有多少张
      • 分治策略
        • 每个人分得一堆钞票,数出各种面值有多少张
        • 汇总,每个人负责统计一种面值
      • 解决数据可以切割进行计算的应用
  • MapReduce编程分Map和Reduce阶段

    • 将作业拆分成Map阶段和Reduce阶段
    • Map阶段 Map Tasks 分:把复杂的问题分解为若干"简单的任务"
    • Reduce阶段: Reduce Tasks 合:reduce
  • MapReduce编程执行步骤

    • 准备MapReduce的输入数据
    • 准备Mapper数据
    • Shuffle
    • Reduce处理
    • 结果输出
  • 编程模型

    • 借鉴函数式编程方式

    • 用户只需要实现两个函数接口:

      • Map(in_key,in_value)

        —>(out_key,intermediate_value) list

      • Reduce(out_key,intermediate_value) list

        —>out_value list

    • Word Count 词频统计案例

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sp6ekxHg-1687851131671)(img/image-mapreduce.png)]

3.2.3 Hadoop Streaming 实现wordcount (实验 了解)

  • Mapper

    import sys
    
    #输入为标准输入stdin
    for line in sys.stdin:
        #删除开头和结尾的空行
        line = line.strip()
        #以默认空格分隔单词到words列表
        words = line.split()
        for word in words:
            #输出所有单词,格式为“单词 1”以便作为Reduce的输入
            print("%s %s"%(word,1))
    
  • Reducer

    import sys
    
    current_word = None
    current_count = 0
    word = None
    
    #获取标准输入,即mapper.py的标准输出
    for line in sys.stdin:
        #删除开头和结尾的空行
        line = line.strip()
    
        #解析mapper.py输出作为程序的输入,以tab作为分隔符
        word,count = line.split()
    
        #转换count从字符型到整型
        try:
            count = int(count)
        except ValueError:
            #count非数字时,忽略此行
            continue
    
        #要求mapper.py的输出做排序(sort)操作,以便对连续的word做判断
        if current_word == word:
            current_count += count
        else :
            #出现了一个新词
            #输出当前word统计结果到标准输出
            if current_word :
                print('%s\t%s' % (current_word,current_count))
            #开始对新词的统计
            current_count = count
            current_word = word
    
    #输出最后一个word统计
    if current_word == word:
        print("%s\t%s"% (current_word,current_count))
    

    cat xxx.txt|python3 map.py|sort|python3 red.py

    得到最终的输出

    注:hadoop-streaming会主动将map的输出数据进行字典排序

  • 通过Hadoop Streaming 提交作业到Hadoop集群

    STREAM_JAR_PATH="/root/bigdata/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.9.1.jar"    # hadoop streaming jar包所在位置
    INPUT_FILE_PATH_1="/The_Man_of_Property.txt"  #要进行词频统计的文档在hdfs中的路径
    OUTPUT_PATH="/output"                         #MR作业后结果的存放路径
    
    hadoop fs -rm -r -skipTrash $OUTPUT_PATH    # 输出路径如果之前存在 先删掉否则会报错
    
    hadoop jar $STREAM_JAR_PATH \   
    		-input $INPUT_FILE_PATH_1 \ # 指定输入文件位置
    		-output $OUTPUT_PATH \      #指定输出结果位置
    		-mapper "python map.py" \   #指定mapper执行的程序
    		-reducer "python red.py" \  # 指定reduce阶段执行的程序
    		-file ./map.py \            # 通过-file 把python源文件分发到集群的每一台机器上  
    		-file ./red.py
    
  • 到Hadoop集群查看运行结果

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OMnyEJQr-1687851131672)(/img/mr_result.png)]

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

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

相关文章

Inno Setup 安装包制作软件

推荐一个开源的安装包制作软件:Inno Setup   Inno Setup是一个免费的安装制作软件,小巧、简便、精美是其最大特点,支持pascal脚本,能快速制作出标准Windows2000风格的安装界面,足以完成一般安装任务。 下载地址&…

进阶接口自动化测试——认证/代理/超时配置/错误异常(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 认证 1、基本认证…

【Android】Touch 事件分发逻辑梳理和避坑逻辑(上层设置了setOnTouchListener的事件监听但是没有起作用的原因)

背景 在项目中发现我明明在最上层的activity中的一个DrawerLayout对象设置了如下代码: /*** 超级白板的整体点击事件* 保证topBar在合适的时机出现*/binding.layoutMainDrawer.setOnTouchListener { _, event ->if (event.action MotionEvent.ACTION_DOWN) {val isVisib…

【毕业设计】爱琴海——基于HTML5的婚庆用品商城网页设计

一、内容简介 (一)背景与意义 “婚俗”是指结婚的风俗,各国各族人民按照自己的习俗,举行各具特色的婚礼,具有各自浓厚的民族独特风采。婚俗元素在是中国婚俗文化的媒介,承载了中华儿女对幸福和吉祥的追求。在中国婚俗文化的发展过…

【BI数据可视化】Docker部署metabase

开源世界从来不缺分享与馈赠,前一篇已经分享过【BI数据可视化】使用Docker快速部署Superset_wenchun001的博客-CSDN博客,今天我们继续来介绍一款开源的数据可视化系统 Metabase,帮助您解决数据可视化的难题。 Metabase是什么? 在传…

DOTA-cyclo(RGDfK),RGD肽指含有由Arg-Gly-Asp三个氨基酸组成的序列多肽,螯合剂多肽

试剂基团反应特点(Reagent group reaction characteristics): DOTA-cyclo(RGDfK)螯合剂多肽,RGD肽是指含有由Arg-Gly-Asp三个氨基酸组成的序列多肽,有直线肽和环肽之分。它们是许多细胞外基质蛋白(如VN、FN…

关于邮件协议的理解、实验以及java mail的实现

1、几种电子邮件系统组成 传统电子邮件系统 一个传统电子邮件系统由以下几个部分组成 UA(用户代理)邮箱服务器电子邮件协议 邮件发送协议(SMTP)与邮件接受协议(POP3,IMAP) 用户代理 UA (User Agent) 定…

mac上mysql启动报错问题Unable to lock ./ibdata1 error: 35

记录一次mac安装mysql启动报错问题Unable to lock ./ibdata1 error: 35。首先,这是第一次在公司新领的mac上面去安装mysql,在去年换新电脑之前,老电脑也安装过,没出现过这种问题。其次,自己的几台windows笔记本也安装过…

VS2019 彻底卸载、安装C\C++\C#

彻底卸载 进入“控制面板 - 程序和功能”,找到并选择VS2019,单击右键选择“卸载”。 在弹出的卸载向导中,我们需要选择要卸载的组件,如果要彻底卸载VS2019,则需要全部选择,并依次执行卸载操作。 在VS2019…

要从HTML中提取img标签的src属性(图片链接),可以使用正则表达式方式。

1. 定义提取src属性的正则表达式: const srcRegex /<img\s(?:[^>]*?\s)?src\s*\s*(["])((?:[^\1"]|\\\1|.)*?)\1/g 这个正则会匹配类似<img src"http://example.com/1.jpg">中的src属性和括号中的连接。2. 调用字符串的matchAll()方法…

系统集成项目管理工程师(项目管理知识[二])

第八章 项目进度管理 1、前导图法4种类型依赖关系&#xff1a; (1)结束-开始的关系&#xff08;F-S型&#xff09; (2)结束-结束的关系&#xff08;F-F型&#xff09; (3)开始-开始的关系&#xff08;S-S型&#xff09; (4)开始-结束的关系&#xff08;S-F型&#xff09; 2、…

Fastjson漏洞

Fastjson 概述 Fastjson是阿里巴巴公司开源的一款json解析器&#xff0c;它可以解析 JSON 格式的字符串&#xff0c;支持将 Java Bean 序列化为 JSON 字符串&#xff0c;也可以从 JSON 字符串反序列化到JavaBean。 漏洞版本 Fastjson <1.2.24 反序列化远程命令执行漏洞 F…

如何关闭带有隐患的端口?一键关闭危险端口?封锁电脑端口工具

你是否担心自己的Windows电脑存在安全隐患&#xff1f;毕竟&#xff0c;黑客攻击时刻都在发生&#xff01;今天&#xff0c;我将为大家分享一些有关Windows危险端口的知识&#xff0c;以及如何一键关闭高危端口&#xff0c;保障你的电脑安全。希望这些能够帮助你更好地保护自己…

Hidl编程实战(一)——定义HAL服务

1. 概述 hidl基本知识可以参考官网 安卓官网-hidl 也讲解了C和Java实现hidl 本文讲解CHal服务的创建 2. 文件的创建 aosp整编过的代码&#xff0c;可以直接choosecombo后使用hidl-gen工具。如果没有整编过&#xff0c;可以单编hidl-gen工具。 hidl-gen工具可以用来协助创建h…

6应用层-6.3【实验】【计算机网络】

6应用层-6.3【实验】【计算机网络】 前言推荐6应用层知识DHCP协议分析DHCP报文格式DHCP抓包分析 6.1 Web服务与FTP服务配置6.2 DNS域名系统配置6.3 DHCP动态协议参数配置实验目的实验内容及实验环境实验原理实验过程1.搭建网络环境2.配置路由器3.配置DSCP服务器4.完成右侧网络主…

20230627通过WPS给PPT幻灯片加入页码

20230627通过WPS给PPT幻灯片加入页码 2023/6/27 23:16 缘起&#xff1a;不想每次都手工给打印的PPT加页码&#xff0c;就通过百度搜索来自动加页码了&#xff01; 真是偷懒让人进步呀&#xff01; 百度搜索&#xff1a;ppt加页码怎么设置 方法步骤.png ?点击「插入」选项卡「幻…

C++(Day1)

思维导图 2.定义一个命名空间Myspace&#xff0c;包含以下函数&#xff1a;将一个字符串中的所有单词进行反转&#xff0c;并输出反转后的结果。例如&#xff0c;输入字符串为"Hello World"&#xff0c;输出结果为"olleH dlroW"&#xff0c;并在主函数内测…

GPT所想即所见的快速解惑

这是学习笔记的第 2464篇文章 在很多年前&#xff0c;自己脑袋里面冒出来这样的一段文字&#xff0c; 黑暗中一个孩子站在田野上看着另外一个孩子 就好像自己在看自己。 说是感慨也好&#xff0c;伤感也罢。那种画面感是一直难以名状的&#xff0c;最近试了下GPT&#xff0c;给…

7.用python写网络爬虫,验证码处理

前言 验证码&#xff08;CAPTCHA&#xff09;的全称为全自动区分计算机和人类的公开图灵测试&#xff08;Completely Automated Public Turing testtotellComputersand Humans Apart&#xff09;从其全称可以看出&#xff0c;验证码用 于测试用户是否为真实人类。一个典型的验证…

高速电路设计系列分享-熟悉JESD204B(下)

目录 概要 整体架构流程 技术名词解释 技术细节 1.物理层 小结 概要 随着高速ADC跨入GSPS范围&#xff0c;与FPGA(定制ASIC)进行数据传输的首选接口协JESD204B。为了捕捉频率范围更高的RF频谱&#xff0c;需要宽带RFADC。在其推动下&#xff0c;对于能够捕捉更宽带宽并支持配置…