Hadoop基础——HDFS
HDFS简介:
HDFS (Hadoop)分布式文件管理系统:基于Java的分布式文件系统允许文件通过网络在多台机器上分享的文件系统可以让多机器上的多用户分享文件和存储空间,适用于一次写入,多次查询,但是不支持并发写,不适合小文件。
HDFS:
数据块(block)
基本存储单位:64M一块,如果文件小鱼64M,不占用整个数据块的存储空间。
元数据节点:
用来管理系统的命名空间,其将所有的文件和文件夹的元数据保存在一个文件系统树中。这些信息也会在硬盘上保存成以下文件:命名空间镜像(namespace image)及修改日志(edit log)其还保存了一个文件包括哪些数据块,分布在哪些数据节点上。然而这些信息并不存储在硬盘上,而是在系统启动的时候从数据节点收集而成的。
数据节点:
数据节点是文件系统中真正存储数据的地方。客户端(client)或者元数据信息(namenode)可以向数据节点请求写入或者读出数据块。其周期性的向元数据节点回报其存储的数据块信息。
从元数据节点:
按照周期将元数据节点的命名空间镜像文件和修改日志合并,防止日志文件过大。
热备份:HDFS HA(High Availability)是为了解决单点故障问题。HA集群设置两个名称节点,“活跃(Active)”和“待命(Standby)”两种名称节点的状态同步,可以借助于一个共享存储系统来实现,一旦活跃名称节点出现故障,就可以立即切换到待命名称节点。
Zookeeper确保一个名称节点在对外服务,名称节点维护映射信息,数据节点同时向两个名称节点汇报信息
Federation(大概翻译成联盟):
多个命名空间。为了处理一个namenode的局限性,搞了几个namanode大家一起来管理。就像编程中的命名空间一样
在HDFS Federation中,设计了多个相互独立的名称节点,使得HDFS的命名服务能够水平扩展,这些名称节点分别进行各自命名空间和块的管理,相互之间是联盟(Federation)关系,不需要彼此协调。并且向后兼容
HDFS Federation中,所有名称节点会共享底层的数据节点存储资源,数据节点向所有名称节点汇报
属于同一个命名空间的块构成一个“块池”
HDFS整个文件系统的namespace在namenode的内存中,是以一棵树的结构来维护的。
在HDFS中,不管是目录还是文件,都被看作是INode,如果是目录,则其实际类标识为INodeDirectory,如果是文件,则其相应的类标识为INodeFile,这两个类都是INode的派生类。INodeDirectory中包含一个成员数组变量List children,如果该目录下有子目录或者文件,其子目录或文件的引用就会保存在children列表中。HDFS就是通过这种方式来维持整个文件系统的目录结构。
在HDFS中,名称节点(NameNode)负责管理分布式文件系统的命名空间
(Namespace),保存了两个核心的数据结构,即FsImage和EditLog
【FsImage】用于维护文件系统树以及文件树中所有的文件和文件夹的元数据
【EditLog】操作日志文件EditLog中记录了所有针对文件的创建、删除、重命名等操作(个人感觉主要是对文件元数据的修改)
名称节点记录了每个文件中各个块所在的数据节点的位置信息
HDFS 读写过程
——读的过程
——写的过程