《Hadoop系统架构》由会员分享,可在线阅读,更多相关《Hadoop系统架构(18页珍藏版)》请在金锄头文库上搜索。
1、word一、绪论21世纪的第一个十年里,互联网高速开展,Web的易用性、实用性使它成为最为广泛、最有前途、最有魅力的信息传播技术。作为信息交互的载体,Web的特性催生了多种新兴产业,电子商务、社交网络在最近几年开展尤为迅速。互联网用户也在过去的数年间增长迅速,根据我国互联网络信息中心发布的第27次中国互联网络开展状况统计报告显示,截至2010年12月底,我国网民规模达到4.57亿,较2009年底增加7330万人。报告中还显示,网络购物用户年增长48.6%,是用户增长最快的应用。2011年以微博为代表的新型社交迅速成长,新浪微博在2011年9月注册用户达到2.75亿,微博用户平均每天发布的微博数
2、达到8600万条。无论是电子商务中的产品图片展示,还是社交中的图片分享,其图片数量都在呈现几何根底的增长。以国内外几大IT巨头为例,截止至2011年6月,Facebook用户已经上传了150亿X照片,加上缩略图,总容量超过L5PB。此外,每周新增照片为2.2亿X,约25TB。顶峰期,Facebook每秒处理55万X照片!国外最大的图片分享Flickr共存储4.7亿X图片,而且相当多的图片是高清数码图片,单X图片大小4?5M左右,消耗2PB存储空间,每秒需要处理38000次请求,每天新增图片超过40万。Flickr采用的squid缓存了总计3500万X图片,内存中存储有200万X图片。淘宝网作为
3、我国最大的电子商务平台,在线商品达到10亿,图片服务器存储286亿X图片,总容量达到1PB,且每天仍在以千万级别增长。由于图片表达信息远胜于文字描述,所以电子商务尤其注重图片的显示质量、上传时间、访问速度等问题。根据淘宝网的流量分析,整个淘宝网流量中,图片的访问流量达到90%以上。腾讯的相册用户总上传图片数600亿存储量12PB、每周上传图片数10亿、存储3种规格1300亿图片,峰值访问每秒50万次。由于图片量非常大,海量图片需要消耗海量的存储空间,图片的存储和检索都会出现一定的瓶颈,存储系统的快速访问、扩容性、容错性都将是存储系统设计的目标。由此可见,面对海量的图片,如何高效的存储、管理这些
4、图片已经成为一个迫切需要解决的问题。NetApp,美国网域存储技术某某,是IT存储业界的佼佼者,倡导向数据密集型的企业提供统一的存储解决方案,用以整合在网络上来自服务器的数据,并有效管理呈爆炸性增长的数据。大多数IT公司在面临海量数据存储问题的时候都会选择NetApp公司提供的商用存储系统,淘宝网2007前一直使用应用该公司的文件存储系统。但随着图片文件数量以每年2倍的速度增长,NetApp公司最高端的产品也不能满足淘宝网存储的要求。商业存储服务的不足有以下几点:首先是文件数量太大,网络存储设备无法支撑,连接存储系统的服务器越来越多,网络连接数已经达到了网络存储设备的极限。其次是商用存储系统不
5、能根据企业特定的业务进展存储和读取优化,导致面对大规模的小文件存储与读取,磁盘磁头需要频繁的寻道和换道,造成读取上的延迟。再加上高并发访问量的背景,系统很容易出现问题。最后是花费问题,商业存储系统扩容本钱太高,10T的存储容量需要几百万人民币。在面临海量存储需求的时候,高本钱并没有带来高效率,高可靠性,高容错性。况且,过分依赖商业系统在维护性、创造性上受到商业公司约束,难以满足互联网企业的飞速开展。云计算的出现带动了技术开展朝向一个新的方向。它创造性的根据分布式处理、并行处理和网格计算的开展,提出了新的分布式集群技术。云存储概是在云计算概念上延伸和开展出来的一个新的概念,是指通过集群应用、网格
6、技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的一个系统。当云计算系统运算和处理的核心是大量数据的存储和管理时,云计算系统中就需要配置大量的存储设备,那么云计算系统就转变成为一个云存储系统,所以云存储是一个以数据存储和管理为核心的云计算系统。云存储的概念改变了存储领域,可以尝试以相对廉价的存储设备部署在云端作为存储服务器,利用分布式文件系统统一管理,对外提供存储和业务访问接口。由云端提供存储服务,达到业务与存储的解稱合,不仅能根据不同业务背景设定不同的存储、访问接口,优化存取服务,还能将容灾和安全性固定在云端,此外
7、,由于采用分布式文件系统,云端服务器扩展相对容易。二、Hadoop云计算系统Hadoop是一个分布式系统根底架构,由Apache基金会开发。作为Google一系列产品的幵源实现,是一个更容易开发和运行处理大规模数据的软件平台。Hadoop中包含一系列相关的子项目,这些项目都隶属于Apache软件基金会。最著名的是并行计算模型MapReduce和分布式文件系统(HDFS),其他的子系统提供了一些附加功能,或者在core上增加了一些高级的抽象。Core:分布式系统和通用I/O组件和接口,支持序列化、Java远程过程调用等等。Avro:支持跨语言过程调用,持久数据存储的数据序列化系统。MapRedu
8、ce:构建在廉价的PC机器上的分布式数据处理模型和运行环境。HDFS:构建在廉价的PC机器上的分布式文件系统。Pig:处理海量数据集的数据流语言和运行环境。pig运行在HDFS和MapReduce之上。HBase:面向列的分布式数据库。HBase使用HDFS作为底层存储,同时使用MapReduce支持批处理模式的计算和随机查询。ZooKeeper:提供分布式、高效的协作服务。ZooKeeper提供分布式锁这样的原子操作,可以用来构建分布式应用。Hive:分布式数据仓库,Hive使用HDFS存储数据,提供类似SQL的语言(转换为MapReduce任务)查询数据。Chukwa:分布式数据采集和分析
9、系统。使用HDFS存储数据,使用Mapreduce输出分析报告。三、分布式文件系统HDFSHadoop分布式文件系统HDFS被设计成稳定的存储海量数据,并且适合运行在普通硬件上的分布式文件系统。HDFS能提供高吞吐量的数据访问性能,给用户的应用提供更高的带宽,非常适合海量数据集上的应用。它运行于廉价的普通硬件之上,但是可以提供可靠性、稳定的容错功能。面对海量数据和大量用户仍然可以提供高质量的服务,具有优秀的并发处理的能力。3.1 HDFS的特点(1) HDFS认为硬件错误是一种正常的现象。HDFS由成百上千的普通硬件构成的服务器所组成,其中每个服务器上都存储着文件系维的数据块。HDFS文件系统
10、非常庞大,其中的任何一个服务器都可能出现故障,这些服务器就会处于故障状态,从而导致系统的一局部数据丢失,而且有一局部机器损坏之后可能无法恢复到正常工作状态。所以与时的检查、错误检测、数据备份容错、自动恢复是HDFS分布式文件系统非常重要的功能。HDFS分布式文件系统通过自己的检测协议定时自动监控系统全部机器的状态,一旦检测到机器故障等问题,能够迅速地检测,定位、冗余并恢复这些故障机器上的数据。基于以上设计的HDFS就具有错误检测和快速、自动恢复数据的功能。(2) 在HDFS上运行的应用需要以流式访问它们的数据集。HDFS具有很好的数据批处理能力。HDFS更注重用于数据访问的高吞吐量,而对于数据
11、访问的延迟和响应时间要求不做很严格处理。(3) HDFS上的应用一般都是处理海量数据集的程序。HDFS上的文件大小一般都在GB至TB的大小。HDFS可以非常好的支持大文件存储。通过利用分布式集群HDFS能提供非常高的数据传输带宽,HDFS集群可以扩展到数百个节点。同时一个HDFS文件系统可以支撑数以千万计的文件。HDFS分布式文件系统可以处理快速增长的、包含数以万计的对象、长度达TB的数据集,也可以管理成千上万的KB规模的文件块。(4) HDFS采用一次写入屡次读取的方式。在HDFS系统中一个文件经过创建、写入和关闭之后就不允许再去修改这个文件,简化了数据一致性问题,实现了高吞吐量访问数据的能
12、力。一般情况下,每次写入的数据的大小和大规模读取的模型根本一样,数据一旦被写入后,文件就不允许被修改了。同时系统也支持小规模的随机位置写入操作。MapReduce应用和网络爬虫应用是适应这个模型的最好应用说明。(5) 通常应用请求的计算的数据附近化是最高效的,处理海量数据的时候做到计算和数据距离最近可以得到最高的处理效率。所以HDFS具有计算程序优先选择距离最近的数据的策略。如果遇到网络阻塞将对计算程序访问数据的速度产生影响,采用附近化策略可以防止这种情况,同时可以提高系统整体处理数据的吞吐量。把计算程序放到数据附近比把数据移动到计算的附近更高效。HDFS为提供了把应用程序移动到数据附近的接口
13、。(6) HDFS具有非常好的平台可移植性。HDFS使用JAVA开发,JAVA本身就具有跨平台的特性。HDFS的可移植性推动它在大规模数据应用领域上的应用。同时HDFS提供其他语言的接口,方便用户使用。HDFS分布式文件系统的以上特点可以充分保证数据的可靠性、安全性,保证系统的多并发和高速处理海量数据的能力,同时基于以上的策略,HDFS分布式文件系统可以保证数据的一致性和自动修复,保证海量数据的安全和具有很好的存储性能。3.2 HDFS系统架构HDFS采用Master/Slave的主从结构。一个HDFS集群是由一个主控节点Namenode和一定数量的数据节点Datanode组成的,如图1所示。
14、主控节点是一个中心服务器,是整个文件系统的大脑,它负责管理文件系统的命名空间Namespace和客户端对文件的访问。数据节点在集群中一般是一个节点对应一台服务器,负责管理节点上它们所附带的存储。在内部,一个文件其实分成一个或多个数据块,这些块存储在数据节点集合中。主控节点执行文件系统的命名空间操作,例如打开、关闭、重命名文件和目录,同时决定数据块到具体数据节点的映射。数据节点在主控节点的指挥下进展块的创建、删除和复制。主控节点和数据节点都是被设计成可以运行在普通的廉价的运行Linux的机器上。HDFS 采用Java语言开发,因此可以部署在很大X围的机器上。一个典型的部署场景是一台机器跑一个单独
15、的主控节点,集群中的其他机器各跑一个数据节点实例。单一主控节点大大简化了系统的架构。主控节点负责管理所有的HDFS元数据,客户端传输文件数据时就不需要通过主控节点,而是直接与数据节点建立连接。图1 HDFS系统架构3.2.1 HDFS的数据分布一个文件系统中,最重要的数据,其实就是整个文件系统的目录结构和具体每个文件的数据。具体的文件数据被切分成数据块,存放在数据服务器上。每一个文件数据块,在数据服务器上都表征为一对文件普通的Linux文件,一个是数据文件,一个是附加信息的元数据文件,我们把这对文件简称为数据块文件。数据块文件存放在数据目录下,它有一个名为current的根目录,然后里面有假如
16、干个数据块文件和从dir0-dir63的最多64个的子目录,子目录内部结构等同于current目录,依次类推。相比数据服务器,主控服务器的数据量不大,但逻辑非常复杂。主控服务器主要有三类数据:文件系统的目录结构数据,各个文件的分块信息,数据块的位置信息就数据块放置在哪些数据服务器上。在HDFS架构中,只有文件的目录结构和分块信息才会被持久化到本地磁盘上,而数据块的位置信息如此是通过动态汇总过来的,仅仅存活在内存数据结构中,机器挂了,就灰飞烟灭了。每一个数据服务器启动后,都会向主控服务器发送注册消息,将其上数据块的状况都告知于主控服务器。3.2.2 HDFS的数据组织兼容HDFS的应用都是处理大数据集合的。这些应用都是写数据一次,读却是一次到屡次,并且读的速度要满足流式读。HDFS支持文件的一次写入屡次读取write-once-read-many语义。一个典型的数据块block大小是64MB