[HDFS]初识 HDFS

Hadoop 有一个称为HDFS的分布式文件系统,有时也简称为DFS。
HDFS架构有几个关键的组件:block,namenode,datanode,secondary namenode。

一,black(数据块)
日常用的磁盘都有默认的数据块大小,这是磁盘进行数据读和写的最小单位。文件系统通过磁盘块来管理该文件系统中的块。文件系统的块一般是几千字节,而磁盘块一般是512字节。文件系统的块对于用户来说是透明的。
HDFS也有块(black),但是大得多,默认为64M,大多数情况是128M。HDFS上的文件也会被划分为块大小的多个分块,作为独立的存储单元,但是HDFS中小于一个块大小的文件不会单独占据整个块的空间。

这样对块的进行抽象会带来许多好处:
1,文件的大小可以大于网络中任意一个磁盘的容量,文件的所有块并不需要存储在同一个磁盘上,可以利用集群的任意一个磁盘进行存储。
2,简化管理,管理单元为数据块而非整个文件,并且文件的元数据(下文再说)与文件的数据分开存储和管理。
3,HDFS还会对块进行复制,将块的副本存储在其他机器上,确保块,磁盘或者机器故障,数据不会丢失。如果法像一个块不可用,系统会从其他机器读取另一个副本。具体过程以后的博文会说明。

为何HDFS的块设置的如此大?
块设置的如此之大,是为了最小化寻址时间,如果块设置的足够大,定位于这个快的开始位置时间会大大减小。因此,传输一个有多个块组成的文件的时间取决于磁盘传输速率。当然也不能设置得过大,MapReduce的map通常一次处理一个块的数据。块越大,任务数越少,启动的map减少,整个作业运行的速率会比较慢。

二,namenode
HDFS集群有两类节点以管理者和工作者的工作模式运行,namenode就是其中的管理者。它管理着文件系统的命名空间,维护着文件系统树及整棵树的所有文件和目录。这些信息以两个文件的形式保存于内存或者磁盘,这两个文件是:命名空间镜像文件fsimage和编辑日志文件edit logs ,同时namenode也记录着每个文件中各个块所在的数据节点信息。

文件包括:
(1)fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。
(2)edits:操作日志文件。
(3)fstime:保存最近一次checkpoint的时间
namenode的特点:
(1)namenode始终在内存中存储元数据(metedata),使得“读操作”更加快、
(2)有“写请求”时,向edits文件写入日志,成功返回后才修改内存,并向客户端返回。
(3)fsimage文件为metedata的镜像,不会随时同步,与edits合并生成新的fsimage。

三,secondary namenode

四,datanode
文件系统的工作节点,根据需要存储并检索数据块,并且定期向namenode发送它们所存储的块的列表。提供真实文件数据的存储服务,Replication。多复本。默认是三个。
hdfs-site.xml的dfs.replication属性设置。