热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MapReduce入门第一课

第一代大数据计

前言:


如果你想统计一本书中每个单词出现的次数,最简单的方式是写一个单线程程序遍历每一个单词,虽然简单,但比较耗时


你也可以写一个多线程程序,并发计算。效率高了很多,不过程序很难写,还要防止不同线程重复统计


当然,还可以将书拆成几份,让不同的计算机单线程运行,最后汇总。这样效率高,程序也简单。你也许更疑惑了,这TM做不到啊


别急,MapReduce就是做这个的


本篇目标:

1.理解Map/Reduce编程模型
2.通过WordCount案例理解分布式计算
3.理解MapReduce计算框架特点




01


编程模型-MapReduce


MapReduce是一个分布式运算程序的编程框架


简单来说,你只要编写一个单线程程序,通过MapReduce框架就能在不同的计算机上同时执行该程序


在编写程序时,你无需考虑分布式,简单的像个孩子


现在说起MapReduce,我们都知道它是一种计算框架。实际上它在Google发表的论文里它是一种编程模型。后来开源社区根据谷歌的论文实现了一个分布式计算框架,也命名为MapReduce


那么MapReduce编程模型是什么呢?


如果把数据的处理方式抽象为Map和Reduce,所有的数据计算都能通过这两种形式实现


1)Map


Map也叫映射,表示数据一对一的映射,也就是实现数据的转换。比如,根据人名转换成性别



2)Reduce


reduce作为另外一种映射方式,主要作用是聚合。比如,对性别进行聚合,得到每种性别的人数



3)map与reduce的混合使用


MapReduce认为,再复杂的数据处理流程都可以通过这两种映射方式的组合来解决


将复杂的逻辑拆解成一个个map或reduce,通过代码来完成每个小阶段的计算逻辑,就能完成复杂计算逻辑了




02


WordCount


前面我们知道了Map和Reduce两种计算思想,下面我们通过一个WordCount案例,来学习MR框架是如何实现分布式计算的


假设我们要统计一份日志中每个单词出现的次数。这个日志存储在分布式存储在两台电脑上,一台份200M,一份100M


通过如图的5个过程并行计算,即可得到最终的结果



1.input


该阶段主要是读取文件。两台电脑同时读取,200M的文件存储时会存成两个Block,所以可以启动两个线程分别读取两个Block


2.map


该阶段主要是数据的转换。首先将每块数据按行读取,对于每一行数据,按指定分隔符拆开,得到一个个单词。最后将每个单词映射成(key , value)的形式


3.shuffle


shuffle有个很优雅的名字,叫 "奇迹发生之地"。至于它有什么作用,我们后面再说


4.reduce


该阶段主要作用是数据聚合。聚合后的数据就可以输出了


5.output


输出最终结果




03


MapReduce计算框架


最后,我们再来看看计算框架-MapReduce


1.优点


1)易于编程

简单实现一些接口,就可以完成一个分布式程序。不过现在已经没人写MR程序了,有兴趣的可以去了解下

2)高容错性

集群中某一台机器挂了,计算任务会分配到别的机器,不会导致整个任务执行失败

3)大规模离线处理


可实现上千台服务器集群的并发计算,适合PB级以上海量数据的离线处理


2.缺点


1)不支持实时计算


MapReduce计算时间较长,可能一个任务就要跑几分钟甚至几十分钟,无法像MySql那样在毫秒内返回结果


因此,诞生了一些可以支持大数据实时计算的数据库,以后会逐步接触到。


2)不支持流式计算


MapReduce输入的数据集必须是静态的,不支持动态变化的数据集。


3)不擅长DAG计算


如果多个MR程序存在依赖关系,后一个程序的输入是前一个的输出。这种情况,不适合用MapReduce来完成


因为每一步的结果都会写入磁盘,然后再进行下一个程序,这样造成了大量磁盘IO,性能非常低下


3.三类实例进程


一个MapReduce程序运行时,会启动三种实例进程


1)MrAppMaster


负责整个程序的过程调度与状态协调,在NameNode上启动


2)MapTask

        

负责Map阶段的数据处理过程,会在不同DataNode上启动


3)ReduceTask


负责Reduce阶段的数据处理过程,会在不同DataNode上启动




你学废了吗?


— END  —



推荐阅读
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
author-avatar
徐天凝_669
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有