《Hadoop实战第2版》——1.4节Hadoop与分布式开发

1.4 Hadoop与分布式开发
我们通常所说的分布式系统其实是分布式软件系统,即支持分布式处理的软件系统。它是在通信网络互联的多处理机体系结构上执行任务的系统,包括分布式操作系统、分布式程序设计语言及其编译(解释)系统、分布式文件系统和分布式数据库系统等。Hadoop是分布式软件系统中文件系统层的软件,它实现了分布式文件系统和部分分布式数据库系统的功能。Hadoop中的分布式文件系统HDFS能够实现数据在计算机集群组成的云上高效的存储和管理,Hadoop中的并行编程框架MapReduce能够让用户编写的Hadoop并行应用程序运行得以简化。下面简单介绍一下基于Hadoop进行分布式并发编程的相关知识,详细的介绍请参看后面有关MapReduce编程的章节。
Hadoop上并行应用程序的开发是基于MapReduce编程模型的。MapReduce编程模型的原理是:利用一个输入的key/value 对集合来产生一个输出的key/value 对集合。MapReduce库的用户用两个函数来表达这个计算:Map和Reduce。
用户自定义的Map函数接收一个输入的key/value 对,然后产生一个中间key/value 对的集合。MapReduce把所有具有相同key值的value集合在一起,然后传递给Reduce函数。
用户自定义的Reduce函数接收key和相关的value集合。Reduce函数合并这些value值,形成一个较小的value集合。一般来说,每次调用Reduce函数只产生0或1个输出的value值。通常我们通过一个迭代器把中间value值提供给Reduce函数,这样就可以处理无法全部放入内存中的大量的value值集合了。
图1-4是MapReduce的数据流图,体现MapReduce 处理大数据集的过程。简而言之,这个过程就是将大数据集分解为成百上千个小数据集,每个(或若干个)数据集分别由集群中的一个节点(一般就是一台普通的计算机)进行处理并生成中间结果,然后这些中间结果又由大量的节点合并,形成最终结果。图1-4也说明了MapReduce框架下并行程序中的两个主要函数:Map、Reduce。在这个结构中,用户需要完成的工作是根据任务编写Map和Reduce两个函数。

MapReduce计算模型非常适合在大量计算机组成的大规模集群上并行运行。图1-4中的每一个Map任务和每一个Reduce任务均可以同时运行于一个单独的计算节点上,可想而知,其运算效率是很高的,那么这样的并行计算是如何做到的呢?下面将简单介绍一下其原理。

  1. 数据分布存储
    Hadoop分布式文件系统(HDFS)由一个名字节点(NameNode)和多个数据节点 (DataNode)组成,每个节点都是一台普通的计算机。在使用方式上HDFS与我们熟悉的单机文件系统非常类似,利用它可以创建目录,创建、复制、删除文件,并且可以查看文件内容等。但文件在HDFS底层被切割成了Block,这些Block分散地存储在不同的DataNode上,每个Block还可以复制数份数据存储在不同的DataNode上,达到容错容灾的目的。NameNode则是整个HDFS的核心,它通过维护一些数据结构来记录每一个文件被切割成了多少个Block、这些Block可以从哪些DataNode中获得,以及各个DataNode的状态等重要信息。
  2. 分布式并行计算
    Hadoop中有一个作为主控的 JobTracker,用于调度和管理其他的TaskTracker。JobTracker可以运行于集群中的任意一台计算机上;TaskTracker则负责执行任务,它必须运行于DataNode上,也就是说DataNode既是数据存储节点,也是计算节点。JobTracker将Map任务和Reduce任务分发给空闲的TaskTracker,让这些任务并行运行,并负责监控任务的运行情况。如果某一个TaskTracker出了故障,JobTracker会将其负责的任务转交给另一个空闲的TaskTracker重新运行。
  3. 本地计算
    数据存储在哪一台计算机上,就由哪台计算机进行这部分数据的计算,这样可以减少数据在网络上的传输,降低对网络带宽的需求。在Hadoop这类基于集群的分布式并行系统中,计算节点可以很方便地扩充,因此它所能够提供的计算能力近乎无限。但是数据需要在不同的计算机之间流动,故而网络带宽变成了瓶颈。“本地计算”是一种最有效的节约网络带宽的手段,业界将此形容为“移动计算比移动数据更经济”。
  4. 任务粒度
    在把原始大数据集切割成小数据集时,通常让小数据集小于或等于HDFS中一个Block 的大小(默认是64MB),这样能够保证一个小数据集是位于一台计算机上的,便于本地计算。假设有M个小数据集待处理,就启动M个Map任务,注意这M个Map任务分布于N 台计算机上,它们将并行运行,Reduce任务的数量R则可由用户指定。
  5. 数据分割(Partition)
    把Map任务输出的中间结果按key的范围划分成R份(R是预先定义的Reduce任务的个数),划分时通常使用Hash函数(如hash(key) mod R),这样可以保证某一段范围内的 key一定是由一个Reduce任务来处理的,可以简化Reduce的过程。
  6. 数据合并(Combine)
    在数据分割之前,还可以先对中间结果进行数据合并(Combine),即将中间结果中有相同key的对合并成一对。Combine的过程与Reduce的过程类似,在很多情况下可以直接使用Reduce函数,但Combine是作为Map任务的一部分、在执行完Map函数后紧接着执行的。Combine能够减少中间结果中对的数目,从而降低网络流量。
  7. Reduce
    Map任务的中间结果在执行完Combine和Partition之后,以文件形式存储于本地磁盘上。中间结果文件的位置会通知主控JobTracker,JobTracker再通知Reduce任务到哪一个TaskTracker上去取中间结果。注意,所有的Map任务产生的中间结果均按其key值通过同一个Hash函数划分成了R份,R个Reduce任务各自负责一段key区间。每个Reduce需要向许多个Map任务节点取得落在其负责的key区间内的中间结果,然后执行Reduce函数,形成一个最终的结果文件。
  8. 任务管道
    有R个Reduce任务,就会有R个最终结果。很多情况下这R个最终结果并不需要合并成一个最终结果,因为这R个最终结果又可以作为另一个计算任务的输入,开始另一个并行计算任务,这也就形成了任务管道。

这里简要介绍了在并行编程方面Hadoop中MapReduce编程模型的原理、流程、程序结构和并行计算的实现,MapReduce程序的详细流程、编程接口、程序实例等请参见后面章节。

时间: 2024-10-24 23:03:18

《Hadoop实战第2版》——1.4节Hadoop与分布式开发的相关文章

《Hadoop实战第2版》——2.1节在Linux上安装与配置Hadoop

2.1 在Linux上安装与配置Hadoop 在Linux上安装Hadoop之前,需要先安装两个程序: 1)JDK 1.6(或更高版本).Hadoop是用Java编写的程序,Hadoop的编译及MapReduce的运行都需要使用JDK.因此在安装Hadoop前,必须安装JDK 1.6或更高版本. 2)SSH(安全外壳协议),推荐安装OpenSSH.Hadoop需要通过SSH来启动Slave列表中各台主机的守护进程,因此SSH也是必须安装的,即使是安装伪分布式版本(因为Hadoop并没有区分开集群

《Hadoop实战第2版》——1.2节Hadoop项目及其结构

1.2 Hadoop项目及其结构 现在Hadoop已经发展成为包含很多项目的集合.虽然其核心内容是MapReduce和Hadoop分布式文件系统,但与Hadoop相关的Common.Avro.Chukwa.Hive.HBase等项目也是不可或缺的.它们提供了互补性服务或在核心层上提供了更高层的服务.图1-1是Hadoop的项目结构图. 下面将对Hadoop的各个关联项目进行更详细的介绍. 1)Common:Common是为Hadoop其他子项目提供支持的常用工具,它主要包括FileSystem.

《Hadoop实战第2版》——3.4节Hadoop流

3.4 Hadoop流 Hadoop流提供了一个API,允许用户使用任何脚本语言写Map函数或Reduce函数.Hadoop流的关键是,它使用UNIX标准流作为程序与Hadoop之间的接口.因此,任何程序只要可以从标准输入流中读取数据并且可以写入数据到标准输出流,那么就可以通过Hadoop流使用其他语言编写MapReduce程序的Map函数或Reduce函数.举个最简单的例子(本例的运行环境:Ubuntu,Hadoop-0.20.2): bin/hadoop jar contrib/stream

《Hadoop实战第2版》——1.1节什么是Hadoop

1.1 什么是Hadoop 1.1.1 Hadoop概述 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台.以Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构.HDFS的高容错性.高伸缩性等优点允许用户将Hadoop部署在低廉的硬件上,形成分布式系统:MapReduce分布式编程模型允许用户在不了解分

《Hadoop实战第2版》——1.7节Hadoop集群安全策略

1.7 Hadoop集群安全策略众所周知,Hadoop的优势在于其能够将廉价的普通PC组织成能够高效稳定处理事务的大型集群,企业正是利用这一特点来构架Hadoop集群.获取海量数据的高效处理能力的.但是,Hadoop集群搭建起来后如何保证它安全稳定地运行呢?旧版本的Hadoop中没有完善的安全策略,导致Hadoop集群面临很多风险,例如,用户可以以任何身份访问HDFS或MapReduce集群,可以在Hadoop集群上运行自己的代码来冒充Hadoop集群的服务,任何未被授权的用户都可以访问Data

《Hadoop实战第2版》——1.3节Hadoop体系结构

1.3 Hadoop体系结构如上文所说,HDFS和MapReduce是Hadoop的两大核心.而整个Hadoop的体系结构主要是通过HDFS来实现分布式存储的底层支持的,并且它会通过MapReduce来实现分布式并行任务处理的程序支持.下面首先介绍HDFS的体系结构.HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的.其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作:集群中的DataNod

《Hadoop实战第2版》——1.8节本章小结

1.8 本章小结本章首先介绍了Hadoop分布式计算平台:它是由Apache软件基金会开发的一个开源分布式计算平台.以Hadoop分布式文件系统(HDFS)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构.由于Hadoop拥有可计量.成本低.高效.可信等突出特点,基于Hadoop的应用已经遍地开花,尤其是在互联网领域.本章接下来介绍了Hadoop项目及其结构,现在Hadoop已经发展成为一个包含多个子项目的集合,被

《Hadoop实战第2版》——2.6节本章小结

2.6 本章小结本章主要讲解了Hadoop的安装和配置过程.Hadoop的安装过程并不复杂,基本配置也简单明了,其中有几个关键点: Hadoop主要是用Java语言写的,它无法使用一般Linux预装的OpenJDK,因此在安装Hadoop前要先安装JDK(版本要在1.6以上): 作为分布式系统,Hadoop需要通过SSH的方式启动处于slave上的程序,因此必须安装和配置SSH.由此可见,在安装Hadoop前需要安装JDK及SSH.Hadoop在Mac OS X上的安装与Linux雷同,在Win

《Hadoop实战第2版》——导读

目 录 前 言第1章 Hadoop简介1.1 什么是Hadoop1.2 Hadoop项目及其结构1.3 Hadoop体系结构1.4 Hadoop与分布式开发1.5 Hadoop计算模型-MapReduce1.6 Hadoop数据管理1.7 Hadoop集群安全策略1.8 本章小结第2章 Hadoop的安装与配置2.1 在Linux上安装与配置Hadoop2.2 在Mac OSX上安装与配置Hadoop2.3 在Windows上安装与配置Hadoop2.4 安装和配置Hadoop集群2.5 日志分