Sunday, September 19, 2010

緣份有真係好?

一年後再次相見...…感覺好怪....…我太避世啦..…
Published with Blogger-droid v1.5.9

Wednesday, September 8, 2010

层层揭开软件测试的迷局 测试工程师该何去何从?

层层揭开软件测试的迷局 测试工程师该何去何从?

导读:一边是人才缺口几十万,测试工程师招聘、培训红红火火;一边是看不清职业发展、“成功没我份,失败全我错”的测试岗位从业者,软件测试工程师该何去何从?

一边是软件开发、测试谨小慎微,一边是系统宕机、瘫痪事故频发。供应商、用户、第三方应如何做好测试管理,提升软件质量?

中国软件测试市场究竟有多大?互相矛盾的现象让人难以看明白。

借助对1066家企业IT应用质量的一手调查,对10位业内人士的独家采访,我们来分析如何细化测试岗位和行业的专业分工、提升复合的测试技能、化解测试与开发亦敌亦友难题、消除测试考核评估的掣肘……

让我们一层层揭开软件测试的迷局。

2010 年世界杯足球赛期间,Twitter的多次大规模宕机事件让用户无法忍受;2007年,奥运票务系统因无法承受瞬间每小时800万次的流量而宕机;2006年,英国伦敦希思罗机场航站楼因应用缺陷致行李处理系统故障,积压行李达万件;近期,国内某银行核心业务系统发生故障,导致该银行包括柜台、网银、ATM机在内的所有渠道的业务停止4.5小时……

重开发、轻测试,让软件系统故障频发。

为什么经过测试的软件系统还是会出现问题?测试与业务有着怎样错综复杂的关系?软件测试的瓶颈究竟是什么?国内软件测试将呈现怎样的发展趋势?

借助中国测试平台网对1066家企业的一手调查,以及中国计算机报记者对10位业内人士的独家采访,让我们层层揭开软件测试的迷局。

测试软件不能承受之轻

捷克作家米兰·昆德拉告诉我们,生命中有太多事情看似轻如鸿毛,却让人难以承受。在IT应用中,软件测试就是如此。

2007 年10月30日,奥运票务系统因无法承受瞬间达到每小时800万次的流量而宕机,这也许是美国票务系统提供商史上最没面子的时刻。这家公司是2004年雅典奥运会票务独家供应商,其系统技术已经经过市场的考验。据说在2008年奥运会的票务系统中,他们已经提高了峰值流量的预设值,可是没想到还是估计不足,才出了大问题。

2009年11月22日,eBay网站长时间宕机,造成卖家蒙受相当于当天销售额80%的损失。已经不止一次的宕机事件让eBayCEO脸面无光,不得不对eBay的系统负载能力重视起来。

另据业内人士透露,拥有600多家分店、18家配送中心,每天向全球180万客户提供种类繁多的设备维护、修理和运作产品的工业品分销商固安捷(Grainger)曾在SAP系统实施过程中,由于系统功能性故障损失了2300万美元,使其无法完成当季收入指标。

“测试时候不把好关,后期上线后应用就会出现大的问题。”清华大学教授、中国软件行业协会系统与软件过程改进分会常务副会长郑人杰在接受中国计算机报记者采访时表示,近20年来他一直在关注软件质量的问题。

通过剪报等方式,郑人杰收集了这方面的诸多新闻素材,其中包括:上世纪90年代海湾战争时期美国部队由于导弹系统故障炸了自己军营;2003年美国出现史上最严重的大面积停电,影响1/4国土面积的居民;2008年英国航站楼系统故障,导致15000件行李积压;2006年ATM机故障,造成轰动一时的许霆案;近期不断出现的ATM“双倍吐钱”等问题还不断出现。

相信这些系统上线前是经过了测试的。那么,为什么经过测试的系统还是会出现问题呢?

“业务需求不清楚,以及现有软件测试能力有限,导致了上述问题的发生。”中国惠普企业业务集团软件及解决方案部技术总监于志伟在接受记者采访时表示,软件测试已经不只是一个IT问题,它和业务息息相关。

软件质量问题不只造成了上述有特别恶劣影响事件出现,中国软件评测中心金融电信测试部总经理罗文兵向《中国计算机报》记者介绍说,众多项目的上马时间一推再推,以及软件产品面临层出不穷的更新,背后都是软件质量的问题,而软件测试问题是矛头所指。

现在,软件测试已经不是传统意义上软件产品交付前单一的“找错”过程,而是软件正常交付、应用提升的一大利器。它贯穿于软件生产过程的始终,是一个科学的质量控制过程。从一个软件项目的需求调研、设计、编码、验收,直到运行维护,整个过程都需要有软件测试工程师的介入和把关。

罗文兵介绍说,根据执行体的不同,目前他们把测试分为三类:第一方测试,指的是软件开发商、系统集成商内部的测试;第二方测试,指的是用户单位的测试,即用户委托他人开发了一套系统或者购买了软件产品后,需要对系统或产品进行验收测试;第三方测试,指的是独立的机构或者单位进行的测试,像中国软件评测中心这样的第三方检测实验室,以及惠普等IT巨头,都有独立测试部门为客户提供测试服务。测试外包本质上等同于第一方测试,因为整个测试的要求和管理都是由第一方负责的。

从被测内容角度看,软件测试涵盖了单元测试、集成测试、系统测试等不同内容。罗文兵介绍,从软件生命周期来看,单元测试、集成测试更偏重于代码级测试,一般主要是由第一方测试来实现,少量依靠第三方。用户测试和第三方测试做的更多的是系统级测试,主要是从业务执行角度,来看软件能不能完成业务要求。系统测试层次更高,全面的系统测试包括系统的功能测试、性能测试、安全测试等。

“软件测试的重要性不言而喻。微软做Windows产品开发时,测试人员与开发人员的比例是1∶1,甚至达到了2∶1。他们边开发边测试,测试是贯穿整个开发过程的。”某IT领域资深人士对记者说。

罗文兵强调,现在对于电子商务、金融、电信等行业企业而言,系统和业务是一体的,因为其信息化依赖程度很高,信息系统的质量直接决定着经营能力,它们的产品创新都是依赖后台的信息系统来实现出来。如果它们的软件测试做得不好,对业务的影响是显而易见的。

那么,测试工作怎么才能更贴近业务?细化行业分工和提升测试能力是两条关键的途径。

三方测试一个都不能少

“第一方、第二方、第三方,三方测试都是必要的,一个都不能少。”罗文兵说,“软件测试链条中的各个角色,必须各司其职:软件开发商和系统集成商必须自己做好严格的测试,为用户提供高质量、可信的软件产品;用户要根据自己的需求,做好自开发和所购买产品的验收测试;第三方测试机构则更是要一丝不苟地为第一方的产品质量把关,让用户方放心。”

阜外心血管病医院信息中心主任赵韡对此有相同的看法。他认为,软件测试应该做到谁的东西谁负责:软件供应商应该做好测试,保证自己的产品质量;阜外心血管病医院也要根据自身的需求,做好自行开发系统以及所购买产品和系统的测试。赵韡介绍说,阜外心血管病医院有80多个系统,有自己开发的,也有直接购买的标准产品,各系统之间需要进行很好的集成。赵韡指出,金融、电信等行业因为拥有巨大的并发用户数和数据量,实时性要求很高,而对测试环境要求非常高,但对于软件测试而言,医院属于小行业,因此测试环境的要求也就不那么高。他介绍说,阜外心血管病医院信息中心的测试部门有4人,他们应用的基本是虚拟机,甚至用一些旧机器,就可以搭出测试环境,完成产品、系统的测试。虽然,对测试环境要求不高,但医院的软件测试却有自己的特点,那就是要求测试人员必须对医院业务非常熟悉。鉴于目前第三方测试机构的行业积累还比较低,赵韡认为,目前医院还是自己来测试比较靠谱。

某金融机构的测试工程师朱倩在接受记者采访时表示,她所在公司的主要业务是从纽交所等国外金融机构购买金融信息,提供给国内的一些诸如像大智慧这样的金融市场行情软件提供商。他们每天要保障海量金融数据的准确性,必须做好数据库系统的测试,因为行情软件提供商也要用他们的软件来进行数据分析和发布。“我们必须不断地测试,以保障我们的数据库数据的准确性。”朱倩说。

对于任何类型的测试执行主体而言,无论是产品级还是系统级的测试,都是需要衡量成本收益的。测试团队的建立、测试环境的搭建、测试工具的选择、测试过程的管理、外包与否,企业都要根据自己需求和实际情况来衡量后再做决定。

北京中原地产信息技术部经理王雨在接受记者采访时表示,他们现在没有独立的测试部门,测试基本是由开发人员与业务人员组队完成,或者是通过内部用户小范围试用来完成测试,“如有需要,我们会考虑将软件测试外包给第三方,因为这样对我们来说投入产出最合适。”

于志伟介绍,软件测试与开发同样重要,必须从测试需求、测试工具、测试环境等方面提升软件测试的专业性,更好地保证软件质量。另外,于志伟强调,测试具有非常强的行业特征,比如同样是客户关系管理系统,电信行业和金融行业测试的重点是不一样的。因此,于伟认为,第三方测试将走向更独立、更专业、更细化的行业分工是必然的趋势。

罗文兵也强调,第三方测试机构必须专注于行业。“与软件开发一个道理,做金融开发的集成商是相对固定的,不会随意跳转行业,因为只有通过更多的积累才能对行业需求了解得更透彻。中国软件评测中心之所以成立金融电信测试部,就是顺应这种市场需求。这样,我们天天做金融或者电信业务的测试,会更加熟悉被测软件的业务特点。如果对业务的了解不到位,就会出现漏测等问题,会最终影响业务的正常开展。”罗文兵说。

中国测试平台网通过电话和网络对1066家企业IT应用质量的调查显示:企业其研发人员和测试人员的比例远高于国外的1:1,对测试工程师进行测试技能培训是目前企业测试工作最需加强的,而对测试管理的各方面内容都需要加强。

高端人才不只是找BUG高手

葛优在《天下无贼》里那句话说得好,“21世纪最缺的是什么?人才!”

君不见“我国软件测试人才缺口已达20万、30万、40万”之类的新闻频频见于报端,各类测试工程师培训机构如雨后春笋般冒出,测试工程师已经成为各大招聘网站中最热门、活跃的职业之一。

测试工程师的进入门槛看似很低,实际上要做一名合格的、高层次的测试工程师并非易事。而目前国内的测试领域最缺的就是高端测试人才。

那么,到底什么是高端的测试人才呢?

于志伟用围棋中的段位形象地向记者做了说明。“10个测试工程师中有5个可能是业余级别的最高段位。他们不是专业级别的。”于志伟进一步描述说,“类似业余级别的一般测试人员更关注‘测’,对测试工具运用得淋漓尽致。如果发现了BUG,该测试人员会兴高采烈地跟开发人员说有一个BUG,但是开发人员也不知道应该怎么修改处理。为什么呢?因为该测试人员有本事把BUG找出来,但对BUG的描述不到位,也就是不能告诉开发人员这个BUG具体是什么,究竟是什么原因造成的等细节。他们不能提供一个合适的路径让开发人员直接找到BUG。开发人员还得来回测才能确定BUG。可见,这样的测试人员只是一个找BUG的高手,但是他不能解决问题。”

“要做好软件测试并不容易。软件测试是一个终生的职业,越老越吃香。”郑人杰认为,行业业务经验的积累和专业测试能力的提升,是成就一个出色的软件测试工程师的两个同等重要的条件。

于志伟认为,目前,软件测试领域最受关注的都是工具的应用等具体测试问题,而高端测试人才更应该关注如何做好从测试需求、测试计划、测试流程、测试执行,到将测试结果很好地展现在报告上,进而追踪问题,并最终解决问题的全过程。

同时,高端测试人才还要有更先进的理念,即不只是关注测试,而是要更加关注软件质量。“也许有时候及时发现了BUG也不应改动,因为它对客户体验没有影响,而改动后会带来更大的影响,并增加成本。但怎么判定这个BUG该不该动呢?现在市场上缺的就是能够做出正确判断的高端测试人才。他们具有先进的理念,掌握科学的方法论。”于志伟分析说。

怎样才能培养出大量的高端测试人才呢?

通过第三方的测试平台,把先进测试的理念、更专业的测试方法和工具传达给喜欢测试的fans(热衷者),让他们吸收更多的最佳实践,不断提升自身的测试技能,借此来实现对高端测试人才的培育和储备,这是中国惠普培育软件测试市场的一条尝试途径,也是它们与中国信息主管网合作建立中国测试平台网的初衷所在。

中国测试平台网

测试fans的资源池

中国测试平台网希望能够搭建一个针对测试fans的资源池,让他们能在这里发现、吸收软件测试的先进理念、知识、专家指导、工具技巧、实践经验、职业机会等各种资源。

“当前,信息化正在改变IT角色,IT已成为企业发展的重要支撑元素。企业在IT建设中,必须缩短开发周期,快速响应业务需求。然而,IT项目愈是‘短、平、快’,愈是容易在一定程度上降低系统的可靠性。IT链条的牢固程度取决于其最薄弱环节——软件测试的疏漏。”作为中国测试平台网项目负责人,中国信息主管网副总编杨春晖介绍,“当软件质量成为软件产业新的核心竞争力时,作为软件质量‘把门人’——软件测试人才自然成为企业争抢的稀缺资源。软件测试人才已成为2010年IT业就业的主力,其职业具有极大发展潜力。”

正是在这样的背景下,中国信息主管网联姻软件质量管理领域的龙头企业——中国惠普,共同建立了软件测试领域的专业技术网站——中国测试平台网。“中国测试平台网坚持以报道软件测试专业技术为核心,关注软件测试领域的前沿技术和管理思想,定期举办各种在线活动以推动软件测试相关领域的交流,力求为中国广大软件厂商、系统集成商、IT渠道,以及IT专家、测评专业人士、热心网友等提供一个软件测试、专家问询、交流沟通的在线互动平台。”杨春晖说。

“中国测试平台网也会为软件测试爱好者提供很多职业发展的机会。惠普现在就很需要高端的测试人才。”于志伟向记者透露。

除了用中国测试平台网这个平台网聚、培育软件测试人才,惠普也在逐渐向其大量的高端客户渗透软件测试的一些先进理念,以得到他们的认同并付诸实践,从而带动上下游的公司形成良好的市场环境,促进产业内软件测试工作的进步。

当记者提到现在由于企业没有成套考核体系来评估软件测试人员,所以没有足够动力推进软件测试工作更上一层楼时,于志伟笑了笑说:“这确实是目前大家迷茫的地方,大家都不知道软件测试的评估、考核该怎么做,但这也恰恰是体现惠普优势的地方。”

于志伟介绍说,惠普拥有先进的测试生命周期管理、应用生命周期管理的方法和最佳实践,并且在这个领域完成了很多成功项目,能够明确测试的定位、测试与开发的关系,知道哪些指标应该分给开发,明白不同的测试项目中这些指标应该怎么调整,从而帮助企业一步步走向更高水平的软件测试,或者更准确地说是保障软件质量。“这需要一个过程。要通过先进的理念和经验的积累,才能慢慢摸索出测试的考核、评估办法。”

中国惠普企业业务集团软件及解决方案部华东、华南售前经理,测试专家王慧慧向记者介绍了惠普的应用质量管理(AQM)的质量成熟度模型。王慧慧说,该模型不仅参考了已有IS09000、ITIL、CMM等行业标准,而且总结了惠普客户的实践经验,将企业软件质量保障情况从最基础的第一步到最高级的最后一步 CoE(CenterofExcellence),分为5个阶段,模型中涉及测试人员的素质,外界对测试人员的认可度,测试人员自身的定位,测试的组织架构、流程、绩效考核等制度问题,还涵盖了测试的先进方法。

“对用户而言,这个成熟度模型是其衡量自己软件测试水平的一个标杆。通过比对,并且在惠普的专家、产品和服务的帮助下,企业可以在现有状态的基础上一步一步提升,最终走向CoE。”王慧慧说,“这个模型不是静止的,而是在不断充实、改进中。每个用户在改进的投入、时间、步骤等方面都会不同。对于某一用户,惠普专家会为其做出评估,量身定制出一条适合用户自身情况的改进路径。”

记者手记

软件测试七大戒律

软件要控制人的思维,但思维是不可控的。这决定了没有BUG的软件是不存在的。“测试是要被终止的”,这是测试圈内一条原则性的定律,意思是说软件测试要适度,不能不问代价一测到底,过分追求没有BUG的完美软件。通过大量的采访,受到业内多位专家的启发,记者认为当前我国软件测试领域有七个趋势:

一、不只是为了测试,软件测试工作应有更高的定位,那就是提升软件质量。测试人员的工作目标不仅仅是找BUG,而是与开发人员、业务人员协作,以得到质量更高的软件。

二、对任何类型的执行主体而言,软件测试都是一项需要衡量投入产出、成本收益的工作,因此测试团队的建立、测试环境的搭建、测试工具的选择、测试过程的管理、外包与否,企业都要根据自己的需求衡量决定。

三、开发与测试是对立统一的整体,二者的工作内容和考核都不可能严格分开。企业可以从管理学和心理学的角度加强对测试管理的研究和实践。

四、测试工作的专业分工将更加细化,测试工程师岗位分工和测试机构行业分工趋势将显现。

五、当前我国测试人员的能力有待提升。我们除了需要熟练的找BUG高手,还需要能站到更高层面,从开发、测试的整体层面掌握测试需求、设计、流程和结果展现的人才。这要求测试工程师掌握更新的测试理念、更高的测试技能,具备更深的业务积累。

六、已经渗透至整个软件开发生命周期的测试管理工作是一个有机的整体,缺陷管理、测试需求管理、测试环境管理、测试用例管理、测试执行管理是组成木桶的木板,任何一块都不能短。

七、如何对测试工作进行考核评估是当前业界的一个难题,有待进一步研究、实践。

相关文章:

组织beta测试的十二个最高秘诀

微软发IE9第4平台预览版 测试版9月15日发布

Saturday, September 4, 2010

用 Linux 和 Apache Hadoop 进行云计算

IBM、Google、VMWare 和 Amazon 等公司已经开始提供云计算产品和战略。本文讲解如何使用 Apache Hadoop 构建一个 MapReduce 框架以建立 Hadoop 集群,以及如何创建在 Hadoop 上运行的示例 MapReduce 应用程序。还将讨论如何在云上设置耗费时间/磁盘的任务。

云计算简介

近来云计算越来越热门了,云计算已经被看作 IT 业的新趋势。云计算可以粗略地定义为使用自己环境之外的某一服务提供的可伸缩计算资源,并按使用量付费。可以通过 Internet 访问 “云” 中的任何资源,而不需要担心计算能力、带宽、存储、安全性和可靠性等问题。

本文简要介绍 Amazon EC2 这样的云计算平台,可以租借这种平台上的虚拟 Linux® 服务器;然后介绍开放源码 MapReduce 框架 Apache Hadoop,这个框架将构建在虚拟 Linux 服务器中以建立云计算框架。但是,Hadoop 不仅可以部署在任何厂商提供的 VM 上,还可以部署在物理机器上的一般 Linux OS 中。

在讨论 Apache Hadoop 之前,我们先简要介绍一下云计算系统的结构。图 1 显示云计算的各个层以及现有的一些服务。

基础设施即服务 (Infrastructure-as-a-Service,IaaS)是指以服务的形式租借基础设施(计算资源和存储)。IaaS 让用户可以租借计算机(即虚拟主机)或数据中心,可以指定特定的服务质量约束,比如能够运行某些操作系统和软件。Amazon EC2 在这些层中作为 IaaS,向用户提供虚拟的主机。平台即服务 (Platform-as-a-Service,PaaS)主要关注软件框架或服务,提供在基础设施中进行 “云” 计算所用的 API。Apache Hadoop 作为 PaaS,它构建在虚拟主机上,作为云计算平台。


图 1. 云计算的层和现有服务



云计算的各个层

Amazon EC2

Amazon EC2 是一个 Web 服务,它允许用户请求具有各种资源(CPU、磁盘、内存等)的虚拟机器。用户只需按使用的计算时间付费,其他事情全交给 Amazon 处理。

这些实例 (Amazon Machine Image,AMI) 基于 Linux,可以运行您需要的任何应用程序或软件。在从 Amazon 租借服务器之后,可以像对待物理服务器一样使用一般的 SSH 工具设置连接和维护服务器。

对 EC2 的详细介绍超出了本文的范围。

部署 Hadoop 云计算框架的最好方法是把它部署在 AMI 上,这样可以利用云资源,不需要考虑计算能力、带宽、存储等问题。但是,在本文的下一部分中,我们将在本地的 Linux 服务器 VMWare 映像中构建 Hadoop,因为 Hadoop 不仅适用于云解决方案。在此之前,我们先介绍一下 Apache Hadoop。

Apache Hadoop

Apache Hadoop 是一个软件框架(平台),它可以分布式地操纵大量数据。它于 2006 年出现,由 Google、Yahoo! 和 IBM 等公司支持。可以认为它是一种 PaaS 模型。

它的设计核心是 MapReduce 实现和 HDFS (Hadoop Distributed File System),它们源自 MapReduce(由一份 Google 文件引入)和 Google File System。

MapReduce

MapReduce 是 Google 引入的一个软件框架,它支持在计算机(即节点)集群上对大型数据集进行分布式计算。它由两个过程组成,映射(Map)和缩减(Reduce)。

在映射过程中,主节点接收输入,把输入分割为更小的子任务,然后把这些子任务分布到工作者节点。

工作者节点处理这些小任务,把结果返回给主节点。

然后,在缩减过程中,主节点把所有子任务的结果组合成输出,这就是原任务的结果。


图 2 说明 MapReduce 流程的概念。



MapReduce 的优点是它允许对映射和缩减操作进行分布式处理。因为每个映射操作都是独立的,所有映射都可以并行执行,这会减少总计算时间。

HDFS

对 HDFS 及其使用方法的完整介绍超出了本文的范围。

从最终用户的角度来看,HDFS 就像传统的文件系统一样。可以使用目录路径对文件执行 CRUD 操作。但是,由于分布式存储的性质,有 “NameNode” 和 “DataNode” 的概念,它们承担各自的责任。

NameNode 是 DataNode 的主节点。它在 HDFS 中提供元数据服务。元数据说明 DataNode 的文件映射。它还接收操作命令并决定哪些 DataNode 应该执行操作和复制。

DataNode 作为 HDFS 的存储块。它们还响应从 NameNode 接收的块创建、删除和复制命令。

JobTracker 和 TaskTracker

在提交应用程序时,应该提供包含在 HDFS 中的输入和输出目录。JobTracker 作为启动 MapReduce 应用程序的单一控制点,它决定应该创建多少个 TaskTracker 和子任务,然后把每个子任务分配给 TaskTracker。每个 TaskTracker 向 JobTracker 报告状态和完成后的任务。

通常,一个主节点作为 NameNode 和 JobTracker,从节点作为 DataNode 和 TaskTracker。Hadoop 集群的概念视图和 MapReduce 的流程见图 2。


图 2. Hadoop 集群的概念视图和 MapReduce 的流程



设置 Apache Hadoop

现在在 Linux VM 上设置 Hadoop 集群,然后就可以在 Hadoop 集群上运行 MapReduce 应用程序。

Apache Hadoop 支持三种部署模式:

* 单独模式:在默认情况下,Hadoop 以非分布的单独模式运行。这个模式适合应用程序调试。
* 伪分布模式:Hadoop 还可以以单节点的伪分布模式运行。在这种情况下,每个 Hadoop 守护进程作为单独的 Java™ 进程运行。
* 全分布模式:Hadoop 配置在不同的主机上,作为集群运行。

要想以单独或伪分布模式设置 Hadoop,请参考 Hadoop 的网站。在本文中,我们只讨论以全分布模式设置 Hadoop。

准备环境

在本文中,我们需要三台 GNU/Linux 服务器;一个作为主节点,另外两个作为从节点。

表 1. 服务器信息


每台机器都需要安装 Java SE 6 和 Hadoop 二进制代码。本文使用 Hadoop version 0.19.1。

还需要在每台机器上安装 SSH 并运行 sshd。SUSE 和 RedHat 等流行的 Linux 发行版在默认情况下已经安装了它们。

设置通信

更新 /etc/hosts 文件,确保这三台机器可以使用 IP 和主机名相互通信。

因为 Hadoop 主节点使用 SSH 与从节点通信,所以应该在主节点和从节点之间建立经过身份验证的无密码的 SSH 连接。在每台机器上执行以下命令,从而生成 RSA 公共和私有密钥。

ssh-keygen –t rsa


这会在 /root/.ssh 目录中生成 id_rsa.pub。重命名主节点的 id_rsa.pub(这里改名为 59_rsa.pub)并把它复制到从节点。然后执行以下命令,把主节点的公共密钥添加到从节点的已授权密钥中。

cat /root/.ssh/59_rsa.pub >> /root/.ssh/authorized_keys


现在尝试使用 SSH 连接从节点。应该可以成功连接,不需要提供密码。

设置主节点

把 Hadoop 设置为全分布模式需要配置 /conf/ 目录中的配置文件。

在 hadoop-site.xml 中配置 Hadoop 部署。这里的配置覆盖 hadoop-default.xml 中的配置。


表 2. 配置属性
属性 解释
fs.default.name NameNode URI
mapred.job.tracker JobTracker URI
dfs.replication 复制的数量
hadoop.tmp.dir 临时目录

hadoop-site.xml






fs.default.name
hdfs://9.30.210.159:9000


mapred.job.tracker
9.30.210.159:9001


dfs.replication
1


hadoop.tmp.dir
/root/hadoop/tmp/




通过配置 hadoop-env.sh 文件指定 JAVA_HOME。注释掉这一行并指定自己的 JAVA_HOME 目录。

export JAVA_HOME=


在 master 文件中添加主节点的 IP 地址。

9.30.210.159


在 slave 文件中添加从节点的 IP 地址。

9.30.210.160
9.30.210.161


设置从节点

把 hadoop-site.xml、hadoop-env.sh、masters 和 slaves 复制到每个从节点;可以使用 SCP 或其他复制工具。

对 HDFS 进行格式化

运行以下命令对 HDFS 分布式文件系统进行格式化。

/bin/hadoop namenode -format


检查 Hadoop 集群

现在,可以使用 bin/start-all.sh 启动 Hadoop 集群。命令输出指出主节点和从节点上的一些日志。检查这些日志,确认一切正常。如果弄乱了什么东西,可以格式化 HDFS 并清空 hadoop-site.xml 中指定的临时目录,然后重新启动。

访问以下 URL,确认主节点和从节点是正常的。

NameNode: http://9.30.210.159:50070
JobTracker: http://9.30.210.159:50030



现在,已经在云中设置了 Hadoop 集群,该运行 MapReduce 应用程序了。

创建 MapReduce 应用程序

MapReduce 应用程序必须具备 “映射” 和 “缩减” 的性质,也就是说任务或作业可以分割为小片段以进行并行处理。然后,可以缩减每个子任务的结果,得到原任务的结果。这种任务之一是网站关键字搜索。搜索和抓取任务可以分割为子任务并分配给从节点,然后在主节点上聚合所有结果并得到最终结果。

试用示例应用程序

Hadoop 附带一些用于测试的示例应用程序。其中之一是单词计数器,它统计某一单词在几个文件中出现的次数。通过运行这个应用程序检查 Hadoop 集群。

首先,把输入文件放在分布式文件系统中(conf/ 目录下面)。我们将统计单词在这些文件中出现的次数。

$ bin/hadoop fs –put conf input


然后,运行这个示例应用程序,以下命令统计以 “dfs” 开头的单词出现的次数。

$ bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'


命令的输出说明映射和缩减过程。

前两个命令会在 HDFS 中生成两个目录,“input” 和 “output”。可以使用以下命令列出它们。

$ bin/hadoop fs –ls


查看分布式文件系统中已经输出的文件。它以键-值对的形式列出以 “dfs*” 开头的单词出现的次数。

$ bin/hadoop fs -cat ouput/*


现在,访问 JobTracker 站点查看完成的作业日志。

创建 Log Analyzer MapReduce 应用程序

现在创建一个 Portal (IBM WebSphere® Portal v6.0) Log Analyzer 应用程序,它与 Hadoop 中的 WordCount 应用程序有许多共同点。这个分析程序搜索所有 Portal 的 SystemOut*.log 文件,显示在特定的时间段内应用程序在 Portal 上启动了多少次。

在 Portal 环境中,所有日志分割为 5MB 的片段,很适合由几个节点并行地分析。


hadoop.sample.PortalLogAnalyzer.java


public class PortalLogAnalyzer {

public static class Map extends MapReduceBase
implements Mapper {

private static String APP_START_TOKEN = "Application started:";
private Text application = new Text();

public void map(LongWritable key, Text value,
OutputCollector output,
Reporter reporter) throws IOException {

String line = value.toString();
if(line.indexOf(APP_START_TOKEN) > -1) {
int startIndex = line.indexOf(APP_START_TOKEN);
startIndex += APP_START_TOKEN.length();
String appName = line.substring(startIndex).trim();
application.set(appName);
output.collect(application, new IntWritable(1));
}
}
}

public static class Reduce extends MapReduceBase
implements Reducer {

public void reduce(Text key, Iterator values,
OutputCollector output,
Reporter reporter) throws IOException {

int sum = 0;
while(values.hasNext()) {
sum += values.next().get();
}
output.collect(key, new IntWritable(sum));
}
}

public static void main(String[] args) throws IOException {
JobConf jobConf = new JobConf(PortalLogAnalyzer.class);
jobConf.setJobName("Portal Log Analizer");
jobConf.setOutputKeyClass(Text.class);
jobConf.setOutputValueClass(IntWritable.class);
jobConf.setMapperClass(Map.class);
jobConf.setCombinerClass(Reduce.class);
jobConf.setReducerClass(Reduce.class);
jobConf.setInputFormat(TextInputFormat.class);
jobConf.setOutputFormat(TextOutputFormat.class);

FileInputFormat.setInputPaths(jobConf, new Path(args[0]));
FileOutputFormat.setOutputPath(jobConf, new Path(args[1]));
JobClient.runJob(jobConf);
}
}


对 Hadoop API 的完整解释请参见 Hadoop 网站上的 API 文档。这里只做简要说明。

Map 类实现映射功能,它搜索日志文件的每一行,寻找应用程序的名称。然后把应用程序名称以键-值对的形式放在输出集合中。

Reduce 类计算具有相同键(相同应用程序名称)的所有值的总和。因此,这个应用程序最终输出的键-值对表示每个应用程序在 Portal 上启动的次数。

Main 函数配置并运行 MapReduce 作业。

运行 PortalLogAnalyzer

首先,把这些 Java 代码复制到主节点并编译。把 Java 代码复制到/workspace 目录中。对它执行编译并存档在一个 Jar 文件中,后面 hadoop 命令将运行这个文件。

$ mkdir classes
$ javac –cp ../hadoop-0.19.1-core.jar –d classes
hadoop/sample/PortalLogAnalyzer.java
$ jar –cvf PortalLogAnalyzer.jar –C classes/ .


把 Portal 日志复制到 workspace/input 中。假设有多个日志文件,其中包含 2009 年 5 月的所有日志。把这些日志放到 HDFS 中。

$ bin/hadoop fs –put workspace/input input2


在运行 PortalLogAnalyzer 时,输出说明映射和缩减过程。

$ bin/hadoop jar workspace/PortalLogAnalizer.jar hadoop.sample.PortalLogAnalizer input2
output2


图 3. 任务的输出


$ bin/hadoop jar workspace/PortalLogAnalizer.jar hadoop.sample.PortalLogAnalizer input2 output2

应用程序执行完之后,输出应该与图 4 相似。

$ bin/hadoop fs –cat output2/*



图 4. 部分输出


$ bin/hadoop fs –cat output2/*

在访问 JobTracker 站点时,会看到另一个完成的作业。注意图 5 中的最后一行。


图 5. 完成的作业


另一个完成的作业

Friday, September 3, 2010

"Chrome Window 1","JTrac","http://localhost:8080/systemscenter/app/item/ESP127BE-595/"
"Chrome Window 1","svn deploy website - Google 搜尋","http://www.google.com.hk/search?q=svn+deploy+website&hl=zh-TW&ei=gsV9TOf8OoWsvgOy5tmgAg&start=10&sa=N"
"Chrome Window 1","SSWI — Deploying web apps with SVN","http://chrisjdavis.org/deploying-with-svn"
"Chrome Window 1","SVN Website Development and Deployment Solution - Stack Overflow","http://stackoverflow.com/questions/1039741/svn-website-development-and-deployment-solution"
"Chrome Window 1","Capistrano","http://www.capify.org/index.php/Capistrano"
"Chrome Window 1","Automating deployment with Subversion","http://arstechnica.com/open-source/news/2005/04/linux-20050406.ars"
"Chrome Window 1","Pragmatic Programming Techniques: NOSQL Patterns","http://horicky.blogspot.com/2009/11/nosql-patterns.html"
"Chrome Window 1","Pragmatic Programming Techniques: NoSQL GraphDB","http://horicky.blogspot.com/2010/02/nosql-graphdb.html"
"Chrome Window 1","Pragmatic Programming Techniques: NOSQL Patterns","http://horicky.blogspot.com/2009/11/nosql-patterns.html"
"Chrome Window 1","Apache CouchDB: Introduction","http://couchdb.apache.org/docs/intro.html"
"Chrome Window 1","Apache CouchDB: Technical Overview","http://couchdb.apache.org/docs/overview.html"