Hadoop这个名字现在对很多开发者来说,并不陌生,但是很多开发者对其工作原理和架构并不了解。Hadoop怎么实现的分布式存储和分布式计算,其计算性能为什么会提高那么多。本文将从其基本工作原理方面解释上上述问题,博主是初学者,不喜勿喷,还请前辈多多指教。
一、Hadoop名字的起源
大家在网上搜索Hadoop关键字的时候,出现的图片绝大多数是一头可爱的***的小象,很多人并不理解这个分布式平台和小象有什么关系。Hadoop是Apache公司对Google GFS(Google FileSystem)和MapReduce的开源实现,该项目组的负责人Doug Cutting后来解释说,其实“Hadoop”这个词并不在字典中,是一个虚拟的词,源于他的小儿子,他的小儿子有一个***的小象玩具,并且叫这个玩具Hadoop(发音类似),Doug Cutting觉得这个很有意思,简单的拼写,容易本人记住,并且不容易被用在别处,也没有其他的意义,非常合适作为这个开源项目的名字,于是这个名字就被用上了,***小象也成了Hadoop的代名词。
二、Hadoop是什么
首先了解一下什么是分布式计算,所谓的分布式计算,既是说把一个很负责计算或者一个计算量很大计算,拆分成由很多小型的计算同时进行,提高计算的效率,缩小时间成本。他是和集中式计算想对应的,分布式计算往往和计算机集群联系在一起,比较依赖计算资源。Hadoop比较官方的说法是,Hadoop是一个由Apache基金会所开发的分布式系统基础架构(百度百科)。简单的说,Hadoop就是分布式系统架构中的一款产品,也是其中功能实现比较齐全、使用最方便和最广泛的一款产品。
Hadoop主要是实现了分布式文件系统(HDFS)及其对应分布式计算模型MapReduce。Hadoop可以部署在廉价的机器上,并且能保证高容错性,计算机集群又能保证高数据吞吐量,并且能充分利用MapReduce分布式计算模型实现大批量数据计算,使得很多企业越来越倾向于使用Hadoop来开发自己的产品。
三、Hadoop的架构
从Hadoop本身来说,如上述,Hadoop主要由两部分组成,分布式文件系统HDFS和分布式计算模型MapReduce,HDFS位于Hadoop的底层,主要提供文献存储功能,其上层是MapReduce,其数据计算来源主要是HDFS中的数据,计算完成的输出结果往往也会保存到HDFS中,也可以保存在本地,这个后面会详细介绍。
HDFS
从用户client的角度来说,HDFS就像是一个普通的文件系统,和Linux系统中的文件系统功能很相似,其文件操作也和linux系统的文件操作命令类似,所以,熟悉linux的朋友不会对Hadoop陌生,操作简介方便这也是Hadoop被开发者广泛接受的原因之一。
但是从系统的角度来说,并不是那么简单,HDFS由很多台服务器共同组成,多台服务器共同完成分布式存储功能。文件数据在其中是以block的方式存储的,每一个block的大小默认是64M(可以修改配置更改),既是说一个大文件在存储时会被切割成64M大小的block,存储在HDFS中,结尾不足64M的部分独占一个block,并且每一个block都默认有三个备份(可以修改配置更改备份数量),即数据冗余。HDFS有很多优点:
易扩展:由于是部署在集群上的,所以其容量会随着集群的扩张而扩展,如果配置高质量的集群管理,扩展到千万结点上也很轻松。
(1)高吞吐量:由于其和集群的密切关系,并且扩展性非常好,所以HDFS可以很轻松的存储T级别或者更大量的数据,只要集群装得下。
(2)高可靠性:由于HDFS采用的数据冗余策略,每一个block都有备份,既是出现部分服务器宕机,也不会影响数据的完整性。
(3)高效性:由于其数据是分布式存储的,并且block可以在结点之间快速移动,保持结点平衡,所以很高效的支持分布式计算。
(4)廉价:由于Hadoop的设计初衷就是在廉价的服务器上部署分布式计算,使得很多规模不大的小公司能够承担得起这方面的消费。
缺点:
HDFS不适合实时计算,其数据是一次写入,多次读取,并且数据访问时间延迟比较大,其设计初衷是高吞吐量,所以就牺牲了实时性。
MapReduce
MapReduce是Hadoop的另外一个核心技术:分布式计算,其实非常简单,就是利用HDFS分布式存储的特点,在此基础上在每一个block或者文件逻辑单元上建立一个子计算,牺牲计算空间来换取计算时间。其计算模型分为两个步骤,即Map(映射)和Reduce(集合),Map部分为每一条数据建立一个<key, value>映射并进行简单的计算,Reduce部分将Map的输出结果收集起来,形成输出。具体内容以后会详细介绍。
从集群的角度来说,Hadoop是由NameNode,DataNode,SecondaryNameNode和Client组成,如下图所示(图片来源于百度百科):
NameNode是Hadoop集群的主节点,也是集群的控制节点,SecondaryNameNode是二级主节点,可以理解为NameNode的备份,主节点挂掉时,SecondaryNameNode补上,作为主节点。主节点本身并不存储大量数据,也不提供计算资源,只是为集群提供命名空间,其中保存的有文件映射,即Metadata,通过这种方式找到文件系统中的文件。DataNode是集群中的数据结点,用于保存大批量数据,和提供计算所需计算资源,MapReduce实际运行在DataNode中,NameNode只是控制作用。Client是客户端。集群中通信是以TCP/IP的方式来完成的。
Hadoop的架构先介绍到这里,后面有需要会补充,谢谢!
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/193910.html