Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2171412
  • 博文数量: 436
  • 博客积分: 9833
  • 博客等级: 中将
  • 技术积分: 5558
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-29 10:27
文章存档

2013年(47)

2012年(79)

2011年(192)

2010年(118)

分类: 云计算

2011-09-21 22:29:07

浅谈hadoop云计算模型

沈岩(首都师范大学信息工程学院 北京 100048

摘要:随着人们的需求的不断增加,传统的互联网技术已经不能够满足人们的需要。为了有效的解决数据海啸问题,国内外提出了很多不同的模型,但是以googleMapReduce并行模型被广泛的采用。

关键词:HBase 并行计算 MapReduce模型 hadoop 云计算

1  引言

    数据海啸的出现使得传统的oracle数据库及其它商业数据库收到了相应的冲击。由于google技术上的需要,他们自主研发的MapReduce并行计算框架应运而生,而由于google的该项目并不开源,所以Hadoop诞生了。现在hadoop几乎成为了云计算的代名词。利用hadoop可以对集群进行控制,同时也可以更加便捷的构建企业级的应用。Hadoop是google的云计算的开源的实现,是Apache开源组织的一个分布式框架,本文以hadoop中的HDFS及HBase的相关技术来剖析hadoop的实现

hadoop的优点

hadoop的开源特性给hadoop增加了很多的优势,很多的开发者可以利用hadoop研发自己的产品,而且能够真正的解决大规模的相对无关的数据。Hadoop的开发者当初的目标就是实现google的三大核心技术,并将其推广到大众。并且在批处理作业的大规模分布式计算上有很卓越的成就。

Hadoop的缺点

Hadoop的缺点也是不容小觑的。没有一种编程模型是适合所有情况的,hadoop自身实现非常的简单并没有实现太多的复杂的技术。当数据之间关联度比较大的时候,Hadoop的MapReduce编程模型的效果就会大大折扣。而且MapReduce的执行效果对于批处理作业有很好的效果,但是对于实时性较强的应用来说就不合适。

Hadoop的使用环境:

1) 硬件错误是常态而不是异常态。云计算环境有成千上万个server节点,大多数的硬件可能出错的概率较高,所以如何进行错误恢复和检测是hadoop文件系统的技术核心。

2) 访问文件与其他的应用不同,因为普通的文件访问追求低延迟,而在hadoop中访问文件时,hadoop系统追求的是高吞吐量。

3) HDFS以支持大数据集合为目标,一个存储在上面的典型文件大小一般都在千兆至T字节,一个单一HDFS实例应该能支撑数以千万计的文件。 

4) 移动计算的代价比之移动数据的代价低。一个应用请求的计算,离它操作的数据越近就越高效,这在数据达到海量级别的时候更是如此。将计算移动到数据附近,比之将数据移动到应用所在显然更好,HDFS提供给应用这样的接口。2

Hadoop结构

Hadoop采用master/slave架构。一个HDFS集群是有一个Namenode和一定数目的Datanode组成。在namenode上同时有jobtracker任务在运行负责将任务分发到不同的节点上。在下图中可以看到在伪分布式系统中namenode节点和datanode节点的输出信息的不同。

图表 1 hadoop伪分布式系统的节点信息

Namenode是一个中心服 务器,负责管理文件系统的namespace和客户端对文件的访问。Datanode在集群中分布在各个节点上,负责管理节点上它们附带的存储。在内 部,一个文件其实分成一个或多个block,每个块一般在内存当中是128M,所以如果文件中出现了很多的细小的文件的时候,会侵蚀大量的内存空间,这对HDFS非常不利,但是hadoop采用了har归档文件的方式将这些文件放在一个归档文件当中,有效的解决了这个问题,这些block存储在Datanode集合里。在HDFS文件中的操作是类似于本地文件的操作下面的例子是列出当前目录里面的所有的文件的内容。

图表 2 HDFS 文件操作

Namenode执行文件系统的namespace操作,例如 打开、关闭、重命名文件和目录,同时决定block到具体Datanode节点的映射。DatanodeNamenode的指挥下进行block的创 建、删除和复制。NamenodeDatanode都是设计成可以跑在普通的廉价的运行linux的机器上。HDFS采用java语言开发,因此可以部 署在很大范围的机器上。一个典型的部署场景是一台机器跑一个单独的Namenode节点,集群中的其他机器各跑一个Datanode实例。这个架构并不排 除一台机器上跑多个Datanode,不过这比较少见

 

   图表 3    HDFS的结构示意图

HDFS保证可靠性的相关措施

1)冗余备份,为了容错,文件的所有数据块都会有副本(副本数量就是备份因子)。HDFS都是一次性写入的,保证任何时候都有一个写者。Datanode使用本地文件系统存储HDFS中的数据,他对HDFS一无所知,只用一个一个的文件存储HDFS中的数据块,当Datanode启动的时候,他会遍历HDFS,产生一份HDFS数据块与本地文件的对应关系的报告。并把这个报告给namenode节点,块报告中包含了所有的datanode节点的所有块的列表。

2)副本存放,当复制因子是3的时候,hadoop会采用机架感知的策略,将一个副本放在本地的机架里,一个副本放在同一个机架里,一个副本放在不同的机架里。

  

图表 4  机架感知的策略

3)心跳检测

Namenode周期性的从datanode接受心跳包和块报告,收到心跳包说明datanode工作正常。Namenode会标记最近没有心跳的datanode为死机,namenode会不断的检测这些需要复制的数据块,并在需要的时候重新复制。原因主要是由于datanode上的节点不可用,数据副本损坏,datanode节点磁盘错误或复制因子增大等等。

剖析MapReduce工作机制

1.客户端:提交MapReduce作业

2.Jobtracker负责协调作业运行 类:JobTracker

3.Tasktracker 运行划分后的作业任务 类:TaskTracker

4.分布式文件系统,用来在其他的实体间共享作业文件。

    Runjob提交作业后,第一步.runjob并周期性的轮询作业的进度,如果发现上次与这次的报告有变化,将进度报告给控制台。第二步Jobclientjobtracker申请一个新的作业ID。第三步.将运行作业需要的资源(包括作业jar文件、配置文件、输入分片等)复制到一个以作业ID命名的jobtracker的文件系统中。作业jar的副本较多(由mapred.submit.replication属性控制)第四步.告知jobtracker作业准备执行(通过submitjob方法实现)。

作业的初始化

    当jobtracker接收到对其submitjob方法的调用后,交由作业调度器进行调度,并对其进行初始化。为了创建任务运行列表,作业调度器从共享文件系统中获取jobclient已经算好的输入分片信息。然后将每个分片分配到map任务。创建的reduce任务的数量由jobconfmapred.reduce.task属性决定,然后调度器创建相应的数量的要运行的reduce任务,任务在此时被指定ID

任务的分配

    Tasktracker运行一个简单的循环来定期发送“心跳”给jobtracker。对于map任务和reduce任务,tasktracker有固定数量的任务槽。例如,一个tasktracker可能可以同时运行两个或多个map任务和reduce任务。准确的数量由tasktracker核的数量和内存的大小来决定。如果tasktracker至少有一个空闲的map任务槽,jobtracker会为它选择一个map任务,否则选择一个reduce任务。为选择一个reduce任务,jobtracker简单地从待运行的reduce任务列表中选取下一个执行,用不着考虑数据的本地化。然而对于map任务,jobtracker会考虑tasktracker的网络位置,并选择一个距离其输入分片文件最近的tasktracker。在最理想的情况下,任务是数据本地化的。同样也可能是机架本地化的。3

分布式结构化数据表Hbase

传统的SQLHbase的区别1

Hadoop是一个处理数据的框架,比关系型数据库要好很多。

1)Hbase目标是处理大量的非结构化数据,而SQL是处理大量的结构化数据。

2)商业的关系型数据库是非常昂贵的。他们的设计更趋向于扩大规模。为了运行一个更大的数据库,商家不得不为支持一个更大更强健的数据库而购买一个更大的、处理速度更快的服务器。然而,随着数据集合的不断的扩大,高端的服务器已经不能满足数据规模的扩大了,而且在本地磁盘上的查询速度主要与寻道的时间相关,当硬盘容量增加时,寻道时间是制约查询速度的瓶颈,而hadoop是一个具有向外延伸特性的框架结构,如果需要更多的资源,只需要向这个集群里增加更多的廉价的PC机器就可以了。

3)从电力成本的角度上来说,分布式系统的节能能力要高于SQL系统的节能能力。一台这样的高性能高配置的电脑比四台低端配置的PC机的能耗要多,这说明昂贵的硬件开销仍然不能够满足实际的需要。

4)关系型数据库是处理数据之间存在依赖关系的数据,而大量的数据类型是相对无关的,比如图片,xml,文本文档一些实例,大量的数据是无组织的,无结构化的数据。Hadoop用 key/value的方式,这种方式处理大量的无结构化的数据时就变得很灵活了。

5)查询方式不同。SQL语言是利用查询语句来对内容进行检索的,而hadoop是通过编程和脚本来实现对数据的查询与检索的,很多的SQL使用者不习惯hadoop的编程模式,但是hadoop给用户提供了接口,可以使用类似SQL语言的pig语言来实现相关的内容检索,让其自动的转换为mapreduce程序。

6hadoop适合于对于大量数据的脱机处理,而不是对大量数据的在线的交易。Hadoop不适合于随机读写,实时性能不太好。但是他适合于一次写入,多次读取的数据存储类型。

总结

    目前基本上hadoop成为了人们眼中的云计算的代名词。对于PB级别的海量数据处理,hadoop起着无法替代的作用,中国移动出产了大云计划。通过修改和改装hadoop平台实现了对hadoop的海量数据的处理。

参考文献

[1]Chunk Lam.Hadoop in action 2010

[2]http://hadoop.apache.org/core/docs/current/hdfs_design.html 

[3]Tom White. hadoop the definitive guide 2011

阅读(3361) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~