HDFS详解
可以在http://master:50070上访问hdfs的web页面。
本文章主题如下:
-
HFDS结构
-
NameNode
-
DataNode
-
Secondary NameNode
-
Block
-
Block副本管理
-
机架感知策略
-
HDFS结构
Hadoop分布式系统 —— HDFS,它是一个块结构文件系统,它的每个文件都被分割成许多预定大小的块。这些块被存储在集群中的一台或多台机器上。HDFS遵循主/从结构,集群中拥有一台单独的NameNode(主节点),其它节点都是DataNode(从节点)。
-
NameNode
NameNode维护并管理着DataNode上的block。
以下是NameNode的功能:
- 维护并管理着DataNode节点;
-
记录着集群中所有文件的元数据(metadata)信息,比如:block的存储位置,文件的大小,权限,层级关系等。有两个文件关联着元数据(metadata):
-
FsImage: 记录着文件系统命名空间(namespace)自从上一次启动之后的完整状态。
-
EditsLog:记录着相对于最近的FsImage,客户端对文件系统所有修改的信息。
- 记录着文件系统中元数据所发生的所有变化,比如:HDFS中的某个文件被删除,NameNode立即在EditLog中进行记录。
- 定期从集群中的所有DataNode接收心跳和块报告,用来确认DataNode是否宕机。
- 保存着HDFS中所有块的记录,以及这些块位于哪个节点。
- 负责处理所有块的副本。
- 在DataNode宕机的情况下,NameNode会为副本选择新的DataNode,平衡磁盘的使用量,管理DataNode间的通信流量。
-
DataNode
DataNode是HDFS中的从节点,它是将数据以ext3或者ext4这种文件格式,存储在本地的块服务器。
以下是DataNode的功能:
- 处理文件客户端的低级读写请求。
-
向NameNode定期发送心跳汇报HDFS总体的健康状况,默认情况下,每3秒发送一次。
-
Secondary NameNode
它的职责是辅助NameNode工作,而不是备用节点。
Secondary-NameNode.png它的功能如下:
- 合并来自NameNode的FsImage和EditLog,并将合并之后的FsImage文件拷贝给NameNode。
-
Block
存储在DataNode磁盘上的文件块,默认大小是128M(1.x默认大小是64M),可通过hdfs-site.xml 文件配置dfs.blocksize 属性来制定block大小。block文件可以在DataNone的
{dfs.datanode.data.dir}/data/current/XXX/current/finalized/xx/
目录下找到。如果block块太小,将会导致一个文件将会被分割成非常多的块,以至于会有非常多mateData数据,浪费内存以及硬盘空间。
-
Block副本管理
Block默认是3个,
Replication-Management.png
以在配置文件中设置。
-
机架感知策略
HDFS的存放策略(机架感知策略)是将一个副本存放在本地机架的节点上,一个副本放在同一机架的另一个节点上,最后一个副本放在不同机架的节点上
Rack-Awareness.png机架感知策略的有点:
- 提高网络性能:这种策略减少了机架间的数据传输,这就提高了写操作的效率,数据块只放在两个(不是三个)不同的机架上,因此减少了读取数据时需要的网络传输总带宽。
- 避免数据丢失:副本分布在不同机架上不同节点上,不会因为某个机架或者节点宕机而导致数据丢失。
文献:https://www.edureka.co/blog/apache-hadoop-hdfs-architecture/?utm_source=quora&utm_medium=crosspost&utm_campaign=social-media-edureka-ab
http://zheming.wang/blog/2015/07/24/17505A21-0204-48AB-8EBE-EAC911B22821/