Hadoop 是一个能对大量数据进行分布式处理的软件架构。可靠:假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。 高效:以并行的方式工作,通过并行处理加快处理速度。可伸缩:可以处理PB级数据。
主要特点: 扩容能力(Scalable),可靠的存储和处理千兆字节(PB)数据。
成本低(Economical), 通过普通机器组成的服务器群来分发以及处理数据。这些服务器群总计可达数千个节点。
高效率(Efficient),通过分发数据,hadoop可以在数据所在的节点上并行的处理,这使得处理速度很快。
可靠性(Reliable),Hadoop能自动的维护数据的多份复制,并且在任务失败后可以自动的重新部署计算任务。
Hadoop 实现了一个分布式文件系统(Hadoop Distributed File System),HDFS,具有高容错性(fault-tolerent)的特点,并且设计用来部署在低廉(low-cost)的硬件上。
Hadoop 实现了MapReduce 分布式计算模型。MapReduce 将应用程序的工作分解成很多小的工作小块(small blocks of work),HDFS为了做到可靠性创建了多份数据块(data blocks) 的复制(replicas),并将它们放置在服务器群的计算节点中(compute nodes)。
所有在MapReduce中的数据都是不可改变的,如果在一个mapping任务中你改变了一个输入键值对,它并不会反馈到输入文件;节点之间的通信只在产生新的输出键值对(key,value)pairs 的时候才会发生,Hadoop系统会把这些输出传到下一个执行阶段。
列表处理(list processing):
MapReduce程序转变输入数据元素列表成输出数据元素列表成输出数据元素列表。一个MapReduce程序会重复这个步骤两次,并用两个不同的术语描述。
MapReduce 程序的第一步叫做mapping,在这一步会有一些数据元素作为mapper 函数的输入数据,每次一个,mapper会把每次map得到的结果单独传到一个输出数据元素里面。
MapReduce 第二步叫做reduce,在这一步,把第一步中key相同的pair中的value进行累加;
MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是"任务的分解与结果的汇总"。
Hadoop中 执行MapReduce任务的机器角色有两个:
一个是JobTracker;另一个是TaskTracker,JobTracker是用于调度工作的,TaskTracker是用于执行工作的。一个Hadoop集群中只有一台JobTracker。
在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总起来。
需要注意的是,用MapReduce来处理的数据集(或任务)必须具备这样的特点:待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。