技术分享:使用Hadoop进行分布式并行编程

在学习Hadoop的过程中,你可能会遇到用Hadoop进行分布式并行编程的问题,本节就向大家介绍一下用Hadoop进行分布式并行编程的方法,希望通过本节的介绍大家能够对Hadoop有新的认识。

用Hadoop进行分布式并行编程

Hadoop简介

Hadoop是一个开源的可运行于大规模集群上的分布式并行编程框架,由于分布式存储对于分布式编程来说是必不可少的,这个框架中还包含了一个分布式文件系统HDFS(HadoopDistributedFileSystem)。

也许到目前为止,Hadoop还不是那么广为人知,其最新的版本号也仅仅是0.16,距离1.0似乎都还有很长的一段距离,但提及Hadoop一脉相承的另外两个开源项目Nutch和Lucene(三者的创始人都是DougCutting),那绝对是大名鼎鼎。Lucene是一个用Java开发的开源高性能全文检索工具包,它不是一个完整的应用程序,而是一套简单易用的API。在全世界范围内,已有无数的软件系统,Web网站基于Lucene实现了全文检索功能,后来DougCutting又开创了第一个开源的Web搜索引擎(http://www.nutch.org)Nutch,它在Lucene的基础上增加了网络爬虫和一些和Web相关的功能,一些解析各类文档格式的插件等,此外,Nutch中还包含了一个分布式文件系统用于存储数据。从Nutch0.8.0版本之后,DougCutting把Nutch中的分布式文件系统以及实现MapReduce算法的代码独立出来形成了一个新的开源项Hadoop。Nutch也演化为基于Lucene全文检索以及Hadoop分布式计算平台的一个开源搜索引擎。


基于Hadoop,你可以轻松地编写可处理海量数据的分布式并行程序,并将其运行于由成百上千个结点组成的大规模计算机集群上。从目前的情况来看,Hadoop注定会有一个辉煌的未来:"云计算"是目前灸手可热的技术名词,全球各大IT公司都在投资和推广这种新一代的计算模式,而Hadoop又被其中几家主要的公司用作其"云计算"环境中的重要基础软件,如:雅虎正在借助Hadoop开源平台的力量对抗Google,除了资助Hadoop开发团队外,还在开发基于Hadoop的开源项目Pig,这是一个专注于海量数据集分析的分布式计算程序。Amazon公司基于Hadoop推出了AmazonS3(AmazonSimpleStorageService),提供可靠,快速,可扩展的网络存储服务,以及一个商用的云计算平台AmazonEC2(AmazonElasticComputeCloud)。在IBM公司的云计算项目--"蓝云计划"中,Hadoop也是其中重要的基础软件。Google正在跟IBM合作,共同推广基于Hadoop的云计算。


迎接编程方式的变革

在摩尔定律的作用下,以前程序员根本不用考虑计算机的性能会跟不上软件的发展,因为约每隔18个月,CPU的主频就会增加一倍,性能也将提升一倍,软件根本不用做任何改变,就可以享受免费的性能提升。然而,由于晶体管电路已经逐渐接近其物理上的性能极限,摩尔定律在2005年左右开始失效了,人类再也不能期待单个CPU的速度每隔18个月就翻一倍,为我们提供越来越快的计算性能。Intel,AMD,IBM等芯片厂商开始从多核这个角度来挖掘CPU的性能潜力,多核时代以及互联网时代的到来,将使软件编程方式发生重大变革,基于多核的多线程并发编程以及基于大规模计算机集群的分布式并行编程是将来软件性能提升的主要途径。

许多人认为这种编程方式的重大变化将带来一次软件的并发危机,因为我们传统的软件方式基本上是单指令单数据流的顺序执行,这种顺序执行十分符合人类的思考习惯,却与并发并行编程格格不入。基于集群的分布式并行编程能够让软件与数据同时运行在连成一个网络的许多台计算机上,这里的每一台计算机均可以是一台普通的PC机。这样的分布式并行环境的最大优点是可以很容易的通过增加计算机来扩充新的计算结点,并由此获得不可思议的海量计算能力,同时又具有相当强的容错能力,一批计算结点失效也不会影响计算的正常进行以及结果的正确性。Google就是这么做的,他们使用了叫做MapReduce的并行编程模型进行分布式并行编程,运行在叫做GFS(GoogleFileSystem)的分布式文件系统上,为全球亿万用户提供搜索服务。

相关推荐