2、分布式文件系统---HDFS

1、HDFS设计前提与目标

(1)硬件错误是常态而不是异常。  错误检测并快速自动恢复是HDFS最核心设计目标

(2)流式数据访问。运行在HDFS上的应用主要是以流式数据读取为主,做批量处理而不是用户交互处理,所以HDFS更关注数据访问的高吞吐量。

(3)大规模数据集。HDFS支持大文件存储,并能提供整体上高的数据传输宽带,能在一个集群里扩展到数百个节点。

(4)简单一致性模型。HDFS的应用程序需要对文件实行一次性写、多次读的访问模式。文件一经创建、写入和关闭之后就不需要再更改了。

(5)移动计算比移动数据更划算。在数据旁边执行操作效率会比较高,可以减少网络的拥塞和提高系统的吞吐量。HDFS提供了接口,以便让程序将自己移动到数据存储的地方执行。

2、HDFS体系结构

HDFS是一个主/从(Master/Slave)体系结构,如下图所示。HDFS集群拥有一个NameNode和一些DataNode。

NameNode:管理文件系统的元数据。负责管理文件系统的命名空间,记录文件数据块在每个DataNode上的位置和副本信息,协调客户端对文件的访问,以及记录命名空间内的改动或命名空间本身属性的改动。

DataNode:存储实际的数据。负责他们所在的物理节点上的存储管理。

HDFS开放文件系统的命名空间以便让用户以文件的形式存储数据。HDFS的数据都是“一次写入,多次读取”,典型的块大小是64M.HDFS的文件通常按照64MB呗分割成不同的数据块,每个数据块尽可能地分散存储于不同的DataNode中。

 

NameNode执行文件系统的命名空间操作,比如打开、关闭、重命名文件或目录,还决定数据块到DataNode的映射。

DataNode负责处理客户的读写请求,依照NameNode的命令,执行数据块的创建、复制、删除等工作。

客户端要访问一个文件,首先客户端从NameNode中获得组成该文件的数据块位置列表,即知道数据块被存储到哪些DataNode上,然后客户端直接从DataNode上读取文件数据,NameNode不参与文件的传输。(客户端联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接与DataNode进行交互的)

NameNode使用事务日志(EditLog)来记录HDFS元数据的变化,使用影像文件(FsImage)存储文件系统的命名空间,包含文件的映射、文件的属性信息等。事务日志和映像文件都存储在NameNode的本地文件系统中。

NameNode启动时,从磁盘中读取映像文件和事务日志,把事务日志的事务都应用到内存中的映像文件上,然后新的元数据刷新到本地磁盘的新的映像文件中,这样可以截去旧的事务日志,这个过程称为检查点(Checkpoint)。

Secondary NameNode节点赋值NameNode处理映像文件和事务日志。NameNode启动的时候合并映像文件和事务日志,而Secondary NameNode会周期地从NameNode上复制映像文件和事务日志到临时目录,合并生成新的映像文件后再重新上传到NameNode,NameNode更新映像文件并清理事务日志,使得事务日志的大小始终控制在可配置的限度下。

3、HDFS可靠性措施

1)、冗余备份:DataNode使用本地文件系统来存储HDFS的数据,但他对HDFS的文件一无所知,只是用一个个文件存储HDFS的每个数据块。当DataNode启动时,他会遍历本地文件系统,产生一份HDFS数据块和本地文件对应关系列表,并把这个报告发给NameNode,这就是块报告(Blockreport)。块报告包括了DataNode上所有块的列表。

2)、副本存放:HDFS采用机架感知(Rack-aware)的策略来改进数据的可靠性、可用性和网络带宽的利用率。机架内节点间的带宽比跨机架节点直接的带宽大。

3)、心跳检测:NameNode周期性地从集群中的每个DataNode接受心跳包和块报告,NameNode可以根据这个报告验证映射和其他文件系统元数据。如果DataNode不能发送心跳消息,NameNode会标记最近没有心跳的DataNode宕机,不会发给它们任何新的I/O请求。DataNode的宕机会造成一些数据块的副本数下降并低于指定值,NameNode会不断检测需要复制的数据块,并在需要的时候重新复制。

引发重新复制的原因:DataNode不可用、数据副本的损坏、DataNode上的磁盘错误、复制因子增大等

4)、安全模式:系统启动时,NameNode会进入一个安全模式,此时不会出现数据块的写操作,文件系统不允许有任何修改。当NameNode获得的数据块达到最小副本数时,该数据块被认为是安全的。在一定比例(可配置)的数据块被NameNode检测确认安全后,再等待若干时间会自动退出安全模式。

5)、数据完整性检测:HDFS客户端软件实现了对HDFS文件内容的校验和检查,在HDFS文件创建时,会结算数据块的校验和,并将校验和作为一个单独的隐藏文件保存在命名空间下。当客户端获取文件后,他会检查从DataNode获得的数据块对应的校验和是否和隐藏文件中的相同,若不同,客户端就会认为数据块有损坏,将从其他DataNode获取该数据块的副本。

6)、空间回收:文件被删除后,并不是立即就从HDFS中移走,而是先把它移动到/trash目录里,可以恢复。

7)、元数据磁盘实效:NameNode可以配置为支持维护映像文件和事务日志的多个副本,任何对映像文件和事务日志的修改都将同步到他们的副本上。不过这会降低NameNode处理命名空间事务的速度。

8)、快照:快照支持存储某个时间的数据复制

4、HDFS常用操作

1)列出HDFS文件:$bin/hadoop dfs -ls  默认返回HDFS的‘home’目录下内容。在HDFS中没有当前工作目录概念。

2)上传文件到HDFS:$bin/hadoop dfs -put  input in

3)将HDFS中文件复制到本地文件系统:$bin/hadoop dfs -get in getin

4)删除HDFS下的文档:$bin/hadoop dfs -rmr in

5)查看HDFS下某个文件:$bin/hadoop dfs -cat in/*

6)报告HDFS的基本统计信息:$bin/hadoop dfsadmin -report

7)退出安全模式:$bin/hadoop dfsadmin -safemode leave

8)进入安全模式:$bin/hadoop dfsadmin -safemode enter

9)负载均衡:$bin/start-balancer.sh

posted @ 2013-08-07 09:54  liutoutou  阅读(429)  评论(0编辑  收藏  举报