MapReduce

回到术语表

什么是MapReduce?

MapReduce是一个基于java的分布式执行框架Apache Hadoop生态系统.它通过公开开发人员实现的两个处理步骤来消除分布式编程的复杂性:1)Map和2)Reduce。在映射步骤中,数据在并行处理任务之间进行分割。转换逻辑可以应用于每个数据块。一旦完成,Reduce阶段将接管处理来自Map集的聚合数据。一般情况下,MapReduce使用HDFS (Hadoop Distributed File System)对于输入和输出。但是,在此基础上构建的一些技术(如Sqoop)允许访问关系系统。

MapReduce的历史

MapReduce是由Jeffery Dean和Sanjay Ghemawat于2004年在谷歌的墙壁上开发的。在他们的论文《MAPREDUCE:大型集群上的简化数据处理》中,他们受到了函数式编程中常用的map和reduce函数的启发。当时,谷歌的专有MapReduce系统运行在谷歌文件系统(GFS)上。到2014年,谷歌不再使用MapReduce作为主要的大数据处理模型。MapReduce曾经是唯一可以检索存储在HDFS中的数据的方法,但现在不再是这样了。今天,还有其他基于查询的系统,例如蜂巢和Pig,它们用于使用类似sql的语句从HDFS检索数据,这些语句与使用MapReduce模型编写的作业一起运行。

MapReduce是如何工作的?

MapReduce系统通常由三个步骤组成(尽管它被概括为Map和Reduce操作/函数的组合)。MapReduce操作包括:
  • 地图:输入数据首先被分割成更小的块。Hadoop框架然后根据要处理的数据的大小和每个映射器服务器上可用的内存块来决定使用多少个映射器。然后将每个块分配给映射器进行处理。每个“工作”节点对本地数据应用map函数,并将输出写入临时存储。主(主)节点确保只处理冗余输入数据的一个副本。
  • 洗牌、合并、分区:工作节点根据输出键(由map函数产生)重新分配数据,这样属于一个键的所有数据都位于同一工作节点上。作为一个可选的进程,组合器(减速器)可以在每个映射器服务器上单独运行,以减少每个映射器上的数据,甚至进一步减少数据占用,更容易地调整和排序。分区(不可选)是决定如何将数据呈现给减速器并将其分配给特定减速器的过程。
  • 减少:当映射器仍在进行时,减速器不能启动。工作节点处理每组对输出数据,并行生成对作为输出。具有相同键的所有映射输出值都被分配给一个reducer,然后该reducer聚合该键的值。与map函数不同,reduce函数是可选的,map函数是过滤和排序初始数据的强制函数。

使用MapReduce有哪些注意事项?


  • 刚性映射减少编程范式

而向程序员公开Map和Reduce接口简化了分布式应用程序的创建Hadoop但是,在Map Reduce编程范式中很难表达广泛的逻辑。迭代过程是在Map Reduce中不能很好工作的逻辑的一个例子。一般来说,数据不是保存在内存中,迭代逻辑是通过将MapReduce应用程序链接在一起来处理的,这增加了复杂性。

  • 读/写密集型

MapReduce作业在内存中存储的数据很少,因为它没有为用户数据提供分布式内存结构的概念。数据必须读写到HDFS。更复杂的MapReduce应用程序需要将较小的MapReduce作业链接在一起。由于数据不能在这些作业之间传递,因此需要通过HDFS共享数据。这引入了一个处理瓶颈。

  • Java集中

MapReduce是基于java的,因此为它编写应用程序最有效的方法是使用java。其代码必须在单独的开发环境中编译,然后部署到Hadoop集群.这种开发风格并没有被数据分析师或数据科学家广泛采用,因为他们习惯了其他技术(如SQL)或解释性语言(如Python)。MapReduce确实能够调用用其他语言(如C、Python或Shell Scripting)编写的Map/Reduce逻辑。但是,它是通过启动一个系统进程来处理这些程序的执行来实现的。该操作会带来开销,这会影响作业的性能。

  • 逐步退出大数据产品

MapReduce正在慢慢被大数据产品淘汰。虽然一些供应商仍然在其Hadoop发行版中包含它,但这样做是为了支持遗留应用程序。客户已经不再创建MapReduce应用程序,而是采用更简单、更快的框架,如Apache Spark。

MapReduce的用途是什么?

遗留应用程序和Hadoop原生工具(如Sqoop和Pig)今天利用了MapReduce。MapReduce应用程序开发非常有限,作为一种开源技术,它也没有任何重大贡献。bob下载地址

关于MapReduce和Spark的常见误解

  • 关于MapReduce
  • 关于火花

MapReduce的优势

  1. 可伸缩性
  2. 灵活性
  3. 安全性和身份验证
  4. 更快的数据处理
  5. 非常简单的编程模型
  6. 可用性和弹性性质

关于如何提高MapReduce性能的简单提示

  1. 启用优步模式
  2. 使用本机库
  3. 增加块大小
  4. 监控map任务所花费的时间
  5. 确定数据压缩是否可分割
  6. 设置减少的任务数量
  7. 分析数据的分区
  8. Shuffle阶段表演动作
  9. 优化MapReduce代码

MapReduce vs. Databricks Delta Engine

Databricks Delta引擎是基于Apache Spark和c++引擎光子.这就提供了MapReduce所缺乏的DAG处理的灵活性,内存中处理的速度和一个专门的、本地编译的引擎,提供了极快的查询响应时间。用户可以使用Python、Scala、R或SQL与Databricks Delta Engine进行交互。现有的Spark应用程序可以修改为使用Delta引擎,只需简单地修改一行,即指定“Delta”作为数据格式。MapReduce和HDFS本身不支持数据的事务一致性,也不能更新/删除数据集中的现有数据。Delta Engine允许数据生产者和消费者并发访问数据,还提供了完整的CRUD功能。最后,MapReduce不具备处理小文件的内置功能,这是任何大数据环境中的一个常见问题。Databricks Delta Engine具有自动压缩功能,可以优化写入存储的数据大小。它还有一个OPTIMIZE命令,可以按需压缩文件。使用Delta的事务一致性特性,可以在最终用户或应用程序访问数据时发出此操作。

MapReduce的五个最佳替代方案

  1. Apache火花
  2. Apache风暴
  3. Ceph
  4. 九头蛇
  5. 谷歌BigQuery

额外的资源


回到术语表