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

2013年(47)

2012年(79)

2011年(192)

2010年(118)

分类: 云计算

2011-09-19 15:44:46

数据海啸的出现使得传统的oracle数据库及其它商业数据库收到了相应的冲击。由于google技术上的需要,他们自主研发的MapReduce并行计算框架应运而生,而由于google的该项目并不开源,所以Hadoop诞生了。Hadoop是google的云计算的开源的实现,是Apache开源组织的一个分布式框架,本文以hadoop中的HDFS及HBase的相关技术来剖析hadoop的实现

Hadoop的使用环境:

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

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

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

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

http://hadoop.apache.org/core/docs/current/hdfs_design.html )

HDFS结构

    HDFS采用master/slave架构。一个HDFS集群是有一个Namenode和一定数目的Datanode组成。

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

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

   图表 1    HDFS的结构示意图

HDFS保证可靠性的相关措施

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

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

  

图表 2  机架感知的策略

3)心跳检测

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

分布式结构化数据表Hbase

传统的SQLHbase的区别

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不适合于随机读写,实时性能不太好。但是他适合于一次写入,多次读取的数据存储类型。

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