|
|
1
1
“分而治之”是处理数据集的一种非常强大的方法。MapReduce提供了一种读取大量数据的方法,但以可伸缩的方式分配工作负载。通常,即使是非结构化数据也可以将单个“记录”从原始文件中分离出来,而Hadoop(或其兼容的文件系统,如S3)提供了以原始格式而不是数据库存储大量数据的方法。Hadoop只是一个管理大量磁盘和文件的过程。Thread(或Mesos,或其他调度器)允许您部署和运行用于收集和处理数据的单个“工作单元”。 不过,MapReduce并不是唯一的执行框架。Tez或Spark与MapReduce的InputFormat和OutputFormat API交互以读取或写入数据。两者都提供了对MapReduce的优化,在MapReduce中,任务可以使用称为DAG的计算图来定义,而不是说“映射此输入,减少该结果,将该缩减器的输出映射到另一个缩减器…”。甚至像Hive或Pig这样的高级语言也比纯MapReduce函数更容易使用。不过,所有这些都是Hadoop的扩展,应该是独立的项目,而不是Hadoop核心的一部分。 我认为大多数Hadoop用户并不关心 Hadoop为什么使用MapReduce ,他们只接受它的API是如何在HDFS接口上处理文件的,即使这是在Spark等其他库后面抽象出来的。 Shell、Python、Ruby、Javascript等都可以通过Hadoop流式API运行,只要纱线节点都具有所需的运行时依赖项。它的操作与MapReduce类似。数据由映射器处理,关键帧被洗牌到减缩器中,然后再次处理。除了我不相信自定义数据格式是可以处理的。例如,您可能能够使用Hadoop流读取Shell中的拼花地板数据。数据必须作为新行分隔符事件存在,通过标准输入读取,然后写入标准输出。 |