1、内容n5.1 并行计算概述n5.2 Hadoop概述n5.3 HDFS(Hadoop Distributed File System)n5.4 MapReducen5.5 HBasen5.6 Zookeepern5.7 Hadoop的程序实例运行与分析5.1 并行计算概述n5.1.1 并行计算定义n5.1.2并行计算的体系结构n5.1.3 集群计算n5.1.4并行计算的进程模型n5.1.5并行编程模型n5.1.6 并行计算发展阶段5.1.1 并行计算定义 n并行计算是相对于串行计算而言的,它的基本思路是用多个处理器来同时协调求解一个问题,即将需要求解的问题分解成若干个部分,各部分分配给一个独立
2、的处理机来进行并行计算。n在分类上可分为时间上的并行和空间上的并行。n时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。n并行计算的研究得益于科学计算问题,但目前以MapReduce为代表的分割数据型并行计算在商业领域也得到广泛应用。5.1.2并行计算的体系结构 n目前,主要的并行计算体系结构有以下四种:n对称多处理(SMP:Symmetrical Multi-Processing):它由处理单元、高速缓存、总线或交叉开关、共享内存以及 I/0等组成。n大规模并行处理(MPP:Massively Parallel Processing):它是并行计算机发展过程中的主
3、力,现在已经发展到由上万个处理机构成一个系统。n分布式共享存储多处理(DSM:Distributed Shared-Memory):它较好地改善了 SMP 的可扩展能力,是目前高性能计算机的主流发展方向之一。n集群(Cluster):Linux 平台的集群系统己成为最流行的高性能计算平台,在高性能计算机中占有越来越大的比重,系统规模可从单机、少数几台联网的微机直到包括上千个节点的大规模并行系统,既可作为廉价的并行程序调试环境,也可设计成真正的高性能计算机。SMP系统与系统与MPP系统比较系统比较SMP(Symmetric Multi Processing),对称多处理系统内有许多紧耦合多处理器
4、,在这样的系统中,所有的CPU共享全部资源,如总线,内存和I/O系统等,操作系统或管理数据库的复本只有一个,这种系统有一个最大的特点就是共享所有资源。对称性:系统中任何处理器均可以访问任何存储单元和I/O设备。SMP系统与系统与MPP系统比较系统比较MPP(Massively Parallel Processing),大规模并行处理系统,这样的系统是由许多松耦合的处理单元组成的,要注意的是这里指的是处理单元而不是处理器。每个单元内的CPU都有自己私有的资源,如总线,内存,硬盘等。在每个单元内都有操作系统和管理数据库的实例复本。这种结构最大的特点在于不共享资源。理想的共享存储多处理器基于总线的D
5、SMn多处理器结构n带缓存的多处理器结构概念n集群(Cluster)是一种分布式处理系统,由很多连接在一起的独立计算机节点组成,像一个单独集成的计算机资源一样协同工作。n计算机节点可以是物理上集中在一起的,也可以是物理上分散而通过LAN连结在一起的。一个连接在一起(LAN基础上)的计算机集群对于用户和应用程序来说像一个单一的系统,这样的系统可以提供一种价格合理且性能快速而可靠的解决方案。集群特点n集群计算主要有以下几个特点:n集群技术支持混合平台工作模式,体系结构上可以同时支持RISC和IA节点,操作系统上可以同时支持Windows Server、LINUX、Unix等操作系统。n集群技术具有
6、统一的系统监控和管理功能,可以简单直观的监控到整个集群的软硬件运行状态,同时通过集群的主机入侵检测系统保障系统的安全性。特点n集群计算主要有以下几个特点:n集群技术的架构具有优异的动态扩展性,可以根据用户应用的需要,随时增加新的节点,而不必改动整个集群系统。n集群服务器节点可以根据不同的需要,灵活的进行调整和配置,承担不同的应用服务、计算任务,或通过软件管理协同处理某一特定任务。分类n集群的分类和工作原理n按照侧重点的不同,可以把集群分为三类:n高可用性集群 n负载均衡集群 n超级计算集群 可用性n计算机系统的可用性定义为:n MTTF/(MTTF+MTTR)*100%n平均无故障时间(MTT
7、F):计算机系统平均能够正常运行多长时间,才发生一次故障 n平均维修时间(MTTR):系统发生故障后维修和重新恢复正常运行平均花费的时间 n由此可见,计算机系统的可用性定义为系统保持正常运行时间的百分比。可用性n计算机产业界通常用如下表所示的9的个数来划分计算机系统可用性的类型。可用性分类可用性分类可用水平可用水平每年停机时间每年停机时间容错可用性999999 1 min极高可用性999995 min具有故障自动恢复能力的可用性999953 min高可用性9998.8 h商品可用性9943.8h高可用性集群n高可用性集群n运行于两个或多个节点上,目的是在系统出现某些故障的情况下,仍能继续对外提
8、供服务。高可用性集群的设计思想就是要最大限度地减少服务中断时间。n高可用性集群能适用于提供动态数据的服务,是由于集群中的节点共享同一存储介质,如磁盘阵列。也就是说,在高可用性集群内,每种服务的用户数据只有一份,存储在共用存储设备上,在任一时刻只有一个节点能读写这份数据 两节点集群典型结构系统组成n两台节点服务器n节点可以是一个单处理器(PC、工作站)或多处理器的系统(共享存储的多处理机),拥有内存、I/O设备和操作系统。n集群管理软件n实现集群功能需要集群软件。如Turbolinux TurboHA,或者与MS Windows Server集成在一起的集群软件MSCS(Microsoft Cl
9、uster Server),或者如IBM 的HACMP软件,HP 的MC Service Guard。n共享存储设备n如磁盘阵列等。用来存储大量的由各节点共享的数据。存储设备通过I/O控制卡和相应的传输介质连接到节点。系统组成n心跳链路(Heartbeat Link)n用来实现集群中两个节点之间的直接高速互连,并交换信息。可以通过RS232线缆实现,也可通过内部连接网卡以双绞线方式实现。n网络链路n用来与网络交换机相连,并进一步连接到所有的客户端设备,从而使各个客户端能够访问集群的资源。高可用性集群工作过程举例n以Linux 环境为例,集群中有两个节点A和B,设这个集群只提供Oracle服务,
10、用户数据存放于共用存储设备的分区/dev/sdb3上。n在正常状态下,节点A提供Oracle数据库服务,分区/dev/sdb3被节点A加载在/mnt/oracle上。n当系统出现某种故障并被TurboHA软件检测到时,TurboHA会将Oracle服务停止,并把分区/dev/sdb3卸载。之后,节点B上的TurboHA软件将在节点B上加载该分区,并启动Oracle服务。n对于Oracle服务有一个虚拟的IP地址,当Oracle服务从节点A切换到节点B上时,虚拟的IP地址也会随之绑定到节点B上,因此用户仍可访问此服务。负载均衡集群n负载均衡集群n目的是提供和节点个数成正比的负载能力,这种集群很适
11、合提供大访问量的Web服务。负载均衡集群往往也具有一定的高可用性特点。n负载均衡集群适用于提供相对静态的数据的服务,比如HTTP服务。因为通常负载均衡集群的各节点间没有共用的存储介质,用户数据被复制成多份,存放于每一个提供该项服务的节点上。Turbolinux Cluster Server负载均衡集群的工作机制n下面以Turbolinux Cluster Server为例简要介绍一下负载均衡集群的工作机制。n在集群中有一个主控节点,称为高级流量管理器(ATM)。假设这一集群仅被用来提供一项HTTP服务,其余各节点均被设定为HTTP的服务节点。n用户对于页面的请求全部发送到ATM上,因为ATM上
12、绑定了这项服务对外的IP地址。ATM把接受到的请求再平均发送到各服务节点上,服务节点接收到请求之后,直接把相应的Web页面发送给用户。负载均衡集群的工作机制n这样一来,假如在1秒内有1000个HTTP页面请求,而集群中有10个服务节点,则每个节点将处理100个请求。n这样,在外界看来,好象有一台10倍速度的高速计算机在处理用户的访问。这也就是真正意义上的负载均衡。负载均衡集群的工作机制n但是ATM要处理所有1000个页面请求,它会不会成为集群处理速度的瓶颈呢?n由于对于页面请求的数据量相对较少,返回页面内容的数据量相对较大,因此这种方式还是很有效率的。nATM发生故障,也不会导致整个系统无法工
13、作。Turbolinux Cluster Server可以设置一台或多台计算机为后备ATM节点,当主ATM节点故障时,在后备ATM中会产生出一个新的主ATM,接替它的工作。可以看出,这种负载均衡集群也具有一定的高可用性。nTurboCluster中采用的调度策略有:n轮回(Round Robin)、n加权轮回(Weighted Round Robin)、n最少连接(Least Connection)两者的结合n高可用性集群对一种服务而言不具有负载均衡功能,它可以提高整个系统的可靠性,但不能增加负载的能力。n当然,高可用性集群可以运行多种服务,并将其适当分配在不同节点上,比如节点A提供Oracl
14、e服务,同时节点B提供Sybase服务,这也可以看成是某种意义上的负载均衡,不过这是对多种服务的分配而言 n对于同一种服务,是不能同时获得高可用性与负载均衡能力的。对一种服务,要么是只有一份数据,放在共用存储设备上,一次被一个节点访问,获得高可用性;要么是把数据复制为多份,存储于每个节点的本地硬盘上,用户的请求同时发送到多个节点上,获得负载均衡能力超级计算集群n超级计算集群。按照计算关联程度的不同,又可以分为两种:n一种是任务片方式,要把计算任务分成任务片,再把任务片分配给各节点,在各节点上分别计算后再把结果汇总,生成最终计算结果;n另一种是并行计算方式,节点之间在计算过程中大量地交换数据,可
15、以进行具有强耦合关系的计算。n这两种超级计算集群分别适用于不同类型的数据处理工作。有了超级计算集群软件,企业利用若干台PC机就可以完成通常只有超级计算机才能完成的计算任务 云计算系统的资源组织方式n云计算系统的资源组织方式有两种n虚拟机方式n利用虚拟化技术,在物理服务器抽象出能够被上层使用的虚拟化服务器,以屏蔽底层硬件差异的影响,并提高资源的利用率。n其上的执行环境与传统PC系统相同,通常在IaaS服务中提供n分布式集群方式分布式集群方式n分布式集群方式的原理是首先由云操作系统组织一批物理服务器或者虚拟服务器构成集群,然后再在集群上部署分布式软件系统作为上层软件的开发和执行环境,包括n分布式集
16、群管理n分布式程序开发环境n分布式文件系统n分布式数据库n等等两种资源组织方式比较n虚拟化架构虽然也可用于整合分布式的服务器节点,但其思想是一种“分裂”思想,也就是把服务器“分裂”成多台虚拟机来调度;n而分布式集群架构则侧重于“聚合”各个服务器的资源,输出一种新的“计算”和“存储”能力。n互联网公司(如GoogleHadoop)采用分布式集群架构的比例更高;企业私有云(如IBMVMwareMicrosoft AzureAmazonEC2OpenStack)则以虚拟化技术的应用为主。5.1.4并行计算的进程模型 n主从模式(Master-slave):有一个主进程,其它为从进程。在这种模式中,主
17、进程一般负责整个并行程序的数据控制,从进程负责对数据的处理和计算任务,当然,主进程也可以参与对数据的处理和计算。一般情况下,从进程之间不需要发生数据交换,数据的交换过程是通过主进程来完成的。n对等模式:在这种编程模式中,没有哪个进程是主进程,每个进程的地位是相同的。对等模式即参与运算的各进程地位相同,计算程序一致,只是处理的数据不同。然而,在并行实现过程中,我们总是要在这些进程中选择一个进行输入输出的进程,它扮演的角色和主进程类似。5.1.5并行编程模型 n并行编程模型是并行算法和并行计算机硬件结构间的桥梁,它用并行编程接口的形式提供给程序开发员,程序开发员通过这种并行编程接口编写并行程序,从
18、而实现并行算法。并行编程模型n并行编程模型比较流行的是消息传递模型 MPI(Message Passing Interface),共享存储模型OpenMP以及数据并行模型。n共享存储模式:以OpenMP为代表,主要是利用添加并行化指令到串行程序中,由编译器完成自动并行化。n消息传递模式:以MPI为代表,PVM(并行虚拟机,Parallel Virtual Machine Computing)是消息传递模式的一个变种。n数据并行模式:MapReduce是数据并行计算模型的典范,在云计算领域被广泛采用。并行编程模型n可以这样打比方:n作并行计算好比是盖楼房,你有了MPI就好比是有了砂石,水泥和钢材
19、,你可以盖最美的房子,但你必须使用最原始状态的原材料,付出可观的智力劳动;n你有了OpenMP就好比是有了预制板和各种预制件,可以非常快速地造房子,事半功倍;n你有了数据并行环境,可以比作你有了包工头,很多事情您就可以完全依靠他了。n也许比喻方式不是很恰当,但是三种编程模式的优劣、效率是很有差别的,可以不夸张地说OpenMP比MPI要容易很多倍。MPInMPI(Message Passing Interface)是消息传递并行程序设计的标准之一.MPI正成为并行程序设计事实上的工业标准。nMPI的实现包括MPICH、LAM、IBM MPL等多个版本,最常用和稳定的是MPICH,曙光天潮系列的M
20、PI以MPICH为基础进行了定制和优化。n然而,MPI同样存在着一些不足。由于进程的唯一性和显式消息传递的特点,加上MPI标准繁琐,从而使得基于其开发并行程序也相当复杂。在通信上也会造成很大的开销 OpenMPnOpenMP提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。n当选择忽略这些pragma,或者编译器不支持OpenMP时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。OpenMPnOpenMP支持的编程语言包括C语言、C
21、+和Fortran。n要在Visual C+.NET 中使用OpenMP其实不难,只要将 Project 的Properties中C/C+里Language的OpenMP Support开启(参数为/openmp),就可以让VC+.NET在编译时支持OpenMP 的语法了;而在编写使用OpenMP 的程序时,则需要先include OpenMP的头文件:omp.h两种并行编程模型特征对比特征消息传递共享存储典型代表MPIOpenMP适用体系结构所有流行的并行机SMP,DSM控制流多进程多线程数据存储方式分布式共享存储数据分配方式显式隐式两种并行编程模型特征对比n消息传递模型编写的程序可移植性好
22、,但编程难度系数大于共享存储这种编程模型,n共享存储模型编写的程序只适用于SMP(Symmetrical Multi-Processing)和DSM(Distributed Shared-Memory)这两种并行机,可移植性稍微逊色于消息传递模型编写的程序,但编程简单。两种并行编程模型特征对比n消息传递并行编程能支持进程间的分布式存储模式,即各个进程只能直接访问其局部内存空间,而对其他进程的局部内存空间的访问只能通过消息传递来实现。n共享存储并行编程基于线程级细粒度并行,仅被SMP和DSM并行计算机所支持,可移植性不如消息传递并行编程3)数据并行模型n从程序和算法设计人员的角度来看,并行计算又
23、可分为数据并行和任务并行。n一般来说,因为数据并行主要是将一个大任务化解成相同的各个子任务,比任务并行要容易处理。n对于数据密集型问题,可以采用分割数据的分布式计算模型,把需要进行大量计算的数据分割成小块,由网络上的多台计算机分别计算,然后把结果进行组合得出数据结论。nMapReduce是分割数据型并行计算模型的典范,在云计算领域被广泛采用。并行计算涉及的研究领域 n包括三方面的主要研究内容,即n硬件方面并行计算机的研究,n软件支持方面并行程序的设计n与理论基础方面并行算法的研究 并行计算的研究存在的问题n并行计算的研究存在的问题主要总结为 4 个方面。n(1)对比并行计算研究的3 个主要研究
24、内容来看,理论基础即并行算法的研究相对比较薄弱;n(2)当前的并行计算研究尚未十分成熟,并不能非常有效地利用并行计算资源;n(3)尚未有一门比较简单高效地并行编程语言供程序员使用,也未有比较成熟的开发环境;n(4)并行计算的硬件基础并行计算机本身有着比较难以管理,可扩展性难以保证等困难,目前尚未有比较成熟的管理方法。5.2 Hadoop概述n5.2.1 Hadoop的由来n5.2.2 Hadoop的特点n5.2.3 Hadoop基本结构n5.2.4 Hadoop的应用5.2.1 Hadoop的由来nHadoop 源于两个开源项目 Nutch和Lucene。nLucene 是一个高性能全文检索工
25、具包,是利用 Java 语言开发的。nLucene 并不是一个应用程序,而是一个简单而且容易使用的 API 库。n它可以很容易地植入到各种应用程序中,从而实现搜索和索引功能。Hadoop的由来nNutch 是第一个 Web 搜索引擎,它在 Lucene 项目的基础上增加了一些与 Web 相关的功能、网络爬虫以及一些需要解析各类文档格式的插件等等,它还包含一个用来存储数据的分布式文件系统。n从 Nutch0.8.0开始,Nutch将其中实现分布式文件系统以及MapReduce 算法的代码独立分列出来,从而实现了一个新的开源项目Hadoop。Hadoop名字的来源nHadoop并不是一个缩写字,而
26、是一个虚构的名字,Hadoop名字的起源是由于Hadoop项目创始人Doug Cutting,他的孩子为他画了一幅刚吃饱的的大象,他借用了孩子为这头棕黄色大象的命名,这个名字只是因为简短,发音容易、拼写简单,除此之外没有太大的意义。n于是Hadoop成为了Doug Cutting所创立的项目的名字,而这只大象便成为Hadoop的标签。5.2.2 Hadoop的特点 n(1)扩容能力。nHadoop 的根本特点就是存储的扩展性和计算的扩展性。Hadoop可以扩展到数千甚至数万个节点上。n(2)低成本。nHadoop 框架无需昂贵的服务器,普通 PC 机也可正常运行。必要时,在你的笔记本上也可以安
27、装。n(3)可靠性高。nHadoop 采用的分布式文件系统和 MapReduce 的任务监控,一定程度上保证了系统的备份恢复机制和分布式处理的可靠性。n(4)效率高。n数据交互的高效性以及 MapReduce 的处理模式,可以在数据所在的节点并行处理,为海量信息的高效处理做了铺垫。5.2.3 Hadoop基本结构 PigChukwaHiveHBaseMapReduceHDFSZooKeeperCore(Common)AvroHadoop基本结构n(1)Core(Common):n一系列分布式文件系统和通用I/O的组件和接口(序列化、Java RPC和持久化数据结构)。这是整个Hadoop项目的
28、核心,其他的Hadoop子项目都是在Hadoop Common的基础上发展的。n(2)Avro:nHadoop的RPC(remote procedure call 远程过程调用)方案。是一种提供高效,跨语言RPC的数据序列系统,持久化数据存储。Hadoop基本结构n(3)Chukwa:n分布式数据收集和分析系统,Chukwa运行HDFS中存储数据的收集器,它使用MapReduce来生成报告。是一个用来管理大型分布式系统的数据采集系统。n(4)HBase:n一个分布式,列存储数据库。HBase使用HDFS作为底层存储,同时支持MapReduce的批量式计算和点查询。是支持结构化和非结构化数据存储
29、的分布式数据库,Google的BigTable的开源实现。Hadoop基本结构n(5)HDFS:n是一个高吞吐量、高容错性、高可靠性的分布式文件系统,是Google的文件系统GFS的开源实现。n(6)Hive:n提供数据摘要和查询功能的分布式数据仓库,Hive管理HDFS中存储的数据,并提供基于SQL的查询语言用于查询数据。Hive是数据查询的接口而不是数据本身,HBase则用于存储数据本身,Hive可以和HBase一起工作 n(7)MapReduce:n大型数据的分布式处理模型。是分布式数据处理模式和执行环境,运行于大型商用机集群。它是Google的MapReduce的开源实现。Hadoop
30、基本结构n(8)Pig:n在MapReduce上构建的一种高级的数据流语言。是一种数据流语言和运行环境,用于检索非常大的数据集。Pig运行在MapReduce和HDFS的集群上。它是Google的Sawzall的开源实现。它更适用于批处理任务,而不适用于需要快速响应的任务;这个数据模型更适用于处理流式访问,而不是随机访问。n(9)ZooKeeper:n 用于解决分布式系统中一致性问题。是一个分布式的,高可用性的协调服务。ZooKeeper提供分布式锁之类的基本服务用于构建分布式应用。它是Google的Chubby的开源实现。Hadoop与GoogleHadoop云计算系统云计算系统Google
31、云计算系统云计算系统Hadoop HDFSGoogle GFSHadoop MapReduceGoogle MapReduceHadoop HBaseGoogle BigtableHadoop ZooKeeperGoogle ChubbyHadoop PigGoogle Sawzall5.2.4 Hadoop的应用 n(1).Hadoop在阿里巴巴:n用于商业数据处理和排序,并将Hadoop应用到阿里巴巴的ISEARCH搜索引擎和垂直商业搜索引擎。节点数:15台机器的构成的集群;服务器配置:32G内存,16核CPU,2T硬盘容量。n(2).Hadoop在百度:n主要应用于日志分析,同时使用Ha
32、doop做一些网页数据的数据挖掘工作。节点数::0一600个节点;周数据量:3000TB。Hadoop的应用n(3).Hadoop在Facebook:n主要用于内部日志的拷贝,同样用于处理数据挖掘和日志统计。硬件环境主要使用了2个集群:一个是由1200台节点组成的集群,每台机器8核,每台机器12T硬盘;一个是由400台节点组成的集群,包括2500核CPU,和4000T的原始存储数据。并且由Hadoop基础上开发了基于SQL语法的项目Hive。n(4).Hadoop在HULU:n主要用于日志的分析和存储。节点数:由14台机器构成的集群(8核CPU,单台机器是4TB硬盘);并且开发了基于HBase
33、的数据库。Hadoop的应用n(5).Hadoop在Twitter:n主要用于存储微博数据、日志以及许多中间数据;并且开发了基于Hadoop构建的ClouderaSCDH2系统,存储压缩后的数据文件(LZO格式)。n(6)Hadoop在雅虎:n主要用于支持广告系统存储及网页数据搜索与分析。节点数:26000台机器,CPU:8核;集群机器数:6000个节点(4*2CPU,1*4TB 磁盘,8GB 内存)5.3 HDFSn5.3.1 HDFS的功能n5.3.2 HDFS的结构n5.3.3 HDFS文件读写操作流程n5.3.4 HDFS如何实现可靠存储、副本管理5.3.1 HDFS的功能设计前提与目
34、标设计前提与目标硬件错误是常态而不是异常硬件错误是常态而不是异常 流式数据访问流式数据访问 超大规模数据集超大规模数据集 简单一致性模型简单一致性模型 移动计算比移动数据更简单移动计算比移动数据更简单 异构软硬件平台间的可移植性异构软硬件平台间的可移植性 5.3.2 HDFS的结构HDFS的结构nHDFS 有三个重要角色:nNameNode(名字节点)、nDataNode(数据节点)n和 Client(客户端)。n一个 HDFS 集群由一个 NameNode 和一定数目的 DataNode 组成,NameNode管理文件系统的元数据(Meta-data),DataNode存储实际的数据。Cli
35、ent是仅需要获取分布式文件系统文件的应用程序。HDFS的结构nNameNode 是一个主控服务器,负责管理分布式文件系统的命名空间(NameSpace)、集群配置信息、存储块的复制以及客户端对文件的访问。n集群中的 DataNode 一般是一个节点一个,负责管理它所在节点上的数据存储以及客户端的访问。它存储 Block(数据块)于本地文件系统中,同时周期性的发送所有存在的 Block 的报告给 NameNode。HDFS的结构nHDFS 暴露了文件系统的命名空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组 DataNode 上。nNam
36、eNode 执行文件系统的命名空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体 DataNode 节点的映射。nDataNode 负责处理文件系统客户端的读写请求。在 NameNode 的统一调度下进行数据块的创建、删除和复制。5.3.3 HDFS文件读写操作流程 nHDFS的数据访问模式是“一次写入、多次读取”,这种模式是最高效的。n读取过程 读取过程n(l)客户端通过Filesystem对象的open()方法来打开希望读取的文件。n(2)分布式文件系统通过RPC来调用名字节点(Namenode),来确定文件开头部分数据块的位置。n(3)客户端对FSDatalnputst
37、ream输入流调用read()方法。读取过程n(4)FSDatalnputstream对象随即与存储着文件开头部分的块的数据节点相连,通过在数据流中反复调用read()方法,数据就会从数据节点返回到客户端。n(5)当读取到块的最后一端时,FSDatalnputstream就会关闭与数据节点间的联系。然后为下一块找到最佳的数据节点。n(6)当客户端读取完毕时,就会对文件系统输入数据流调用close()方法 写入过程 写入过程n(1)客户端通过Filesystem对象的create()方法来创建希望写入的文件。n(2)分布式文件系统通过RPC来调用名字节点(Namenode),并在文件系统的命名空
38、间中创建一个新文件 n(3)客户端对写入数据调用write()方法。写入过程n(4)FSDataOutputstream将客户写入的数据分成一个个的包(write packet),写入内部的数据队列,然后队列中的数据流依次写入到由数据节点组成的管线中.n(5)FSDataOutputstream有一个内部的包队列来等待数据节点发送的确认信息(ack packet),一个包只有在被管线中的所有节点确认后才被转移出包队列 n(6)当客户端完成数据的写入后,就会对数据流调用close()方法。n(7)向名字节点发送写入完成的信息。5.3.4 HDFS如何实现可靠存储、副本管理 nHDFS 在对文件存
39、储时,首先把文件按照一定的大小分割成一个或多个的数据块,数据块默认大小为 64MB。系统把分割好的数据块存储在 Datanode 中.除了最后一个数据块,分割后的数据块大小都是相同的。nHDFS 为了实现节点故障容错,对文件的数据块实施副本存储机制。n在对HDFS配置文件进行设置时数据块的副本数量一般情况下为3。副本存放策略 n首先是将数据块 A 放在本地节点,在对另外两个副本存放时,为了充分考虑集群内节点的容错机制,是将第二个副本 A 存储在机架 1 上的另一个节点内,第三个副本 A 则存储到不同的机架 2 上的一个节点内。副本存放策略n每个机架失效的概率要远远小于节点失效的概率。n这种数据
40、块副本存储策略有效的保证了数据存储的可靠性和高效性,又节省了客户端在进行读操作时所占用的网络带宽(数据块存储在不同的机架内)提升性能的措施 提升性能措施副本选择HDFS会尽量使用离程序最近的副本来满足用户请求,这样可以减少总带宽消耗和读延时 负载均衡HDFS的架构支持数据均衡策略 客户端缓存HDFS客户端先把数据缓存到本地的一个临时文件,程序的写操作透明地重定向到这个临时文件流水线复制DataNode从前一个节点接收数据的同时,即时把数据传给后面的节点,这就是流水线复制5.4 MapReducen5.4.1 MapReduce原理n5.4.2 MapReduce执行流程n5.4.3 MapRe
41、duce数据流程n5.4.4 MapReduce的容错机制5.4.1 MapReduce原理 nMapReduce基本原理是把输入看为一组 对集,输出同样也是一组 对集或者是单个.n在利用MapReduce编写程序时,程序员只需要关注两个自定义函数:映射(map)函数和简化(reduce)函数 map和reduce函数 函数 输入 输出说明map 将数据集解析成一批对,输入map函数中进行处理并输出中间结果集 reduce List(v2)表示属于同一个k2的valueMapReduceMapReduce处理的任务基本要求:待处理的数据集可以分解成许多处理的任务基本要求:待处理的数据集可以分解
42、成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理小的数据集,而且每一个小数据集都可以完全并行地进行处理 映射阶段映射阶段,用户输入的数据分割为M个片断,对应M个Map任务。每一个Map操作的输入是数据片断中的键值对集合,Map操作调用用户定义的Map函数,输出一个中间态的键值对 集合。接着,按照中间态的K2将输出的数据集进行排序,并生成一个新的元组,按照K2的范围将这些元组分割为R个片断 化简阶段化简阶段,每一个Reduce操作的输入是一个片断,Reduce操作调用用户定义的Reduce函数,生成用户需要的键值对进行输出 并行编程n如果说并行编程的难度足以让那些没有并行编程经验的普
43、通程序员望而却步的话,n开源实现的 Hadoop 极大的降低了编程的门槛,n通过学习Hadoop,你会发现基于 Hadoop 的并行编程非常简单,n无须任何并行编程程序的开发经验,你也可以轻松的开发出所需要的并行程序,n并让其分布式并行地运行在数百台机器上,然后在很短时间内完成大规模数据的计算。5.4.2 MapReduce执行流程 MapReduce执行流程n(1)分割输入文件:n在并行程序中的MapReduce函数库首先将输入文件分割成M个块,每块的大小一般从16MB到64MB不等(可以通过参数自行调整)。n(2)分配map或者reduce任务:n在进程中有一个身份比较特殊的进程,它是主控
44、程序master。其余都是执行map或者reduce任务的worker(工作机),并且任务都是由主控程序分配的。master分别分配给这些worker M个map任务与R个reduce任务。MapReduce执行流程n(3)读取输入块:n一个执行map任务的worker节点读取相关输入块的内容,worker从数据中解析出所需要的对集合,并把它们传送给用户自定义的map函数,由map函数处理这些数据集合并产生中间对集,并暂时把它们缓冲到内存中 MapReduce执行流程n(4)本地写入中间结果:n这些缓冲到内存的中间对集将被定时的写入到本地硬盘 n(5)远程读取中间结果:n当执行reduce任务
45、的 worker节点在本地硬盘读取了所有的中间数据后,就通过排序函数使具有相同key的中间value聚集在一起。MapReduce执行流程n(6)写入输出文件:nreduce节点将具有相同key的中间value值进行迭加,并把结果传递给用户自定义的reduce函数。reduce函数的结果写到最终的输出文件。n(7)返回调用点:n当所有的map任务和reduce任务都执行后,这时MapReduce就直接返回到用户程序的调用点。5.4.3 MapReduce数据流程n在MapReduce执行过程中数据流程主要分三个阶段:n(1)用户将输入文件拷贝到HDFS文件系统中。n在该阶段用户需要将相关文件用
46、命令拷贝到HDFS文件系统中,然后提交该任务。5.4.3 MapReduce数据流程n(2)Map阶段 n输入文件块首先被划分为多个数据分块(Split),以便 Map 任务能并发的进行 n之后每一个划分将分配到Map函数为之运行 nCombine阶段:将中间结果中有相同 key的 对集合并成一对 nPartition阶段:该阶段是把Map 任务输出的中间结果按 key 划分成 R 份(R 是预先定义的,数目等于 Reduce 任务的个数)Map阶段(3)Reduce阶段n这个阶段可以分为 3 个步骤:排序(Sort)、混洗(Shuffle)和 Reduce。nSort 同Shuffle 一块
47、进行的,在这个阶段中保证给定一个 key 它所有键值对是连续排列,并将来自不同 Map输出的中间结果具有相同 key 的 对集合并到一块 nReduce 阶段:用户定义的 Reduce函数执行用户所定义的操作,执行后的最终结果通过 OutputFormat输出到 HDFS 中 Reduce阶段5.4.4 MapReduce的容错机制 n(1)worker节点错误 nmaster节点会周期性的向worker节点发送检测命令。n如果持续在一定的时间内没有从工作节点收到反馈,master节点就认为该worker节点失效。nMapReduce 可以有效地允许一定范围的worker节点失效的情况。nMa
48、pReduce的master节点就会简单的把这些不能访问的worker节点上的工作再执行一次 MapReduce的容错机制n(2)master节点失效 n分析master节点失效要区分两种情况,一种是master程序失效,一种是运行master程序的节点失效。nMaster会周期性地设置检查点(checkpoint),并导出Master中的数据。一旦master程序失效,系统就从最近的一个检查点恢复并重新执行。n另一种情况下,由于只有一个主控节点,所以如果主控节点失效了,就只能终止整个MapReduce程序的执行并重新开始。5.4.5 Hadoop 新 MapReduce 框架 YarnnHa
49、doop 自 0.23.0 版本后新的 map-reduce 框架(Yarn)nYarn维持与以前版本(hadoop-0.20.205)的API兼容性。这意味着所有的MapReduce作业只需重新编译就可以在新框架上运行。nHadoop中的JobTracker进程相当于前面所说的Master程序,TaskTracker进程相当于前面所说的Worker程序。原框架的问题n随着分布式系统集群的规模和其工作负荷的增长,原框架的问题逐渐浮出水面,主要的问题集中如下:n1)JobTracker 是 Map-reduce 的集中处理点,存在单点故障。n2)JobTracker 完成了太多的任务,造成了过多
50、的资源消耗,当 map-reduce job 非常多的时候,会造成很大的内存开销,潜在来说,也增加了 JobTracker fail 的风险,这也是业界普遍总结出老 Hadoop 的 Map-Reduce 只能支持 4000 节点主机的上限。原框架的问题n3)在 TaskTracker 端,以 map/reduce task 的数目作为资源的表示过于简单,没有考虑到 cpu/内存的占用情况,如果两个大内存消耗的 task 被调度到了一块,很容易出现 OOM(Out Of Memory,内存溢出)n4)在 TaskTracker 端,把资源强制划分为 map task slot 和 reduce