1 HDFS简介
1.1 Hadoop 2.0介绍
Hadoop是Apache的一个分布式系统基础架构,可以为海量数据提供存储和计算。Hadoop 2.0即第二代Hadoop系统,其框架最核心的设计是HDFS、MapReduce和YARN。其中,HDFS为海量数据提供存储,MapReduce用于分布式计算,YARN用于进行资源管理。
Hadoop 1.0和Hadoop 2.0的结构对比:
Hadoop 2.0的主要改进有:
1、通过YARN实现资源的调度与管理,从而使Hadoop 2.0可以运行更多种类的计算框架,如Spark等。
2、实现了NameNode的HA方案,即同时有2个NameNode(一个Active另一个Standby),如果ActiveNameNode挂掉的话,另一个NameNode会转入Active状态提供服务,保证了整个集群的高可用。
3、实现了HDFS federation,由于元数据放在NameNode的内存当中,内存限制了整个集群的规模,通过HDFS federation使多个NameNode组成一个联邦共同管理DataNode,这样就可以扩大集群规模。
4、Hadoop RPC序列化扩展性好,通过将数据类型模块从RPC中独立出来,成为一个独立的可插拔模块。
1.2 HDFS概述
HDFS是一个分布式文件系统,具有高容错的特点。它可以部署在廉价的通用硬件上,提供高吞吐率的数据访问,适合需要处理海量数据集的应用程序。
主要特点:
1、支持超大文件:支持TB级的数据文件。
2、检测和快速应对硬件故障:HDFS的检测和冗余机制很好克服了大量通用硬件平台上的硬件故障问题。
3、高吞吐量:批量处理数据。
4、简化一致性模型:一次写入多次读取的文件处理模型有利于提高吞吐量。
HDFS不适合的场景:低延迟数据访问;大量的小文件;多用户写入文件、修改文件。
HDFS的构成:NameNode保存着HDFS的名字空间,对于任何对文件系统元数据产生修改的操作;DataNode将HDFS数据以文件的形式存储在本地文件系统中,它并不知道有关HDFS文件的信息。
数据块:数据块是HDFS的文件存储处理单元,在Hadoop 2.0中默认大小为128MB,可根据业务情况进行配置。数据块的存在,使得HDFS可以保存比存储节点单一磁盘大的文件,而且简化了存储管理,方便容错,有利于数据复制。
1.3 HDFS读写流程
读文件的流程:1、客户端client使用open函数打开文件;2、DistributedFileSystem用RPC调用元数据节点,得到文件的数据块信息;3、对于每一个数据块,元数据节点返回保存数据块的数据节点的地址;4、DistributedFileSystem返回FSDataInputStream给客户端,用来读取数据;5、客户端调用FSDataInputStream的read函数开始读取数据;6、FSDataInputStream连接保存此文件第一个数据块的最近的数据节点;7、Data从数据节点读到客户端;8、当此数据块读取完毕时,FSDataInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点;9、当客户端读取数据完毕时,调用FSD