zoukankan      html  css  js  c++  java
  • Hadoop 学习之——HDFS

      HDFS是HADOOP中的核心技术之一——分布式文件存储系统。Hadoop的作者Doug Cutting 和Mike 是根据Google发布关于GFS 的研究报告所设计出的分布式文件存储系统。

    一、HDFS设计的前提或者假设有6个:

    1. 硬件错误是常态而不是异常。对于普通的每台机器来说,出现故障可能并是是常事,但HDFS可能由成千上万的机器组成,在这中情况下发生硬件错误就变成非常正常的事情。为了能够正常的工作,HDFS要能处理或者容忍这些硬件错误。所以对HDFS 来说硬件错误是常态而不是错误。
    2. 流式数据访问,运行在HDFs上的应用主要是以流式数据读取为主,做批处理而不是用户交互处理,因此,HDFS更关注数据访问的高吞吐量。
    3. 大规模数据集。HDFS  典型的文件大小都在GB 级甚至是TB级。因此HDFS支持大文件存储。
    4. 简单一致的模型。HDFS 对应用程序需要的文档实行一次写,多次读的访问模式。文件一经创建、写入和关闭后就不需要再更改了。
    5. 移动计算比移动数据更划算。对于大文件来说,移动计算的代价要比移动小的多。这样可以提高执行的效率同时也减小了网络拥塞和提高系统吞吐量

    二、HDFS的体系结构

      HDFS是一个主/从结构(Master 和Slave ),包括一个NameNode 和多个DataNode ,NameNode负责管理系统的元数据,DataNode 存储实际的数据。客户端通过NameNode和DataNode的交互访问文件系统。客户端通过NameNode获取文件的元数据,而真正的文件I/O操作是直接和DataNode 进行交互。

      NameNode负责管理文件系统的命名空间,记录文件块在每个DataNode上的位置和副本信息,协调客户端对文件的http://i.cnblogs.com/EditPosts.aspx?opt=1访问,记录命名空间内的改动或命名空间本身属性的变化。DataNode则负责所在物理节点傻瓜你的存储管理。

      HDFS的数据都是“一次写入、多次读取”,典型的块的大小是64MB,HDFS文件通常被切分成64MB 的数据块(Block),每个数据块尽可能的分散的存储在不同的DataNode中。NameNode执行文件系统命名空间操作,比如打开,关闭、重命名文件和目录,还决定数据块到DataNode的映射。DataNode负责处理客户端的读写请求,依照NameNode的命令,执行数据的创建、复制、删除等操作。

      假如客户端要访问一个文件,首先客户端先从NameNode获取到组成在文件的数据块的位置列表。即知道数据块被存储在哪些DataNode上 ;然后客户端直接从DataNode上读取文件数据。此过程中NameNode不参与文件的传输。

      HDFS典型的部署是在一个专门的机器上运行NameNode,集群上其他机器各运行一个或多个DataNode。也可以在运行NameNode的机器上运行DataNode。NameNode使用事务日志(EditLog)来记录HDFS元数据的变化,使用映像文件(FsImage)存储文件系统的命名空间,包含文件的映射、文件的属性等。日志事务日志和映像文件都存储在NameNode的本地文件系统中,NameNode启动时,从磁盘中读取映像文件和事务日志,把事务日志的事务都应用到内存中的映像文件傻瓜你,然后将新的元数据刷新到本地磁盘的映像文件中,这样可以截去旧的事务日志,这个过程成为检查点(checkpoint)。

      从上面的描述中可以看出NameNode是整个文件系统的核心,而且他只运行在一台机器上,那么如果这个机器挂掉,那整个文件系统都会崩溃。于是就存在了Secondary NameNode 节点,Secondary NameNode 周期地将事务日志(EditLog)中记录的对HDFS的操作合并到一个checkPoint中,然后清空EditLog 。所以Namenode重启就会载入最新的CheckPoint,并replayEditLog中记录的hdfs的操作。保证了HDFS 系统的完整性。

    三、保障HDFS可靠性措施

      HDFS设计的主要目标就是在故障情况下也能保证数据存储的可靠性,他主要从一下几个方面保证:

    1. HDFS将每个文件存储成一系列数据库,默认大小问64MB(可以配置) 。为了容错,文件的所有数据块都会有副本(副本个数即副本因子,可配置)。当DataNode启动时,会遍历本地文件系统,产生HDFS数据块和本地文件对应关系的列表,并发给NameNode ,这就是块报告,他上面包括了DataNode 上所有的块列表。
    2. HDFS集群一般运行在多个机架上。不同机架的通信需要通过交换机,当复制因子是3时,HDFS的部署策略将一个副本放在同一个机架的另一个节点,一个副本存放在本地机架的节点。最后一个存放在不同机架上的节点。即保证了数据的可靠和可用,又减少了通信压力保证性能。
    3. 心跳检测,NameNode 周期的从DataNode接受心跳包和块报告。收到心跳包说明该DataNode正常工作。如果最近一段时间没有发送,NameNode 会标记他为宕机,然后不会发给他们任何新的I/O请求。DataNode宕机会造成数据块的副本数量下降。NameNode 会检测这些需要复制的数据块,并在需要的时候进行复制。
    4. 安全模式:系统启动时,NameNode进入到一个安全模式。此模式不会出现数据块的写操作,NameNode会接收各个DataNode 拥有的数据块的报告,由此,NameNode 可以获得所有数据块的信息。数据块达到最小副本要求时,该数据块被认为是安全的。在被确认是安全后,在等待若干时间,会自动推出安全模式。当检测到副本数不足的数据块,该块会被复制到其他数据节点,一达到最小副本数。
    5. 数据块完整性检测:客户端软件实现了对HDFS 文件内容的校验和检查。在文件创建是,会计算每个数据块的校验和。并价格你校验和作为一个单独的隐藏文件保存在命名空间下。当客户端获取文件后会计算数据块的校验和,并与隐藏文件中的校验和比较。如果不同则认为有损坏
    6. 空间回收:文件被用户删除后,并不是立即从HDFS中移除,而是把它移动到/trash目录中。只要在这个目录下就可以快速恢复。文件在/trash中的时间可以配置,超过这个时间就会被自动删除。
    7. 保留多个映像文件和事务日志的副本:任何对映像文件和事务日志的修改都将同步到他们的副本中。当NameNode重新启动时,总是选择最新的NameNode和DataNode。
  • 相关阅读:
    centos 用户管理
    rsync 实验
    文件共享和传输
    PAT 1109 Group Photo
    PAT 1108 Finding Average
    PAT 1107 Social Clusters
    PAT 1106 Lowest Price in Supply Chain
    PAT 1105 Spiral Matrix
    PAT 1104 Sum of Number Segments
    PAT 1103 Integer Factorization
  • 原文地址:https://www.cnblogs.com/xiangfeng/p/4230715.html
Copyright © 2011-2022 走看看