您的位置:首页 > 运维架构

分布式计算开源框架Hadoop介绍

2012-04-15 09:58 435 查看

分布式计算开源框架Hadoop介绍

作者 岑文初
发布于 2008年8月4日
领域 企业架构,
运维 & 基础架构,
架构 & 设计,
语言 & 开发主题 Java ,
集群与缓存 ,
语言 ,
网格计算 ,
编程 ,
性能和可伸缩性 ,
架构
, Hadoop

分享到



── 分布式计算开源框架Hadoop入门实践(一)

相关厂商内容

Visual Studio 11 Beta 和 .NET Framework 4.5 Beta版免费下载中!

猛买网张磊:基于又拍云存储解决静态文件存储问题


在SIP项目设计的过程中,对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计,在我从前写的文章《Tiger Concurrent Practice --日志分析并行分解设计与实现》中有所提到。但是由于统计的内容暂时还是十分简单,所以就采用Memcache作为计数器,结合MySQL就完成了访问控制以及统计的工作。然而未来,对于海量日志分析的工作,还是需要有所准备。现在最火的技术词汇莫过于“云计算”,在Open API日益盛行的今天,互联网应用的数据将会越来越有价值,如何去分析这些数据,挖掘其内在价值,就需要分布式计算来支撑海量数据的分析工作。

回过头来看,早先那种多线程,多任务分解的日志分析设计,其实是分布式计算的一个单机版缩略,如何将这种单机的工作进行分拆,变成协同工作的集群,其实就是分布式计算框架设计所涉及的。在去年参加BEA大会的时候,BEA和VMWare合作采用虚拟机来构建集群,无非就是希望使得计算机硬件能够类似于应用程序中资源池的资源,使用者无需关心资源的分配情况,从而最大化了硬件资源的使用价值。分布式计算也是如此,具体的计算任务交由哪一台机器执行,执行后由谁来汇总,这都由分布式框架的Master来抉择,而使用者只需简单地将待分析内容提供给分布式计算系统作为输入,就可以得到分布式计算后的结果。

Hadoop是Apache开源组织的一个分布式计算开源框架,在很多大型网站上都已经得到了应用,如亚马逊、Facebook和Yahoo等等。对于我来说,最近的一个使用点就是服务集成平台的日志分析。服务集成平台的日志量将会很大,而这也正好符合了分布式计算的适用场景(日志分析和索引建立就是两大应用场景)。

当前没有正式确定使用,所以也是自己业余摸索,后续所写的相关内容,都是一个新手的学习过程,难免会有一些错误,只是希望记录下来可以分享给更多志同道合的朋友。

什么是Hadoop?

搞什么东西之前,第一步是要知道What(是什么),然后是Why(为什么),最后才是How(怎么做)。但很多开发的朋友在做了多年项目以后,都习惯是先How,然后What,最后才是Why,这样只会让自己变得浮躁,同时往往会将技术误用于不适合的场景。

Hadoop框架中最核心的设计就是:MapReduce和HDFS。MapReduce的思想是由Google的一篇论文所提及而被广为流传的,简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算存储提供了底层支持。

MapReduce从它名字上来看就大致可以看出个缘由,两个动词Map和Reduce,“Map(展开)”就是将一个任务分解成为多个任务,“Reduce”就是将分解后多任务处理的结果汇总起来,得出最后的分析结果。这不是什么新思想,其实在前面提到的多线程,多任务的设计就可以找到这种思想的影子。不论是现实社会,还是在程序设计中,一项工作往往可以被拆分成为多个任务,任务之间的关系可以分为两种:一种是不相关的任务,可以并行执行;另一种是任务之间有相互的依赖,先后顺序不能够颠倒,这类任务是无法并行处理的。回到大学时期,教授上课时让大家去分析关键路径,无非就是找最省时的任务分解执行方式。在分布式系统中,机器集群就可以看作硬件资源池,将并行的任务拆分,然后交由每一个空闲机器资源去处理,能够极大地提高计算效率,同时这种资源无关性,对于计算集群的扩展无疑提供了最好的设计保证。(其实我一直认为Hadoop的卡通图标不应该是一个小象,应该是蚂蚁,分布式计算就好比蚂蚁吃大象,廉价的机器群可以匹敌任何高性能的计算机,纵向扩展的曲线始终敌不过横向扩展的斜线)。任务分解处理以后,那就需要将处理以后的结果再汇总起来,这就是Reduce要做的工作。



图1:MapReduce结构示意图
上图就是MapReduce大致的结构图,在Map前还可能会对输入的数据有Split(分割)的过程,保证任务并行效率,在Map之后还会有Shuffle(混合)的过程,对于提高Reduce的效率以及减小数据传输的压力有很大的帮助。后面会具体提及这些部分的细节。

HDFS是分布式计算的存储基石,Hadoop的分布式文件系统和其他分布式文件系统有很多类似的特质。分布式文件系统基本的几个特点:

对于整个集群有单一的命名空间。
数据一致性。适合一次写入多次读取的模型,客户端在文件没有被成功创建之前无法看到文件存在。
文件会被分割成多个文件块,每个文件块被分配存储到数据节点上,而且根据配置会由复制文件块来保证数据的安全性。



图2:HDFS结构示意图
上图中展现了整个HDFS三个重要角色:NameNode、DataNode和Client。NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。NameNode会将文件系统的Meta-data存储在内存中,这些信息主要包括了文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等。DataNode是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的Meta-data,同时周期性地将所有存在的Block信息发送给NameNode。Client就是需要获取分布式文件系统文件的应用程序。这里通过三个操作来说明他们之间的交互关系。

文件写入:

Client向NameNode发起文件写入的请求。
NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。
Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。

文件读取:

Client向NameNode发起文件读取的请求。
NameNode返回文件存储的DataNode的信息。
Client读取文件信息。

文件Block复制:

NameNode发现部分文件的Block不符合最小复制数或者部分DataNode失效。
通知DataNode相互复制Block。
DataNode开始直接相互复制。

最后再说一下HDFS的几个设计特点(对于框架设计值得借鉴):

Block的放置:默认不配置。一个Block会有三份备份,一份放在NameNode指定的DataNode,另一份放在与指定DataNode非同一Rack上的DataNode,最后一份放在与指定DataNode同一Rack上的DataNode上。备份无非就是为了数据安全,考虑同一Rack的失败情况以及不同Rack之间数据拷贝性能问题就采用这种配置方式。

心跳检测DataNode的健康状况,如果发现问题就采取数据备份的方式来保证数据的安全性。
数据复制(场景为DataNode失败、需要平衡DataNode的存储利用率和需要平衡DataNode数据交互压力等情况):这里先说一下,使用HDFS的balancer命令,可以配置一个Threshold来平衡每一个DataNode磁盘利用率。例如设置了Threshold为10%,那么执行balancer命令的时候,首先统计所有DataNode的磁盘利用率的均值,然后判断如果某一个DataNode的磁盘利用率超过这个均值Threshold以上,那么将会把这个DataNode的block转移到磁盘利用率低的DataNode,这对于新节点的加入来说十分有用。

数据交验:采用CRC32作数据交验。在文件Block写入的时候除了写入数据还会写入交验信息,在读取的时候需要交验后再读入。
NameNode是单点:如果失败的话,任务处理信息将会纪录在本地文件系统和远端的文件系统中。
数据管道性的写入:当客户端要写入文件到DataNode上,首先客户端读取一个Block然后写到第一个DataNode上,然后由第一个DataNode传递到备份的DataNode上,一直到所有需要写入这个Block的NataNode都成功写入,客户端才会继续开始写下一个Block。

安全模式:在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。

下面综合MapReduce和HDFS来看Hadoop的结构:



图3:Hadoop结构示意图
在Hadoop的系统中,会有一台Master,主要负责NameNode的工作以及JobTracker的工作。JobTracker的主要职责就是启动、跟踪和调度各个Slave的任务执行。还会有多台Slave,每一台Slave通常具有DataNode的功能并负责TaskTracker的工作。TaskTracker根据应用要求来结合本地数据执行Map任务以及Reduce任务。

说到这里,就要提到分布式计算最重要的一个设计点:Moving Computation is Cheaper than Moving Data。就是在分布式处理中,移动数据的代价总是高于转移计算的代价。简单来说就是分而治之的工作,需要将数据也分而存储,本地任务处理本地数据然后归总,这样才会保证分布式计算的高效性。

为什么要选择Hadoop?

说完了What,简单地说一下Why。官方网站已经给了很多的说明,这里就大致说一下其优点及使用的场景(没有不好的工具,只用不适用的工具,因此选择好场景才能够真正发挥分布式计算的作用):

可扩展:不论是存储的可扩展还是计算的可扩展都是Hadoop的设计根本。
经济:框架可以运行在任何普通的PC上。
可靠:分布式文件系统的备份恢复机制以及MapReduce的任务监控保证了分布式处理的可靠性。
高效:分布式文件系统的高效数据交互实现以及MapReduce结合Local Data处理的模式,为高效处理海量的信息作了基础准备。

使用场景:个人觉得最适合的就是海量数据的分析,其实Google最早提出MapReduce也就是为了海量数据分析。同时HDFS最早是为了搜索引擎实现而开发的,后来才被用于分布式计算框架中。海量数据被分割于多个节点,然后由每一个节点并行计算,将得出的结果归并到输出。同时第一阶段的输出又可以作为下一阶段计算的输入,因此可以想象到一个树状结构的分布式计算图,在不同阶段都有不同产出,同时并行和串行结合的计算也可以很好地在分布式集群的资源下得以高效的处理。

相关阅读:

Hadoop中的集群配置和使用技巧――分布式计算开源框架Hadoop入门实践(二)

Hadoop基本流程与应用开发――分布式计算开源框架Hadoop入门实践(三)

作者介绍:岑文初,就职于阿里软件公司研发中心平台一部,任架构师。当前主要工作涉及阿里软件开发平台服务框架(ASF)设计与实现,服务集成平台(SIP)设计与实现。没有什么擅长或者精通,工作到现在唯一提升的就是学习能力和速度。个人Blog为:http://blog.csdn.net/cenwenchu79

参与InfoQ中文站内容建设,请邮件至editors@cn.infoq.com。也欢迎大家到InfoQ中文站用户讨论组参与我们的线上讨论。

9 条回复

关注此讨论
回复


发表人 秋天 的蛇 发表于 04/08/2008 06:26
赞助商链接

Loading...

深度内容

全部

文章

技术演讲

技术访谈

迷你书

使用缓存的9大误区(上)




本文剖析了数据缓存实践中的若干误区,并提供了相应的解决方案。

汪洋
2012年4月13日 ,

3

优化ORM性能




有些开发者因曾有性能上的不快经验而拒绝采用对象关系映射(ORM)技术。而本文将探讨一些技巧,在不影响您发挥对象关系映射特性优势的情况下优化ORM性能。

John-Daniel Trask
2012年4月11日 ,

3

广告

Hypertable Goes Realtime at Baidu




本次演讲分享的主要内容将包括:Hypertable能够满足应用的哪些需求?实际应用中遇到的挑战有哪些, 可靠性or性能?如何应对这些挑战?Hypertable和HBase有哪些异同?

杨栋
2012年4月10日 ,

1

使用Phalanger整合PHP和.NET




Phalanger可以用于创建组合.NET和PHP的解决方案,所采用的方式用标准的PHP解释器是不可能做到的。 有了Phalanger扩展,PHP程序可以直接使用.NET类,而.NET程序也可以动态地调用PHP脚本,或者使用在PHP中实现的函数和类。

Tomas Petricek
2012年4月10日 ,

3

架构师(4月刊)




InfoQ中文站的电子杂志《架构师》(2012年4月刊)出炉了。本期的主编是InfoQ中文站原创团队编辑张凯峰。动态语言与传统静态语言之争,以及动态语言部落内孰优孰劣之争,一直没有离开过人们的视线。抛开动态语言百花齐放的局面不谈,可以肯定的是,它们在不管是新兴的互联网应用还是传统的企业应用中,所占有的重要地位仍然呈上升态势。

InfoQ中文站
2012年4月10日

58同城在分布式存储方面的架构实践




随着大数据时代的到来,58同城根据自己的业务特点,在分类信息,电子商务,社会化网络等领域,除了使用自有存储技术之外,也在使用Redist,Mongodb,Hbase等开源存储技术。本次演讲分享的主要内容将包括:主流分布式存储系统架构比较;如何根据需求做好trade off;如何做到RAS(可靠,可用,可扩展);mongodb在58同城的使用。

徐振华
2012年4月10日 ,

6

广告

服务器端代理拥有事务的设计模式




本文选自迷你书《Java事务设计策略》的第九章,译者翟静。本文详细介绍了命令模式(Command Pattern)或服务器端代理设计模式(Server Delegate Design pattern)。

Mark Richards
2012年4月9日

论道WP(二):如何学习WP开发?




虽然Windows Phone还没正式进入中国大陆市场,但关注它的国内开发者已经越来越多了,这个时候摆在面前的一个问题就是,如何学习Windows Phone开发?如果你对此感到无从入手,或许这篇文章可以给你一点启发。

李永伦
2012年4月6日 ,

4

更早的 >

语言 & 开发

Power Tools for TFS 11 Beta

使用缓存的9大误区(上)
2012.4.13微博热报:专职QA的必要性、团队规模
CodePlex提供Git支持
在Windows Azure中使用CQRS

架构 & 设计

2012.4.13微博热报:专职QA的必要性、团队规模
在Windows Azure中使用CQRS
敏捷让内向者走开?
软件质量简介
.NET Framework 4.5中的异步特性增强

过程 & 实践

Power Tools for TFS 11 Beta

2012.4.13微博热报:专职QA的必要性、团队规模
敏捷让内向者走开?
软件质量简介
敏捷幽默:2012愚人节精品串烧

运维 & 基础架构

2012.4.13微博热报:专职QA的必要性、团队规模
.NET Framework 4.5中的异步特性增强
2012.4.11微博热报:JSON Markup Language、SAS和R区别
架构师(4月刊)
百度技术沙龙第25期回顾:海量数据处理技术解析(含资料下载)

企业架构

使用缓存的9大误区(上)
Hypertable Goes Realtime at Baidu
架构师(4月刊)
2012.4.10微博热报:开发团队是否需要专门测试人员,大型电商网站架构分享
服务器端代理拥有事务的设计模式

首页

关于我们

合作伙伴

QCon全球软件开发大会

注册InfoQ账号

登录
&Body=Thanks for your interest in submitting news to InfoQ.com. Please provide as much detail about your news suggestion in this email as possible. Your suggestion will be considered and if selected an InfoQ editor will write an editted version and publish it. An automated version of this form will be coming sometime in the next few weeks. :) Thanks - InfoQ team.]提供新闻

选择默认的领域

语言 & 开发

架构 & 设计

过程 & 实践

运维 & 基础架构

企业架构

特别专题

技术社区活动日历

百度技术沙龙

Scrum开发

月刊:《架构师》

线下活动:QClub

技术大会

QCon全球软件开发大会(北京站) 2012年4月18~20日

反馈
feedback@cn.infoq.com
Bugs
bugs@cn.infoq.com
广告
sales@cn.infoq.com
编辑
editors@cn.infoq.com
新浪微博
http://weibo.com/infoqchina
InfoQ.com 及其所有内容,版权所有© 2006-2012 C4Media Inc. InfoQ.com 服务器由
Contegix 提供,我们最信赖的 ISP 合作伙伴。

隐私政策
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: