认识Hadoop
Hadoop是Apache基金会下一个分布式的开源计算平台。
Hadoop可使用户在不了解分布式底层细节的情况下,使用简单的编程模型通过廉价PC的集群处理海量数据。
以Hadoop分布式文件系统(Hadoop Distrributed File System,HDFS)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop,为用户提供了系统底层细节透明的分布式基础架构。
对于Hadoop集群而言,其节点可分为两大类角色:Master(主节点)和Salve(从节点)。一个HDFS集群是由一个NameNode(名称节点)和若干个DateNode(数据节点)构成的。NameNode作为主服务器,管理文件命名系统空间和客户端对文件系统的访问操作;集群中的DateNode管理存储的数据。
基于HDFS,MapReduce框架实现了工作调度(分发、跟踪、执行等)、分布式计算、负载均衡、容错处理以及网络通信等复杂问题,并把处理过程高度抽象为两类函数:map和reduce,其中map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总起来。
Hadoop2.0以后引入了资源管理系统YARN。YARN在主体上采用主/从(master/slave)结构,其中,master被称为ResourceManager(资源管理器,RM),salve被称为NodeManager(节点管理器,NM),RM负责对各个NM上的资源进行统一管理和调度。也就是说:YARN负责的是资源调度。
在YARN架构中,一个全局的RM以后台守护线程的形式运行,他通常在专用机器(NameNode)上运行,在各个相互竞争资源换的应用程序之间,仲裁可用的集群资源 。
当用户提交一个应用程序时,一个称为ApplicationMaster(AM)的轻量级进程实例会启动,以协调应用程序内所有任务的执行。
理解MapReduce编程范式
Hadoop中的MapReduce框架是由Google的MapReduce框架开源实现的。旨在利用大规模的服务器集群解决大数据量处理问题。
MapReduce的 核心思想“分而治之”。“任务的分解与结果的汇总”。将HDFS上的海量数据,切分成若干个小块,然后将每个小块的数据,分发至集群中的不同节点上实施计算,然后通过整合各节点的中间结果,得到最终的计算结果。
在MapReduce模型里,Map和Reduce均为抽象接口,具体实现由用户决定。在实践中,MapReduce把一个任务划分为若干个Job(作业),每个Job又分为Map(映射)和Reduce(规约)两个阶段。Map和Reduce处理(输入和输出)都是K-V(键值对)数据,Map阶段的输出数据就是Reduce阶段的输入数据。
在MapReduce中,每个Map节点对划分的数据进行处理,根据不同的输入结果,会产生响应的中间结果;每个Reduce节点也同样负责各自的中间结果处理;在进行Reduce操作之前,必须等待所有的Map节点处理完;汇总所有的Reduce中间结果,即得到最终结果。
范例程序-WordCount
WordCount基本流程
01.数据分割
首先将输入的文件分割成较小的块,形如<K,V>的形式。
02.Map操作
将<K,V>进行处理(例如把句子处理成<word,1>).
03.排序和本地合并
Map操作输出<Key,Value>对之后,映射方(Mapper)会自动将输出的<Key,Value>对排序,然后执行合并(Combine)过程,即本地Reduce操作。
04.Reduce操作
规约方(Reducer)会先将合并 的结果 实施排序,并将具有相同Key的Value形成一个列表(LIst)集合,最后通过用户自定义的Reduce方法输出结果。