系统的可用性
NDFS的可用性取决于Blocks的冗余度,即应该在多少个DataNode保持同一Block的备份。对于有条件的话可以设置3个备份和2个最低备份(DESIRED_REPLICATION and MIN_REPLICATION constants in fs.FSNamesystem)。
当一个块的低于MIN_REPLICATION,NameNode就会指导DataNode做新的备份。
net.nutch.fs包的一些文件介绍
1)NDFS.java:包含两个main函数,一个是关于NameNode的,一个是关于DataNode的
2)FSNamesystem.java:维护名字空间,包含了NameNode的功能,比如如何寻找Blocks,可用的DataNode序列
3)FSDirectory.java:被FSNamesystem调用,用于维护名字空间的状态。记录NameNode的所有状态和变化,当NameNode崩溃时,可以根据这个日志来恢复。
4)FSDataset.java: 用于DataNode,维护Block序列等
5)Block.java and DatanodeInfo: 用于维护Block信息
6)FSResults.java and FSParam.java: 用于在网络上传送参数等
7)FSConstants.java:包含一些常数,用于参数调整等。
8)NDFSClient.java:用于读写数据
9)TestClient.java:包含一个main函数,提供一些命令用于对NDFS的存取访问
简单的例子
1)创建NameNode:
Machine A:java net.nutch.fs.NDFS$NameNode 9000 namedir
2)创建DataNode:
Machine B:java net.nutch.fs.NDFS$DataNode datadir1 machineB 8000 machineA:9000
Machine C:java net.nutch.fs.NDFS$DataNode datadir2 machineC 8000 machineA:9000
运行1,2步后,则得到了一个NDFS,包含一个NameNode和两个DataNode。(可以在同一台机 的不同目录下安装NDFS)
3)client端的文件访问:
创建文件:java net.nutch.fs.TestClient machineA:9000 CREATE foo.txt
读取文件:java net.nutch.fs.TestClient machineA:9000 GET foo.txt
重命名文件:java net.nutch.fs.TestClient machineA:9000 RENAME foo.txt bar.txt
再读取文件:java net.nutch.fs.TestClient machineA:9000 GET bar.txt
删除文件:java net.nutch.fs.TestClient machineA:9000 DELETE bar.txt