hadoop HDFS结构

来源:互联网 发布:网络教育本科毕业论文 编辑:程序博客网 时间:2024/06/04 19:25


HDFS

结构

Master/slave结构

1.     NameNode:相当于master,管理文件系统命名空间和客户端对文件的访问

 负责打开关闭 重命名 目录等命名空间相关操作,还有负责block到datanode的映射

2.     DataNodes:集群中的一个node对应一个datanode,表示对应node的存储空间

响应来自客户端的读写等操作和来自命名空间对于block的创建删除 复制等命令

3.     Blocks:一个文件存储的时候被切片(split)成很多block存储在datanode中

补充:namenode datanode都是运行在linux系统中的一系列软件,HDFS用java实现

 

 

The File System Namespace

       跟其他大多数文件系统一样,采用分层的结构

支持用户分配配额(quotas),包括三种类型的quotas,一是namequotas,指定某个目录节点能够使用的name的个数。二是space quotas,指定某个目录节点能够使用的磁盘空间大小,单位为byte。三是storetype quotas(SSD,DISK,ARCHIVE),指定某个目录节点能使用的存储类型的个数

   通过命令行来设置:

1.       hdfsdfsadmin -setQuota <N> <directory>...<directory>

hdfs dfsadmin -clrQuota<directory>...<directory>

2.       hdfs dfsadmin -setSpaceQuota <N><directory>...<directory>

hdfs dfsadmin -clrSpaceQuota<directory>...<directory>

3.       hdfs dfsadmin -setSpaceQuota <N> -storageType<storagetype> <directory>...<directory>

hdfs dfsadmin -clrSpaceQuota -storageType<storagetype> <directory>...<directory>

    支持用户访问控制

三个步骤实现用户访问控制

1. User Identity

两种mode,一是simple由操作系统控制二是通过kerberos安全认证

2. group mapping

group mapping service进行用户分组,

3.   PermissionChecks

Data Replication

File被split成block,每个file可以配置冗余factor和blocksize,除最后一个block外所有的block大小都是一样的,,factor可以创建file时指定,后面也可以更改,NameNode每隔一段时间接受每个datanode发来的heartbeat和blockreport,收到heartbeat表示datanode功能正常,blockreport包含在这个datanode上的block list.

1.  ReplicaPlacement: The First Baby Steps(冗余block的存储)

采用的策略:rack-aware replica placement policy(rack:局域网)

Cluster的nodes可能分布在不同的rack,不同的rack间的node要经过(switchs)交换机,因此在同一个rack下的node具有更高的带宽。NameNode通过hadoop rack awareness来确定每个node的rack id;

一般重复factor为3,此时的策略是一个block放在local rack 其中的一个datanode中,另一个block放在local rack的另一个datanode中,最后一个放在其他的某个rack的其中一个datanode中,相对于每个rack中放置一个block,这种策略改进了写性能,却没有降低可用性。对于factor超过3的部分,在不超过每个rack放置重复block的上限的情况下随机放置(上线一般为replicas - 1) /racks + 2);一个datanode不能包含一个block的多个冗余block,因此factor最大值为datanode数目。

2.  Replice choose

选择离read request所在rack近的block读取数据,以降低带宽消耗和读延迟

3.  safemode

Namenode接受datanode的heartbeat和blockreport,对于少于指定replica factor的block进行复制,已达到指定要求。

The Persistence of File SystemMetedata

       HDFSnamespace保存在namenode上,对于发生在filesystem上的change,namenode都会用一个transaction Log名为editlog记录下来,namenode用本地主机上的file System 中的file来存储这个editlog。整个HDFS namespace保存在一个叫FsImage的文件中,包括blocks to files mapping和文件系统原型信息,FsImage也是用本地主机文件系统中的文件来存储的。

       当NameNode启动或者触发checkpoint(类似word的自动保存)时,EditLog和FsImage被读入内存,editlog中的操作被全部应用到FsImage中,新的FsImage被写到硬盘,Editlog中的内容被清除,这个过程就叫checkpoint。这种方式而不是每次来了一个change request就修改FsImage的原因是为了提高效率,时间(s)和editlog中record 的数量可以用来设置触发checkpoint,时间是第一优先。

       DataNode不知道HDFS file,每个block对应于一个DataNode本地OS中的一个独立的file,并不把所有的block放在一个单独的目录下,先验的方式以合适的数目放置block和建新的目录。DataNode启动时给NameNode发送blockList,即本地OS保存的那些文件。

The Communication Protocols

所有的协议都是基于TCO/IP的,RPC

Robustness(鲁棒性)

主要三个问题:NameNode failure、DataNode failure、network partition

1.     data disk failure ,heartbeatsand re-replication

每个datanode周期性的发送heartbeat信息给namenode,如果一段时间没有收到namenode会认为那个datanode是dead,所有对于那个datanode的I/O不再有效。对于由于datanode失效使得一些block的replica丢失,由namenode进行重新复制.

2.     cluster reblancing

如在某些node的存储负荷很大在其它node存储负荷很小,这时就需要重新平衡

3.     data integrity

对于datanode中a block of data可能的损坏,在namenode中存储每个block对应的校验和checksum,当客户端接受到的block中的data与namenode中的checksum匹配则说明数据是正确的。

4.     metedata disk failure

多个备份的FsImage和EditLog文件,每回更新,异步更新备份。

5.     snapshot

snapshot支持在某个时间维护一个数据副本,使得发生错误时能回滚到之前的状态

Data Organization

1.     data block

128MB

2.     staging

在client端设置一个缓冲区,大小为一个block size,client向HDFS写入一个文件的时候先向缓冲区写数据,当缓冲区满了之后通知namenode,namenode为其分配一个block,并修改FsImage。Namenode分配block时回复client的通知datanode的id,client把客户端的数据写到对应datanode中。最后一个block数据可以不填满缓冲区,通知namenode文件结束。在这些操作完成之前如果namenode dies,file全部丢失。

3.     replication pipelining

每次当client把缓冲区填满的时候,通知namenode,namenode会返回一个datanodeid的list以实现冗余,每个datanode接收block data的时候分部分接收,每接收一部分把这部分存储在本地并向下一个datanode发送这部分数据,直到list最后一个datanode。数据以管道的方式流动实现冗余。

Accessibility

1.     JAVA API

2.     C and Rest API

3.     BrowseAPI to browse files(HTTP)

4.     NFS gateway

5.     FS shell

命令行:

Action

Command

Create a directory named /foodir

bin/hadoop dfs -mkdir /foodir

Remove a directory named /foodir

bin/hadoop fs -rm -R /foodir

View the contents of a file named /foodir/myfile.txt

bin/hadoop dfs -cat /foodir/myfile.txt

 

 

0 0
原创粉丝点击