分布式文件系统(Hadoop Distributed System)
Hadoop的核心就是HDFS与MapReduce。那么HDFS又是基于GFS的设计理念搞出来的的。
HDFS全称是Hadoop Distributed System。HDFS是为以流的方式存取大文件而设计的。适用于几百MB,GB以及TB,并写一次读多次的场合。而对于低延时数据访问、大量小文件、同时写和任意的文件修改,则并不是十分适合。
rookiezhao
hadoop提供了一个分布式文件系统和框架,用于基于MapReduce范式的超大数据集的分析和转换。尽管HDFS的接口模仿自Unix文件系统,但为了即将到来的应用有更好的性能,我们放弃了对标准一味地遵守。
Hadoop一个重要的特性是将数据和计算分散到很多(几千)主机,并且应用计算就近数据执行。Hadoop集群仅仅通过增加商用机就可以扩展计算容量,存储容量以及IO带宽。Yahoo的Hadoop集群包含40万台机器,存储40PB数据,最大的集群有4000台机器。100家全球组织据称在使用Hadoop。
HDFS分开存储文件系统元数据和应用数据。和其他分布式文件系统一样,如PVFS、Luctre、GFS、HDFS把元数据存储在一个专用的服务器,成为NameNode(名称节点)。应用数据存储在其他机器上,成为数据节点DataNodes并不依赖RAID这样的数据保护机制来实现数据的持久性,而是想GFS,文件被复制到多个数据节点来实现可靠性。除了保证了数据持久性,该策略带来的好处还有:数据传输带宽加倍,就近数据进行计算。
优点:
1)适合存储非常大的文件。
2)适合流式数据读取,即适合"只写一次,读多次"的数据处理模式。
3)适合部署在廉价的机器上。
缺点:
1)不适合存储大量的小文件,因为Namenode内存大小限制。
2)不适合实时数据读取,高吞吐量和实时性是相悖的,HDFS选择的是前者。
3)不适合需要经常修改数据的场景。
框架结构
1、名称节点(NameNode)
HDFS命名空间是一个包含文件和目录的层次结构。文件和目录在NameNode中表示为inode。inode记录访问权限、修改和访问时间、命名空间和磁盘空间指标。文件内容被分成大的block块(典型的是128M,但用户可选择其他值),每个block块被独立复制到其他多个DataNodes(典型的是3个,用户可选择其他值)。NameNode维护命名空间树以及block到DataNodes的映射关系。当前设计中,每个集群中只有一个NameNode。一个集群可以有几千个DataNodes和上万的HDFS客户端连接。
2、镜像和日志(Image and Journal)
Inode和块列表(各个块在数据节点的映射列表)定义了名称系统的元数据,称为镜像。NameNode在内存中保持全部的命名空间镜像。镜像的持久化记录存储在NameNode的本地文件系统,称为一个checkpoint。NameNode记录HDFS的改变到一个wal(write-ahead log)本地文件系统称为journal的日志文件。checkpoint不负责记录块副本的位置。
每个用户发起的事务都被记录在journal,journal文件会在发送确认给用户之前刷新并同步。NameNode不会改变checkpoint文件;当系统重启创建checkpoint时,当被管理员或者CheckpointNod