分享
 
 
 

Nutch分布式文件系统

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

1.介绍

NDFS:在一系列机器上存储庞大的面向流的文件,包含多机的存储冗余和负载均衡。

文件以块为单位存储在NDFS的离散机器上,提供一个传统的input/output流接口用于文件读写。

块的查找以及数据在网络上传输等细节由NDFS自动完成,对用户是透明的。而且NDFS能很好地处理

用于存储的机器序列,能方便地添加和删除一台机器。当某台机器不可用时,NDFS自动的保证文件

的可用性。只要网上的机器序列能提供足够的存储空间,就要保证NDFS文件系统的正常运作。

NDFS是建立在普通磁盘上的,不需要RAID控制器或者其它的磁盘阵列解决方案。

2.语法

1). 文件只能写一次,写完之后,就变成只读了(但是可以被删除)

2). 文件是面向流的,只能在文件末尾加字节流,而且只能读写指针只能递增。

3). 文件没有存储访问的控制

所以,所有对NDFS的访问都是通过验证的客户代码。没有提供API供其它程序访问。因此Nutch就是NDFS的

模拟用户。

3.系统设计

NDFS包含两种类型的机器:NameNodes和DataNodes: NameNodes维护名字空间;而DataNodes存储数

据块。NDFS中包含一个NamdNode,而包含任意多的DataNodes,每个DataNodes都配置与唯一的NameNode

通信。

1)NameNode: 负责存储整个名字空间和文件系统的布局。是一个关键点,不能down掉。但是做的工作

不多,因此不是一个负载的瓶颈。

维护一张保存在磁盘上的表: filename-0->BlockID_A,BlockID_B...BlockID_X,etc.;

filename就是一字符串,BolockID是唯一的标识符。每个filename有任意个blocks。

2)DataNode:负责存储数据。一个块应该在多个DataNode中有备份;而一个DataNode对于一个块最多

只包含一个备份。

维护一张表:BlockID_X->array of bytes..

3)合作:DataNode在启动后,就主动与NameNode通信,将本地的Block信息告知NameNode。NameNode据

此可以构造一颗树,描述如何找到NDFS中的Blocks。这颗树是实时更新的。DataNode会定期发送信息给

NameNode,以证明自己的存在,当NameNode收不到该信息时,就会认为DataNode已经down了。

4)文件的读写过程:例如Client要读取foo.txt,则有以下过程。

a.Client通过网络联系NameNode,提交filename:"foo.txt"

b.Client收到从NameNode来的回复,包含:组成"foo.txt"的文件块和每个块存在的DataNode序列。

c.Client依次读取每个文件块。对于一个文件块,Client从它的DataNode序列中得到合适的DataNode,

然后发送请求给DataNode,由DataNode将数据传输给Client

4.系统的可用性

NDFS的可用性取决于Blocks的冗余度,即应该在多少个DataNode保持同一Block的备份。对于有条件的话

可以设置3个备份和2个最低备份(DESIRED_REPLICATION and MIN_REPLICATION constants in fs.FSNamesystem)。

当一个块的低于MIN_REPLICATION,NameNode就会指导DataNode做新的备份。

5.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的存取访问

6.简单的例子

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有