赞
踩
分布式文件系统把文件分布存储到多个计算机节点上,通过网络实现文件在多台主机上进行分布式存储的文件系统。
分布式文件系统有两大模式:
目前的分布式文件系统所采用的计算机集群,都是由普通硬件构成的,大大降低了硬件上的开销。
分布式文件系统在物理结构上是由计算机集群中的多个节点构成的,这些节点分为两类:
一类叫**“主节点”(Master Node)或者也被称为“名称结点”(NameNode)**
另一类叫**“从节点”(Slave Node)或者也被称为“数据节点”(DataNode)**
设计目标:透明性、并发控制、可伸缩性、容错及安全需求等。
透明性:
- 包括访问透明性、位置透明性、性能和伸缩透明性
- 访问透明性:用户不需要专门区分哪些是本地文件,哪些是远程文件。用户能够通过相同的操作来访问本地和远程文件资源。
- 位置透明性:不改变路径名的前提下,不管文件副本数量和实际存储位置发生何种变化,对用户而言都是透明的。
- 性能和伸缩透明性:系统中节点的增加和减少以及性能的变化对用户而言是透明的,用户感觉不到什么时候节点加入或退出。
- HDFS 只能提供一定程度的访问透明性,完全的位置透明性、性能和伸缩透明性,HDFS提供的访问的透明性是不完全的。
HDFS要实现以下目标:
与之俱来的局限性:
HDFS采用抽象的块概念可以带来以下几个明显的好处:
HDFS Client、NameNode、DataNode、Secondary NameNode
HDFS集群中有两类节点,管理节点-工作节点模式。
一个Namenode,多个Datanode。
NameNode文件操作
NameNode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,数据流不经过NameNode,会询问它与哪个DataNode联系
NameNode副本
文件数据块到底存放到哪些DataNode上,是由NameNode决定,NameNode根据全局情况做出放置副本的决定。
NameNode心跳机制
FsImage和Editblog
每个文件和每个数据块的引用关系数据会定期保存到本地磁盘(fsimage文件和edits文件)
FsImage文件
名称节点的启动
名称节点的容错
Namenode的容错非常重要,Hadoop提供了两种机制:
DataNode的功能
- DataNode以数据块的形式存储HDFS文件
- DataNode响应HDFS客户端读写请求
- DataNode周期性向NameNode汇报心跳信息
- DataNode周期性向NameNode汇报数据块信息
- DataNode周期性向NameNode汇报缓存数据块信息
问题引入:
在名称节点运行期间,HDFS的所有更新操作都是直接写到EditLog中,久而久之, EditLog文件将会变得很大。
虽然这对名称节点运行时候是没有什么明显影响的,但是,当名称节点重启的时候,名称节点需要先将FsImage里面的所有内容映像到内存中,然后再一条一条地执行EditLog中的记录,当EditLog文件非常大的时候,会导致名称节点启动操作非常慢,而在这段时间内HDFS系统处于安全模式,一直无法对外提供写操作,影响了用户的使用。
解决方案:
第二名称节点是HDFS架构中的一个组成部分,它是用来保存名称节点中对HDFS 元数据信息的备份,并减少名称节点重启的时间。
SecondaryNameNode一般是单独运行在一台机器上。
SecondaryNameNode的功能:
SecondaryNameNode的工作情况:
注:Fsimage和edits合并
- Fsimage文件包含整个文件系统所有的文件和目录,是文件系统元数据的持久化检查点,当NameNode重启后都需载入fsimage进入内存,恢复到某个检查点,再执行检查点后的编辑日志,进行重建。
- edits是编辑日志文件,记录检查点后所有文件等信息的改动
解决单点故障
HDFS HA:通过主备NameNode解决,如果主NameNode发生故障,则切换到备NameNode上
解决内存受限问题
HDFS Federation(联邦机制)、HA,2.x 支持2个节点的HA,3.0实现了一主多从
①水平扩展,支持多个NameNode;
②每个NameNode分管一部分目录;
③所有NameNode共享所有DataNode存储资源
HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点(NameNode)和若干个数据节点(DataNode)。
名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问。
集群中的数据节点一般是一个节点运行一个数据节点进程,负责处理文件系统客户端的读/写请求,在名称节点的统一调度下进行数据块的创建、删除和复制等操作。每个数据节点的数据实际上是保存在本地Linux文件系统中。
HDFS通信协议分为两种:
Hadoop RPC接口主要包括:
DatanodeProtocol接口:
ClientDatanodeProtocol协议
客户端进程与Datanode进程之间进行通信所使用的协议
DatanodeProtocol协议
当Datanode进程需要与NameNode进程进行通信是需要基于此协议,例如发送心跳报告和块状态报告
InterDatanodeProtocol协议
是Datanode进程之间进行通信的协议,例如客户端进程启动复制数据块,此时可能需要在Datanode结点之间进行块副本的流水线复制操作。
客户端是用户操作HDFS最常用的方式,HDFS在部署时都提供了客户端
HDFS客户端是一个库,暴露了HDFS文件系统接口,这些接口隐藏了HDFS实现中的大部分复杂性
严格来说,客户端并不算是HDFS的一部分
客户端可以支持打开、读取、写入等常见的操作,并且提供了类似Shell的命令行方式来访问HDFS中的数据
此外,HDFS也提供了Java API,作为应用程序访问文件系统的客户端编程接口
HDFS只设置唯一一个名称节点,这样做虽然大大简化了系统设计,但也带来了一些明显的局限性,具体如下:
(1)命名空间的限制:名称节点是保存在内存中的,因此,名称节点能够容纳的对象(文件、块)的个数会受到内存空间大小的限制。
(2)性能的瓶颈:整个分布式文件系统的吞吐量,受限于单个名称节点的吞吐量。
(3)隔离问题:由于集群中只有一个名称节点,只有一个命名空间,因此,无法对不同应用程序进行隔离。
(4)集群的可用性:一旦这个唯一的名称节点发生故障,会导致整个集群变得不可用。
作为一个分布式文件系统,为了保证系统的容错性和可用性,HDFS采用了多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点上,这种多副本方式具有以下几个优点:
(1)加快数据传输速度
(2)容易检查数据错误
(3)保证数据可靠性
第一个副本:放置在上传文件的数据节点;如果是集群外提交,则随机挑选一台磁盘不太满、CPU不太忙的节点
第二个副本:放置在与第一个副本不同的机架的节点上
第三个副本:与第一个副本相同机架的其他节点上
更多副本:随机节点
HDFS具有较高的容错性,可以兼容廉价的硬件,它把硬件出错看作一种常态,而不是异常,并设计了相应的机制检测数据错误和进行自动恢复,主要包括以下几种情形:名称节点出错、数据节点出错和数据出错。
名称节点保存了所有的元数据信息,其中,最核心的两大数据结构是FsImage和Editlog,如果这两个文件发生损坏,那么整个HDFS实例将失效。因此,HDFS设置了备份机制,把这些核心文件同步复制到备份服务器SecondaryNameNode上。当名称节点出错时,就可以根据备份服务器SecondaryNameNode中的FsImage和Editlog数据进行恢复。
HDFS有很多shell命令,其中,fs命令可以说是HDFS最常用的命令利用该命令可以查看HDFS文件系统的目录结构、上传和下载数据、
创建文件等。
Hadoop中有三种Shell命令方式:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。