hdfs分布式文件系统是Hadoop上两大支柱之一。

它的主要特点有:大规模分布式存储能力,高并发访问能力,高容错,顺序式文件访问,一致性模型简单能特点。

它的架构是主从式架构。有一个主控节点NameNode来管理整体文件结构。

NameNode主要存放命名空间(文件系统目录结构),数据块(64MB)与文件名的映射,数据块副本信息(默认3副本)。

DataNode来保存具体的文件数据块。

实际上,NameNode可以看做一个逻辑上的文件系统。客户端所有的逻辑交互都是与NameNode进行,包括新建文件,移动,删除等操作。

都是由NameNode根据映射表找到具体存放数据块的DataNode节点,然后DataNode进行本地处理,最后将处理结果发送给NameNode。

但访问文件时,客户端由NameNode获得地址后,直接访问DataNode获取数据。这样减轻了NameNode负担,而且可以并发执行。

只不过访问结果(成功与否)要发送给NameNode。

HDFS间大部分数据都是通过网络传输的,采用TCP协议作为底层支持协议。

那么怎么保证HDFS的高可靠性呢?

首先具体存放数据的DataNode是多副本存放的,最少3副本,这样通过冗余,保证可靠。

其次,作为管理节点NameNode,每次启动时要进行安全模式自检,运行时要通过定时发送的心跳包,来检测DataNode可靠性,更新DataNode状态。对于出错DataNode,自动新建副本。

传输时,通过校验和来保证传输的可靠性。写文件,通过定时租约机制(实际上就是锁),来保证互斥性。

那NameNode节点失效了怎么办呢?

HDFS有对NameNode进行备份的节点SecondNameNode,定时备份NameNode上的文件镜像数据及编辑日志数据,这样NameNode失效,就可直接恢复。

 

HDFS命令与linux文件管理命令类似,不过要加上前缀: hadoop dfs -chmod.

另外HDFS的DataNode节点备份都是自动管理,也可以通过balancer命令手动管理。

如果想要以管理员身份管理HDFS,可以用dfsadmin命令,另外Hadoop还提供了web方式来查看HDFS信息。

对于编程,Hadoop提供了读写操作的API, 程序员可以编程操作。重要的类有:FileSystem, FSDataInputStream, FSDataOutputSt