Nutch分布式文件系统

 转自:http://hi.baidu.com/hanjunjie1986/blog/item/4585f813e5050a21dd5401ec.html

Nutch分布式文件系统

6.1 概述

Nutch抓取下内容之后就要开始对文件进行管理。Nutch分布式文件系统基础架构是Hadoop文件系统(正式的讲就是NDFS)NDFSGoogle的文件系系统GFS是类似的,在一系列机器上存储庞大的面向流的文件,包含多机的存储冗余和负载均衡。

在这个文件系统中,文件以块为单位存储在NDFS的离散机器上,提供一个传统的input/output流接口用于文件读写。块的查找以及数据在网络上传输等细节由NDFS自动完成,对用户是透明的。而且NDFS能很好地处理用于存储的机器序列,能方便地添加和删除一台机器。当某台机器不可用时,NDFS自动的保证文件的可用性。只要网上的机器序列能提供足够的存储空间,就要保证NDFS文件系统的正常运作。NDFS是建立在普通磁盘上的,不需要RAID控制器或者其它的磁盘阵列解决方案。

6.2 文件系统语法

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

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

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

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

6.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,则有以下过程。

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

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

3.      Client依次读取每个文件块。对于一个文件块,Client从它的DataNode序列中得到合适的DataNode,然后发送请求给DataNode,由DataNode将数据传输给Client

6.4.系统的可用性

NDFS的可用性取决于Blocks的冗余度,即应该在多少个DataNode保持同一Block的备份。对于有条件的话可以设置3个备份和2个最低备份(DESIRED_REPLICATION and MIN_REPLICATION constants in fs.FSNamesystem)。当一个块的低于MIN_REPLICATION, NameNode 就会指导DataNode做新的备份。

6.5 MapReduce

Hadoop是Google MapReduce的一个Java实现。MapReduce Nutch中的分布计算层。它主要分为map Reduce 两步。输入和输出数据是包含一系列键-值对的文件。

map 阶段,输入数据被分割成由各个节点处理的连续的块。用户使用的map 功能将每个原始数据处理成中间数据集。通过该分割功能,每个中间数据被发送到Reduce 节点。分割是一个典型的hash过程,所有等键值的中间数据都将被发送到一个Reduce 节点。例如,如果一个map 操作输出以URL 为键值的数据,那么通过哈希值的分割就会发送中间数据以及给定的URL到一个Reduce节点。

Reduce 节点将所有的输入数据进行排序,并使用一个提供给用户的Reduce函数输出已经排序的map,产生MapReduce过程的最终输出。所有带有给定键值的输入都将交由Reduce处理,即以URL 为健值的所有数据和URL 一起被传递给Reduce函数,并可能用于产生最终输出。

MapReduce系统非常十分健壮,即使在机器出现故障和应用程序错误时仍能正常运行。因此我们可以利用它运行上十,上百,甚至上千台机器上进行并行操作。

6.6 Nutch文件系统工作架构

通过上面的分析,我们可以得出Nutch文件系统在整个工作架构中的位置如下:


 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值