第二章 关于MapReduce
MapReduce 是一种可用于数据处理的编程模型。该模型比较简单,但要想写出有用的程序却不太容易。Hadoop可以运行各种语言版本的MapReduce程序。最重要的是:MapReduce程序本质上是并行运行的,因此可以将大规模数据分析任务分发给任何一个拥有足够多机器的数据中心。MapReduce的优势在于处理大规模数据集。
通常情况下,处理少量的大型文件更容易、更有效。
map和reduce
MapReduce 任务过程分为两个处理阶段:map阶段和reduce阶段。每阶段都以键值对作为输入输出,其类型由程序员来选择。程序员还需要写两个函数:map函数和reduce函数。
MapReduce作业(job)是客户端需要执行的一个工作单元:它包括输入数据、MapReduce程序和配置信息。Hadoop将作业分成若干个任务(task)来执行,包括两类任务:map任务和reduce任务。这些任务运行在集群的节点上,并通过YARN进行调度。如果一个任务失败,它将在另一个不同的节点上自动重新调度运行。
Hadoop将MapReduce的输入数据划分成等长的小数据块,称为输入分片(input split)或简称“分片”。Hadoop为每个分片构建一个map任务,并由该任务来运行用户自定义的map函数从而处理分片中的每条记录。
如果我们并行处理每个分片,且每个分片数据比较小,那么整个处理过程将获得更好的负载均衡,因为一台较快的计算机能够处理的数据分片比一台较慢的计算机更多,且成一定的比例。即使使用相同的机器,失败的进程或其他并发运行的作业能够实现满意的负载均衡,并且随着分