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