Hadoop架构的关键技术的分析与研究
2016-05-30王海波
王海波
摘 要:随着信息时代的飞速发展。海量数据的应用处理已经成为大家重点关注的首要问题。论文首先对Hadoop技术的产生及特点进行介绍,然后重点分析了Hadoop的两大关键技术分布式文件系统(HDFS)和MapReduce编程模型,最后对Hadoop的关键技术进行总结并给出一些看法,并对未来发展方向进行了展望。
关键词:Hadoop;HDFS体系结构;MapReduce
随着信息时代的飞速发展,随着各种数据的迅猛增长。海量数据的应用处理已经成为大家重点关注的首要问题。在很多传统的行业里,大量数据的查询与存储主要还是依靠关系型数据库管理系统。而Hadoop平台的出现,提供了廉价的处理大数据的能力。完美的解决了在企业里海量数据处理和应用的要求,使得Hadoop成为现代企业处理海量数据的最好的选择。
论文首先对Hadoop技术的产生及特点进行介绍,然后重点分析了Hadoop的两大关键技术分布式文件系统(HDFS)和MapReduce编程模型,最后对Hadoop的关键技术进行总结并给出一些看法。
一、Hadoop技术介绍
Apache公司于2005年最先引入Hadoop,它源于google公司开发的MapReduce和Google File System(GFS)项目。Hadoop因为对并行分布处理“大数据”有利而得到特别重视,是新一代的架构和技术。Hadoop是一个分布式的计算平台,用户可以使用它开发并处理海量数据的各种应用软件。HDFS和MapReduce是Hadoop框架中最为核心的设计。HDFS主要负责海量数据的存储,MapReduce主要负责数据的计算。
二、Hadoop的关键技术之——HDFS体系结构
HDFS被称为分布式文件系统,是Hadoop的核心技术。HDFS的设计使得它适合运行在通用硬件上,可以部署在在廉价的机器上。HDFS的优势:HDFS可以处理超大文件,可以存储数GB级、数TB级、数PB级的超大文件;HDFS可以集群规模动态扩展,数百甚至数千个节点能够动态的加入到集群中;HDFS又具有主容错的优势,在集群中的节点挂点可以由其他的节点代替;HDFS一般不处理交互式处理,主要处理批处理,采用流式读写,可以“一次写入,多次读取”,当数据源生成一个数据集之后,这个数据集会被复制分发到不同的存储节点,可以响应各类数据分析任务的请求。
HDFS更加看重的是数据的吞量,不太看重数据的访问速度;由于HDFS 的安全、可靠及高可用性,Hadoop可以采用的硬件要求不高,可以使用廉价的商用机器集群。在分布式计算中,HDFS是数据存储管理的基础。HDFS具有很多优点,像高获得性,高可靠性,高扩展性等。这些优点使得HDFS可以稳定的存储海量数据。
HDFS是一个主/从(Master/Slave)的体系结构。我们从用户的角度来看,HDFS和传统的文件系统差不多,它可以对文件执行Create、Read、Update和Delete操作。因为HDFS是分布式存储,在HDFS体系结构中,有两种类型的结点,一类是元数据结点(NameNode);另一类是数据结点(DataNode)。DataNode用来存储实际的数据,NameNode(主控制服务器)是用来管理文件系统的元数据。在文件系统中,NameNode负责管理元数据,DataNode负责处理实际数据的存储。通过NameNode和DataNodes的交互,客户可以访问文件系统。客户端通过和NameNode相关联,可以获取文件的元数据。同时,通过直接和DataNode的交互,进行文件的输入和输出操作
(一)NameNode
Namenode 上保存着 HDFS 的名字空间。Namenode使用EditLog 的事务日志记录各种对文件系统的元数据的修改操作。事务日志(EditLog)被存储在本地操作系统的文件系统中。在FsImage 的文件中,存储着整个文件系统的名字空间,同样的FsImage也被存储在本地操作系统的文件系统中。整个文件系统的名字空间文件数据块映射(Blockmap)的映像都保存在内存中。由于对元数据结构的紧凑设计,可以在一个4G内存的 Namenode中能够处理大量的文件及目录。
我们说的checkpoint(检查点)是这样一个过程,首先,Namenode启动,然后可以从硬盘中读取FsImage和Editlog,然后在将每个Editlog 中的事务作用在内存中的 FsImage 上,接着将新得到的这个FsImage从内存中保存到本地的硬盘,最后就可以删除原来的Editlog。就现在的实现而言,检查点仅仅发生在 Namenode 启动时,在将来会实现支持周期性的检查点。
(二)DataNode
Datanode 可以把HDFS 的数据以文件的形式存储在本地,Datanode不知道HDFS 文件的相关信息。HDFS的数据被划分成若干的数据块,Datanode将每个数据块分别存储在本地文件系统的一个独立文件中。Datanode 不会在一个目录下创建所有文件,Datanode采用试探的方法来确定每个目录中的文件数目,这样,在时机允许时创建相应的子目录。
当我们启动一个Datanode时,Datanode将扫描所有的本地文件系统,这样会产生一个列表,在这个列表中将所有 HDFS 数据块和本地文件一一对应,然后会产生一个报告,并将报告然发送到 Namenode ,这个报告就是块状态报告。
通常,我们可以这样来进行HDFS部署,将NameNode进行在一个专有的机器上,使用多个集群中的其他機器来运行一个DataNode;当然我们也可以在同一台机器上既运行NameNode又运行一个或多个DataNode。在一个集群中,只设计一个NameNode,这样的设计可以简化系统的架构。
(三)Hadoop的关键技术——MapReduce技术
对于大量数据的操作处理,MapReduce采用了一种全新的思想,它首先分发给一个主节点,然后在将这些操作给下面的各个分节点,分节点协作完成。在处理结果时,先得到每个分节点的结果,最后在处理并得到最终的结果。我们可以这样说, MapReduce是分解相应任务并汇总最终结果。MapReduce有两个特别重要的函数,reduce和map,map的主要功能是将一个任务进行分解。
而reduce的主要功能是汇总多任务的处理结果。这里,我们要特别注意,在采用 map和reduce处理数据时有这样的特性:我们可以将待处理的数据集进行分解,将其分解为多个较小的数据集,并且我们可以并行处理这些小的数据集。
在上图中,我们可以看到,如何使用MapReduce来处理大数据集。在这个模型中,有两个非常重要的函数,分别是map和reduce函数。用户可以根据自己的实际需求来设计函数的功能及规则,用户可以根据自己定义的规则,输入一个对,可以转换成另外的一个或者一批