我知道MapReduce
(MR
)是Hadoop
的三个核心框架之一,我对mapper-shuffle-reducer
的进度很熟悉。
我的问题可以分为两部分:
1)是什么使MR
对于Hadoop
唯一,为什么不使用其他计算算法?
2)其他语言(例如shell
,python
)的计算部分如何工作?他们的计算过程类似于MR
吗?
最佳答案
“分而治之”是处理数据集的一种非常强大的方法。 MapReduce提供了一种读取大量数据的方法,但以可伸缩的方式分配了工作量。通常,即使是非结构化数据也可以从原始文件中分离出单独的“记录”,而Hadoop(或其兼容的文件系统,如S3)提供了以原始格式而不是在数据库中存储大量数据的方法。 Hadoop只是一个管理大量磁盘和文件的过程。 YARN(或Mesos或其他调度程序)使您可以部署和运行收集和处理数据的各个“工作单元”。
但是,MapReduce并不是唯一的执行框架。 Tez或Spark与MapReduce的InputFormat和OutputFormat API交互以读取或写入数据。两者都提供了对MapReduce的优化,其中可以使用称为DAG的计算图来定义任务,而不是说“映射此输入,减少该结果,将该reducer的输出映射到另一个reducer ...”。比纯MapReduce函数更容易使用Hive或Pig这样的高级语言。但是,所有这些都是Hadoop的扩展,应该是独立的项目,而不是Hadoop核心的一部分。
我认为大多数Hadoop人员并不担心Hadoop为什么使用MapReduce,他们只是接受它的API,即您如何处理HDFS接口(interface)上的文件,即使它是在Spark之类的其他库之后抽象出来的。
只要YARN节点都具有必需的运行时依赖关系,就可以通过Hadoop Streaming API来运行Shell,Python,Ruby,Javascript等。它的操作与MapReduce相似。数据由映射器处理,将键改组为精简器,然后再次进行处理。除了我不相信自定义数据格式可以被处理。例如,您也许可以使用Hadoop Streaming在Shell中读取Parquet数据。数据必须作为换行分隔符事件存在,并通过标准输入读取,然后写入标准输出。
关于hadoop - Hadoop为什么选择MapReduce作为其计算引擎?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50606701/