MapReduce是一个基于java的分布式执行框架Apache Hadoop生态系统。它通过公开开发人员实现的两个处理步骤来消除分布式编程的复杂性:1)Map和2)Reduce。在映射步骤中,数据在并行处理任务之间进行分割。转换逻辑可以应用于每个数据块。一旦完成,Reduce阶段将接管处理来自Map集的聚合数据。一般情况下,MapReduce使用HDFS (Hadoop Distributed File System)对于输入和输出。但是,在此基础上构建的一些技术(如Sqoop)允许访问关系系统。
MapReduce是由Jeffery Dean和Sanjay Ghemawat于2004年在谷歌的墙壁上开发的。在他们的论文《MAPREDUCE:大型集群上的简化数据处理》中,他们受到了函数式编程中常用的map和reduce函数的启发。当时,谷歌的专有MapReduce系统运行在谷歌文件系统(GFS)上。到2014年,谷歌不再使用MapReduce作为主要的大数据处理模型。MapReduce曾经是唯一可以检索存储在HDFS中的数据的方法,但现在不再是这样了。今天,还有其他基于查询的系统,例如蜂巢和Pig,它们用于使用类似sql的语句从HDFS检索数据,这些语句与使用MapReduce模型编写的作业一起运行。
MapReduce시스템은보통세가지단계로구성됩니다(地图과减少작업/함수를조합한것으로일반화되어있기는하지만)。MapReduce작업은다음과같은작업입니다。
而向程序员公开Map和Reduce接口简化了分布式应用程序的创建Hadoop但是,在Map Reduce编程范式中很难表达广泛的逻辑。迭代过程是在Map Reduce中不能很好工作的逻辑的一个例子。一般来说,数据不是保存在内存中,迭代逻辑是通过将MapReduce应用程序链接在一起来处理的,这增加了复杂性。
MapReduce作业在内存中存储的数据很少,因为它没有为用户数据提供分布式内存结构的概念。数据必须读写到HDFS。更复杂的MapReduce应用程序需要将较小的MapReduce作业链接在一起。由于数据不能在这些作业之间传递,因此需要通过HDFS共享数据。这引入了一个处理瓶颈。
MapReduce是基于java的,因此为它编写应用程序最有效的方法是使用java。其代码必须在单独的开发环境中编译,然后部署到Hadoop集群。这种开发风格并没有被数据分析师或数据科学家广泛采用,因为他们习惯了其他技术(如SQL)或解释性语言(如Python)。MapReduce确实能够调用用其他语言(如C、Python或Shell Scripting)编写的Map/Reduce逻辑。但是,它是通过启动一个系统进程来处理这些程序的执行来实现的。该操作会带来开销,这会影响作业的性能。
MapReduce正在慢慢被大数据产品淘汰。虽然一些供应商仍然在其Hadoop发行版中包含它,但这样做是为了支持遗留应用程序。客户已经不再创建MapReduce应用程序,而是采用更简单、更快的框架,如Apache Spark。
遗留应用程序和Hadoop原生工具(如Sqoop和Pig)今天利用了MapReduce。MapReduce应用程序开发非常有限,作为一种开源技术,它也没有任何重大贡献。bob下载地址
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的事务一致性特性,可以在最终用户或应用程序访问数据时发出此操作。