《云计算与并行计算复习.》由会员分享,可在线阅读,更多相关《云计算与并行计算复习.(15页珍藏版)》请在金锄头文库上搜索。
1、云计算与分布式系统期末复习1. 1.云计算的概念,来源以及与并行计算的关系云计算的概念,来源以及与并行计算的关系云计算的概念从集群集群、网格网格和效用计算效用计算发展而来。云是虚拟计算机资源池.云可以处理各种不同的负载,包括批处理式批处理式后端作业后端作业和交互式用户界面应用交互式用户界面应用。 云通过迅速提供虚拟机或物理机允许负载被快速配置和划分。 云支持冗余冗余, 自恢复自恢复, 高可扩展高可扩展编程模型,以允许负载从许多不可避免的硬件/软件错误中恢复.最终,云计算系统可以通过实时监视资源实时监视资源来确保分配在需要时平衡。来源:数据爆炸促发了云计算的思想。集群和网格计算并行使用大量计算机
2、可以解决任何规模的问题。 效用效用计算计算和 SaaSSaaS(SoftwareasaService)将计算资源计算资源作为服务进行按需付费。云计算利用动态资源动态资源为终端用户传递大量服务。云计算是一种高吞吐量计算范式高吞吐量计算范式,它通过大的数据中心数据中心或服务器服务器群群提供服务。 云计算模型使得用户可以随时随地通过他们的互连设备访问共享资源。云计算避免了大量的数据移动,可以带来更好的网络带宽利用率.而且,机器虚拟化进一步提高了资源利用率,增加了应用程序灵活性降低了使用虚拟化数据中心资源的总体成本。云计算使用虚拟化平台,通过按需动态配置硬件、软件和数据集 ,将弹性资源放在一起, 主要
3、思想主要思想是使用数据中心中的服务器集群数据中心中的服务器集群和大规模数据库大规模数据库, 将桌面计算移向基于服务的平台,利用其对提供商和用户的低成本和简单性。云应用的所有计算任务被分配到数据中心的服务器数据中心的服务器上。 这些服务器主要是虚拟集群的虚拟机,由数据中心资源产生出来。云平台是通过虚拟化分布的系统。公有云和私有云都是在互联网互联网上开发的.公有云构建在互联网之上, 任何已付费的用户都可以访问.公有云属于服务提服务提供商供商,用户通过订阅即可访问。私有云构建在局域网内部局域网内部, 属于一个独立的组织.由客户管理, 而且其可访问范围限制在所属客户及其合作者之中。混合云由公有云和私有
4、云共同构成公有云促进了标准化,节约了资金投入,为应用程序提供了很好的灵活性;私有云尝试进行定制化,可以提供更高的有效性、弹性、安全性和隐私性;混合云则处于两者中间,在资源共享方面进行了折中。云的核心是服务器集群服务器集群(或虚拟机集群)(或虚拟机集群).集群节点用作计算节点,少量的控制节点用于管理和监视云活动。 用户作业的调度需要为用户创建的虚拟集群分配任务。数据中心和超级计算机在网络需求方面也不相同。超级计算机使用客户设计客户设计的高带宽网络的高带宽网络,如胖树或 3D 环形网络;数据中心网络数据中心网络主要是基于基于 IPIP 的商业网络云平台设计目标云平台设计目标:可扩展性可扩展性、虚拟
5、化虚拟化、有效性有效性和可靠性可靠性2. 2.云平台提供的服务类型云平台提供的服务类型6 层的云服务,范围从硬件、网络和配置到基础设施、平台和软件应用上三层Iaas(基础设施即服务)Paas(平台即服务) Saas(软件即服务)硬件即服务(HaaS) 网络即服务(NaaS) 位置即服务(配置即服务)(LaaS) 。数据中心的虚拟化资源形成互联网云,向付费用户提供硬件,软件,存储,网络和服务以运行他们的应用。云计算提供了一个虚拟化的按需动态供应硬件,软件和数据集的弹性资源平台.基础设施即服务(基础设施即服务(IaaSIaaS):这个模型将用户需要的基础设施(即服务器,存储 ,网络和数据中心构造)
6、组合在一起。用户可以在使用客户机操作系统的多个虚拟机上配置和运行指定的应用.平台即服务平台即服务(PaaS(PaaS): :这个模型使用户能够在一个虚拟的平台上配置用户制定的应用。PaaS 包括中间件,数据库,开发工具和一些运行时支持(如 Web 2.0和 Java) 。3。软件即服务软件即服务(SaaS(SaaS) :这是指面向数千付费云用户的初始浏览器的应用软件。SaaS 模型应用于业务流程,工业应用,客户关系管理,企业资源计划,人力资源和合作应用。3.Google3.Google 的核心技术(包括默认文件的核心技术(包括默认文件? ??大小?大小) )谷歌的云计算应用程序谷歌的云计算应用
7、程序的构成要素包括存储大量数据的存储大量数据的 GFSGFS、为应用程序开发者提供的 MapReduceMapReduce 编程框架编程框架、用于分布式应用程序锁服务的 ChubbyChubby 和为访问结构化或半结构化数据的 BigTableBigTable存储服务存储服务. .Google MapReduceGoogle MapReduce(Map:对一组数据元素进行某种重复式的处理,Reduce:对Map 中间结果进行某种进一步的结果整理) (MapReduce 把 what need to do 与how to do 分开了)(设计思想:scale out not up,assume
8、failures are common,moving processing todata,process data sequentially and avoid random access)上升到架构:统一架构,为程序员隐藏系统层细节。GoogleGoogle GFSGFS google gfs 是一个基于分布式集群的大型分布式文件系统,为MapReduce 计算框架提供底层数据存储和数据可靠性支撑.Master 上保存了 GFS 文件系统的三种元数据三种元数据: 命名空间,即整个分布式文件系统的目录结构。Chunk 与文件名的映射表 3。Chunk 副本的位置信息,每个Chunk 默认有 3
9、 个副本.GFS 中每个数据块划分缺省为每个数据块划分缺省为 64MB64MB。 每个数据块会分别在 3 个不同的地方复制副本;每一个数据块,仅当3 个副本都成功时,才认为数据保存成功。每个数据块再划分为 64KB64KB 的子块,每个子块有一个 3232 位位的校验和。BigTable:BigTable:GFS 是一个文件系统,难以提供对结构化数据的存储和访问管理。为此 Google 在 GFS 之上又设计了一个结构化数据存储和访问管理系统 -BigTable,为应用程序提供比单纯文件系统更方便,更高层的数据操作能力.BigTable对存储在表中的数据不做任何解释,一律视为字符串,具体数据结
10、构的实现由用户自行定义.BigTable查询模型(row:string,column:string,time:int64)-结果数据字符串。支持查询,插入和删除操作。4. 4.怎样分析与计算系统的可用性怎样分析与计算系统的可用性可用性表示系统对用户可用的时间百分比,即系统正常运行的时间百分比.可用性分析:可用性分析:HA(high accessibility)是所有集群,网络,P2P 网络和云计算系统所期望的。如果系统有一个长的平均故障时间(Mean Time To Failure,MTTF)和短的修复时间(Mean Time To Repair,MTTR) ,那么这个系统就是高度可用的。系统
11、可用性形式化定义如下:系统可用性=MTTF/(MTTF+MTTR) (大多数集群通过转移故障节点来达到高可用性的目的) 。5. 5.虚拟化的基本概念虚拟化的基本概念, ,硬件虚拟化的基本类型,虚拟化硬件虚拟化的基本类型,虚拟化软件,软件,目前市场上开源的目前市场上开源的 vmarevmare 版本所支持的指令集版本所支持的指令集虚拟化:虚拟化:虚拟化是一种计算机体系结构技术,其中,多个虚拟机共享同一台物理硬件机器.虚拟化的思想是分离软硬件以产生更好的系统性能。虚拟化技术通过在同一个硬件主机上多路复用虚拟机的方式来共享昂贵的硬件资源硬件虚拟化硬件虚拟化: :硬件虚拟化分为:全虚拟化和基于主机的虚
12、拟化.全虚拟化全虚拟化不需要修改主机操作系统。 它依赖于二进制翻译来陷入和虚拟化一些敏感,不可虚拟化的指令执行.客户操作系统和他们的应用由非临界和临界指令构成。在基于主机的系统虚拟化中,主机操作系统和客户操作系统同时存在,虚拟化软件层处于两者之间。主机操作系统仍旧负责管理硬件。客户操作系统安装并运行在虚拟化层之上.特定的应用可运行在虚拟机中。半虚拟化:半虚拟化:半虚拟化需要修改客户操作系统。半虚拟化虚拟机在用户程序中提供了特殊的API,要求真正修改操作系统。完全虚拟化:完全虚拟化:xenxen 的完全虚拟化与半虚拟化的区别是,的完全虚拟化与半虚拟化的区别是,完全虚拟化需要完全虚拟化需要 cpu
13、cpu 支持硬件虚拟化,支持硬件虚拟化,而半虚拟化而半虚拟化不需要不需要 cpucpu 支持硬件虚拟化。支持硬件虚拟化。也就是也就是,cpu,cpu 支持了硬件虚拟化,支持了硬件虚拟化, xenxen 配置完成后就是完全虚拟化配置完成后就是完全虚拟化,cpu,cpu 不支持就是半虚拟化不支持就是半虚拟化. .三种实现技术:1、模拟软件 emulation 通过模拟器模拟所有的指令, 不通知虚拟化出来的操作系统 它的运行环境.2、虚拟化一部分特权指令或者使用二进制日志转换技术。3、让 cpu 支持硬件虚拟化.被虚拟化出来的操作系统上执行的指令, 会运行在被虚拟化出来的硬件上, 就是完全虚拟化。C
14、PU,CPU,内存和内存和 I/OI/O 设备的虚拟化设备的虚拟化VMM(虚拟机监视器) ,它负责管理计算机系统的硬件资源.每次应用程序访问硬件时,VMM 都会捕获该访问请求CPUCPU、内存和、内存和 I/OI/O 设备的虚拟化设备的虚拟化为支持虚拟化,处理器利用硬件辅助虚拟化,引入一种特殊的运行模式和指令,使得VMM 和客户操作系统可运行在不同模式中,客户操作系统及其应用程序的所有敏感指令会陷入到 VMM 中。虚拟化的硬件支持虚拟化的硬件支持现代操作系统和处理器允许多个进程同时运行。如果处理器中没有保护机制,那么不同进程的所有指令都可以直接访问硬件,很容易导致系统崩溃。因此,所有处理器都至
15、少需要两种模式 (用户模式和管理模式) 来确保对临界区硬件的受控确保对临界区硬件的受控访问访问。运行在管理模式管理模式的指令称为特权指令特权指令,其他指令为非特权指令。CPUCPU 虚拟化虚拟化虚拟机的非特权指令直接在物理主机中运行关键指令可以分为三类:特权指令特权指令、控制敏感指令控制敏感指令和行为敏感指令行为敏感指令.特权指令特权指令需要在特权模式中执行, 当在特权模式之外执行特权指令时会发生陷入。控制敏感指控制敏感指令令尝试改变使用资源的配置。 行为敏感指令行为敏感指令根据资源的配置情况会有不同的行为,包括在虚拟内存中进行的负载和存储操作。VMM 运行在管理模式时,CPU 支持在用户模式
16、运行虚拟机的特权指令和非特权指令,则该 CPU 体系结构是可虚拟化的。RISC 的所有控制敏感指令和行为敏感指令都是特权指令,RISC 的 CPU 体系结构是天然可虚拟化的。内存虚拟化内存虚拟化客户操作系统和 VMM 分别维护从虚拟内存到物理内存的映射和从物理内存到机器内存的映射,共两级映射。客户操作系统仍旧负责从虚拟地址到虚拟机的物理内存地址的映射,VMM 负责将客户物理内存映射到实际的机器内存上I/OI/O 虚拟化虚拟化I/O 虚拟化包括管理虚拟设备管理虚拟设备和共享的物理硬件共享的物理硬件之间 I/O 请求的路由选择.实现实现 I/OI/O 虚拟化有三种方式虚拟化有三种方式: :全设备模
17、拟全设备模拟 :一个设备的所有功能或总线结构 (如设备枚举、识别、中断和DMA)都可以在软件中复制。半虚拟化半虚拟化:是 Xen 所采用的方法,是广为熟知的分离式驱动模型,由前端驱动和后端驱动两部分构成.前端驱动运行在 DomainU 中,而后端驱动运行在Domain0 中,它们通过一块共享内存交互。直接直接 I/OI/O 虚拟化虚拟化:让虚拟机直接访问设备硬件。它能获得近乎本地的性能,并且 CPU 开销不高。6.KVM6.KVM 实现原理(怎样实现硬件虚拟化的监控)实现原理(怎样实现硬件虚拟化的监控) ,内,内存虚拟化的基本机制,存虚拟化的基本机制,I/OI/O 虚拟化实现方式虚拟化实现方式
18、KVMKVM 的实现原理:的实现原理:KVM 是一个基于 Linux 的半虚拟化系统,是 Linux2.6。20 内核的一部分.内存管理和调度由存在的 Linux 内核执行,KVM 则负责其余部分,这使得 KVM 比其他需要控制整个机器的 hypervisor 简单许多。KVM 是一个基于硬件辅助的半虚拟化工具,对性能进行了改进,且支持未修改的客户操作系统,如 Windows,Linux,Solaris 和其他 Unix 变种。CPUCPU,内存和,内存和 I/OI/O 设备的虚拟化设备的虚拟化VMM(虚拟机监视器),它负责管理计算机系统的硬件资源。每次应用程序访问硬件时,VMM 都会捕获该访
19、问请求CPUCPU、内存和、内存和 I/OI/O 设备的虚拟化设备的虚拟化为支持虚拟化,处理器利用硬件辅助虚拟化,引入一种特殊的运行模式和指令,使得VMM 和客户操作系统可运行在不同模式中,客户操作系统及其应用程序的所有敏感指令会陷入到 VMM 中。虚拟化的硬件支持虚拟化的硬件支持现代操作系统和处理器允许多个进程同时运行。如果处理器中没有保护机制,那么不同进程的所有指令都可以直接访问硬件,很容易导致系统崩溃。因此,所有处理器都至少需要两种模式(用户模式和管理模式)来确保对临界区硬件的受控确保对临界区硬件的受控访问访问.运行在管理模式管理模式的指令称为特权指令特权指令,其他指令为非特权指令。CP
20、UCPU 虚拟化虚拟化虚拟机的非特权指令直接在物理主机中运行关键指令可以分为三类:特权指令特权指令、控制敏感指令控制敏感指令和行为敏感指令行为敏感指令。特权指令特权指令需要在特权模式中执行,当在特权模式之外执行特权指令时会发生陷入 .控制敏感控制敏感指令指令尝试改变使用资源的配置.行为敏感指令行为敏感指令根据资源的配置情况会有不同的行为,包括在虚拟内存中进行的负载和存储操作。VMM 运行在管理模式时, CPU 支持在用户模式运行虚拟机的特权指令和非特权指令,则该 CPU 体系结构是可虚拟化的。RISC 的所有控制敏感指令和行为敏感指令都是特权指令,RISC 的 CPU 体系结构是天然可虚拟化的
21、.I/OI/O 虚拟化虚拟化I/O 虚拟化包括管理虚拟设备管理虚拟设备和共享的物理硬件共享的物理硬件之间 I/O 请求的路由选择。内存虚拟化内存虚拟化客户操作系统和 VMM 分别维护从虚拟内存到物理内存的映射和从物理内存到机器内存的映射,共两级映射。客户操作系统仍旧负责从虚拟地址到虚拟机的物理内存地址的映射,VMM 负责将客户物理内存映射到实际的机器内存上内存虚拟化机制内存虚拟化机制客户操作系统和 VMM 分别维护从虚拟内存到物理内存的映射和从物理内存到机器内存的映射,共两级映射。进一步,也应该支持 MMU 虚拟化,并且对客户操作系统透明, 客户操作系统仍旧负责从虚拟地址到虚拟机的物理内存地址
22、的映射,但是客户操作系统并不能直接访问实际硬件内存, VMM 负责将客户物理内存映射到实际的机器内存上。8、I/O 虚拟化实现方式I/O 虚拟化包括管理虚拟设备和共享的物理硬件之间 I/O 请求的路由选择.实现 I/O 虚拟化有三种方式:全设备模拟全设备模拟: :一个设备的所有功能或总线结构(如设备枚举、识别、中断和DMA)都可以在软件中复制。半虚拟化:半虚拟化:是 Xen 所采用的方法,是广为熟知的分离式驱动模型,由前端驱动和后端驱动两部分构成。前端驱动运行在DomainU 中,而后端驱动运行在Domain 0 中,它们通过一块共享内存交互。直接直接 I/OI/O 虚拟化:虚拟化: 让虚拟机
23、直接访问设备硬件。 它能获得近乎本地的性能,并且 CPU 开销不高。内存虚拟化的页表机制内存虚拟化的页表机制由于客户操作系统的每个页表在VMM中都有一个独立页表与之对应, VMM中的页表称为影子页表 .嵌套的页表在虚拟内存系统中额外增加了一层映射。MMU 负责由操作系统定义的虚拟地址到物理地址的转换。 然后, 使用 Hypervisor定义的其他页表将物理内存地址转换为机器地址 .VMware 使用影子页表进行虚拟内存到机器内存的地址转换。 当客户操作系统修改了虚拟内存到物理内存的映射时,VMM 会及时更新影子页表。4. 4.内存迁移的实现功能内存迁移的实现功能内存的迁移实现的功能内存的迁移实
24、现的功能内存迁移在虚拟机迁移时很重要,因此内存迁移一个重要的功能是实现虚拟机的迁移,可以将虚拟机的内存实例从一个物理节点迁移至另一个物理节点5. 5.云平台处理的应用类型云平台处理的应用类型6. 6.互联网配置云系统的方式(私有云,互联网配置云系统的方式(私有云,) )公有云、私有云、混合云7. 7.单一系统镜像包括哪些内容单一系统镜像包括哪些内容(1 1)单系统镜像特征:单一系统)单系统镜像特征:单一系统 、单一控制、对称性、位置透明性、单一控制、对称性、位置透明性(2 2)单系统镜像)单系统镜像 (SSISSI) 包括单一入口、包括单一入口、 单文件层次、单文件层次、 单一单一 I/OI/
25、O 空间、空间、单一网络机制、单一网络机制、单一控制点、单一控制点、单一作业管理系统、单一作业管理系统、单一内存空间和单单一内存空间和单一进程空间。一进程空间。(3 3)SSISSI 额外特征:额外特征:单一作业管理系统单一作业管理系统所有集群作业能够由任意节点提交到单一作业管理系统.单一用户接口单一用户接口用户通过单一图形界面使用集群。单一进程空间单一进程空间各节点的所有用户进程形成单一进程空间,并且共享统一进程认证机制.SSISSI 集群化的中间件集群化的中间件在集群应用的三个层次上,中间件支持各种 SSI 特征。管理级管理级该级处理用户应用程序,并且提供作业管理系统.编程级编程级该级提供
26、单一文件层次(NFS、xFS、AFS、Proxy)和分布式共享内存实现级实现级该级支持单一进程空间、检查点机制、进程迁移和单一 I/O 空间。8. 8.虚拟化软件层的基本功能虚拟化软件层的基本功能虚拟化实现的层次虚拟化实现的层次引入虚拟化后,不同用户应用程序由自身的操作系统(即客户操作系统)管理,并且那些客户操作系统可以独立于主机操作系统同时运行在同一个硬件上 ,这通常是通过新添加一个称为虚拟化层的软件来完成,该虚拟化层虚拟化层称为 hypervisor 或虚拟机监视器(VirtualMachineMonitor,VMM)指令集体系结构级指令集体系结构级:代码解释和动态二进制翻译硬件抽象级硬件
27、抽象级:虚拟化一个计算机硬件资源操作系统级操作系统级:在单一物理服务器上创建隔离的容器和操作系统实例库支持级库支持级:库接口的虚拟化应用程序级应用程序级:进程级虚拟化、高级语言(HighLevelLanguage,HLL)虚拟机虚拟化软件层的主要功能是将一个主机的物理硬件虚拟化为可被各虚拟机互斥使用的虚拟资源.(这可以在不同的操作层实现)虚拟化软件通过在计算机系统的不同层插入虚拟化层来创建虚拟机抽象 .通常的虚拟化层包括指令集体系结构(Instruction Set Architecture,ISA)级、硬件抽象级、操作系统级、库支持级和应用程序级编程题编程题Word count传统串行处理方
28、式/没有读取文件/* To change this template, choose Tools Templates and open the template in the editor。*/package wordcount;import java。util。;/* author PANJINTIAN/public class WordCount /* param args the command line arguments*/public static void main(String args) Stringtext=new String”hello world”,”hello ev
29、ery one”,say hello to every one in the world”;Hashtable ht=new Hashtable();for(int i=0;i3;i+)StringTokenizer st=new StringTokenizer(texti );while(st。hasMoreTokens())String word=st。nextToken();if(!ht。containsKey(word))ht.put(word, new Integer(1) );elseint wc=((Integer)ht。get(word)) 。intValue()+1;ht.p
30、ut(word, new Integer(wc)) ;for(Iterator itr=ht.keySet().iterator();itr.hasNext() ;)String word=(String)itr。next() ;System.out.print(word+: ”+(Integer)ht.get(word)+” ;”);读取文件并且打印数量最多的前三个:/* To change this template, choose Tools Templates and open the template in the editor.*/package wordcount;import
31、java。util。;import java。io。*;/* author PANJINTIAN*/public class WordCount /* param args the command line arguments/public static void main(String args) FileReader fr=null;tryfr=new FileReader(”C:UsersPANJINTIANDesktopwordCount.txt ”);catch(IOException e)System.out。println(”can not read the file。 ”);B
32、ufferedReader bf=new BufferedReader(fr) ;Hashtable ht=new Hashtable();String s=null;trywhile(s=bf。readLine())!=null)StringTokenizer st=new StringTokenizer (s);while(st.hasMoreTokens()String word=st。nextToken() ;if(!ht。containsKey(word))ht。put(word, new Integer(1));elseint wc=((Integer)ht.get(word) )
33、 。intValue()+1;ht.put(word, new Integer(wc));int max=0;int fmax=new int3 ;String fword=new String3;int number;String key=null;String Mword=null;for(int i=0;i3;i+)for(Iterator itr=ht.keySet() 。iterator();itr.hasNext();)key=(String)itr。next();number=(Integer)ht.get(key);if(number=max)max=number;Mword=
34、key;fmaxi=max;fwordi=Mword;ht。remove(Mword) ;max=0;for(int i=0;i3;i+)System.out.println(fwordi+: ”+fmaxi);catch(IOException e)System.out。println(error happens in reading file” );从文件读入文本并将结果写入另外一个文件中/* To change this template, choose Tools Templates and open the template in the editor。*/package wordc
35、ount;import java。util.;import java.io.*;/* author PANJINTIAN/public class WordCount /* param args the command line arguments*/public static void main(String args) FileReader fr=null;FileWriter fw=null;String key=null;String value=null;String record=null;tryfr=new FileReader(”C:UsersPANJINTIANDesktop
36、wordCount。txt);catch(IOException e)System。out.println(can not read the file.”);tryfw=new FileWriter(”C:UsersPANJINTIANDesktopresult.txt ,true) ;catch(IOException e)System。out.println(could not open the file);BufferedReader bf=new BufferedReader(fr);BufferedWriter bw=new BufferedWriter(fw ) ;Hashtabl
37、e ht=new Hashtable() ;String s=null;trywhile(s=bf。readLine()) !=null)StringTokenizer st=new StringTokenizer(s) ;while(st.hasMoreTokens())String word=st。nextToken() ;if(!ht.containsKey(word)ht。put(word, new Integer(1));elseint wc=((Integer)ht.get(word)。intValue()+1;ht.put(word, new Integer(wc) );for(
38、Iterator itr=ht.keySet() 。iterator();itr.hasNext();)key=(String)itr。next();value=ht。get(key)。toString();record=key+value;bw.write(record);bw。newLine();bw。flush() ;bf。close();bw.close();fr。close();fw.close();catch(IOException e)System.out。println(”error happens in reading file);并行运算:import java。io.IO
39、Exception ;import java。util.String Tokenizer;import org.apache。hadoop.conf。Configurationimport org。apache.hadoop.fs。Path;import org。apache.hadoop.io.IntWritable;import org.apache。hadoop。io。Text;import org。apache。hadoop。mapreduce。Job;import org.apache。hadoop。mapreduce.Mapper;import org.apache。hadoop.
40、mapreduce.Reducer;import org。apache。hadoop。mapreduce。lib.input。FileInputFormat;import org。apache.hadoop.mapreduce。lib.output.FileOutputFormat;import org.apache。hadoop.util.GenericOptionsParser;public class WordCountpublic static class TokenizerMapper extends MapperObject,Text,Text,IntWritable privat
41、e final static IntWritable one=new IntWritable(1 );/建立一个 int 变量 one,初值为 1private Text word=new Text();/ 建立一个 String 变量 Word,用于接收传入的文本publicvoidmap(Objectkey,Textvalue , Contextcontext)throwsIOException ,InterruptedException/实现 map 函数StringTokenizer itr=new StringTokenizer(value。toString();/将输入的文本转换为
42、字符串类型while(itr。hasMoreTokens()word.set(itr.nextToken();/word(Text )对象赋值context。write(word,one);/将分析结果对写入public static class IntSumReducer extends Reducer private IntWritable result=new IntWritable() ;public void reduce(Text key,Iterable IntWritable values, Context context)throws IOException,Interrup
43、tedExceptionint sum=0;for(IntWritable val:values)sum=sum+val.get() ;result.set(sum);context。write(key,result);public void main(String args)throws ExceptionConfiguration conf=new Configuration();StringotherArgs=new GenericOptionsParser(conf,args)。getRemainingArgs();if(otherArgs。length!=2)System。err。p
44、rintln(“Usage:wordcountin out);System。exit(2);Job job=new Job(conf,”word count”);/建立新 Jobjob.setJarByClass(WordCount.class);/注册类job。setMapperClass(TokenizerMapper.class) ;job.setCombinerClass(IntSumReducer。class);job。setReducerClass(IntSumReducer。class);job。setOutputKeyClass(Text。class) ;job。setOutputValueClass(IntWritable.class) ;FileInputFormat.addInputPath(job,new Path(otherArgs0)) ;FileOutputFormat.setOutputPath(job,new Path(otherArgs1);System.exit(job.waitForCompletion(true)?0:1);/主方法等待任务完成