Hadoop组件之HDFS作用及设计原理

目录

介绍

设计初衷

架构

物理结构

其他功能设计

文件系统命名空间

数据复制

文件系统元数据的持久性

通讯协议:基于TCP/IP

可靠性

总结:HDFS 的特点

高容错

高吞吐量

大文件支持

简单一致性模型

跨平台移植性


介绍

Hadoop Distributed File System (HDFS™): A distributed file system that provides high-throughput access to application data.

HDFS 是 Hadoop 下的分布式文件系统,具有高容错、高吞吐量等特性,可以部署在低成本的硬件上。它与现有的分布式文件系统有许多相似之处。但是,与其他分布式文件系统的区别很明显:

  • HDFS具有高度的容错能力,旨在部署在低成本硬件上。
  • HDFS提供对应用程序数据的高吞吐量访问,并且适用于具有大数据集的应用程序。
  • HDFS放宽了一些POSIX(可移植操作系统接口:Portable Operating System Interface,缩写为POSIX)要求,以实现对文件系统数据的流式访问。
  • HDFS最初是作为Apache Nutch Web搜索引擎项目的基础结构而构建的。

设计初衷

  1. 硬件故障容错性:检测故障并从故障中快速自动恢复是HDFS的核心架构目标
  2. 流式数据访问友好性:首要能力是提高数据的吞吐率而非低延迟
  3. 支持大数据集合操作
  4. 简化一致性模型:减弱数据更新一致性,提升吞吐量
  5. 移动式计算而非移动数据:改变原有以计算为中心的思路,数据在哪儿,计算便在哪儿
  6. 可移植性:可轻松移植

设计初衷决定产品架构和最终形态!

架构

物理结构

HDFS的物理结构设计为主/从模式。物理集群由一个NameNode(负责管理文件系统命名空间,并控制客户端对文件的访问)以及许多数据节点DataNode组成。数据节点通常是每个物理节点一个,用于管理它们所运行节点的存储。在内部,文件被分成一个或多个块,这些块存储在一组DataNode中。

  • NameNode执行与文件系统命名空间相关的操作,例如打开,关闭和重命名文件和目录。它还负责存储集群元数据,并记录数据块到DataNode的映射。
  • DataNode负责处理来自文件系统客户端的读写请求,还会执行块的创建,删除操作,

注意:单个的NameNode是专门为简化系统体系设计,仅负责命名空间等控制性操作,且用户数据不会流向NameNode。

其他功能设计

文件系统命名空间

HDFS支持传统的分级文件模式。

  1. 用户或应用程序可以创建目录并将文件存储在这些目录中。
  2. 文件系统名称空间层次结构与大多数其他现有文件系统类似;可以创建和删除文件,将文件从一个目录移动到另一个目录或重命名文件。
  3. HDFS支持配额(允许管理员为使用的名称数和用于单个目录的空间量设置配额)和文件权限控制
  4. HDFS不支持硬链接或软链接(但是,HDFS并不排除实现这些功能)

NameNode维护文件系统的命名空间,对文件系统名称空间或其属性的任何更改都由NameNode记录,应用程序可以指定HDFS应该维护的文件副本的数量。

文件的副本数称为该文件的复制因子,此信息由NameNode存储。

数据复制

HDFS旨在大型集群中的计算机之间可靠地存储非常大的文件,它将每个文件存储为一系列块(即Block),该设计是为了容错,块大小和复制因子是每个文件可配置的。

文件中除最后一个块外的所有块都具有相同的大小,而在添加了对可变长度块的支持后,用户可以在不填充最后一个块的情况下开始新的块,而不用配置的块大小。

应用程序可以指定文件的副本数。复制因子可以在文件创建时指定,以后可以更改。

HDFS中的文件只能写入一次(追加和截断除外),并且在任何时候都只能具有一个写入器,NameNode做出有关块复制的所有决定。它定期从群集中的每个DataNode接收心跳信号和Blockreport。收到心跳信号表示DataNode正常运行。Blockreport包含DataNode上所有块的列表。

  1. 复本写入位置选择
    1. 原则:基于机架感知的副本放置策略,目的是提高数据可靠性,可用性和网络带宽利用率
    2. 其他细节待补充
  2. 副本读取位置选择
    1. 为了最大程度地减少全局带宽消耗和读取延迟,HDFS尝试满足最接近读取器的副本的读取请求。如果在与读取器节点相同的机架上存在一个副本,则该副本应优先满足读取请求。如果HDFS群集跨越多个数据中心,则驻留在本地数据中心中的副本比任何远程副本都优先。
  3. 安全模式
    1. 启动时,NameNode进入一个特殊的状态,称为安全模式。当NameNode处于安全模式状态时,不会发生数据块的复制。NameNode从数据节点接收心跳和Blockreport消息,Blockreport包含DataNode托管的数据块列表,每个块都有指定的最小副本数,当NameNode对该数据块的最小副本数检查通过时,该块被视为已安全复制。
    2. 退出:一定比例的数据块检查通过后(再加上30秒),NameNode退出安全模式状态。
      1. 对于仍少于指定数量的副本的数据块列表,NameNode将这些块复制到其他DataNode。

文件系统元数据的持久性

  1. NameNode使用物理存储的数据分为操作记录(EditLog)和文件系统元信息(FSImage)。
    1. EditLog事务日志来永久记录文件系统元数据发生的所有更改
    2. FsImage用来存储整个文件系统名称空间(包括块到文件的映射和文件系统属性)
  2. NameNode的内存中,包含整个文件系统命名空间和块-文件映射BlockMap
  3. DataNode通过BlockReport方式向NameNode上报本地数据块的信息

通讯协议:基于TCP/IP

  1. client端与NameNode通信使用ClientProtocol
  2. DataNode端与NameNode通信使用DataNodeProtocol

RPC抽象了以上两个协议,且NN在设计之初便不会主动发起任何的PRC调用,均由其他端主动请求。

可靠性

HDFS的主要目标是即使在出现故障的情况下也能可靠地存储数据。三种常见的故障类型是NameNode故障,DataNode故障和网络分区

  1. 数据磁盘故障,心跳和重新复制

    1. 每个DataNode会定期向NameNode发送心跳,缺少心跳时,将认为该DataNode不可用,不会将任何IO请求转发给该节点

    2. DataNode的不可用会导致某些块的复制因子降至指定值之下,NameNode需要不断监视这些指标

    3. 在DataNode不可用,副本损坏,DataNode上的硬盘发生故障的情况下,则需要重新复制

  2. 集群Rebalancing

    1. HDFS架构是支持rebalance方案的,如果某个DadeNode的可用空间低于阈值时,会自动将数据转移至另一个DN。

  3. 数据完整性

    1. 由于存储设备故障,网络故障或软件故障,从DataNode提取的数据块可能会损坏,HDFS客户端会对文件内容执行校验和检查(客户端创建HDFS文件之初,便会计算每个块的校验和,存储在命名空间的隐藏文件中,待获取数据时,便进行校验,若校验失败,将从另一个存储该副本的的DataNode中获取)

  4. 元数据磁盘故障:FsImage和EditLog是HDFS的核心数据结构。这些文件损坏可能导致HDFS实例无法正常运行。

    1. 解决方法之一:配置NameNode核心数据结构的多副本支持

    2. 解决方法之二:部署多NameNode,使用NFS共享存储或使用分布式日志编辑(Journal)

  5. 快照,可以回滚至某个历史时间点

总结:HDFS 的特点

高容错

由于 HDFS 采用数据的多副本方案,所以部分硬件的损坏不会导致全部数据的丢失。

高吞吐量

HDFS 设计的重点是支持高吞吐量的数据访问,而不是低延迟的数据访问。

大文件支持

HDFS 适合于大文件的存储,文档的大小应该是是 GB 到 TB 级别的。

简单一致性模型

HDFS 更适合于一次写入多次读取 (write-once-read-many) 的访问模型。支持将内容追加到文件末尾,但不支持数据的随机访问,不能从文件任意位置新增数据。

跨平台移植性

HDFS 具有良好的跨平台移植性,这使得其他大数据计算框架都将其作为数据持久化存储的首选方案。

 

参考资料:HDFS设计大数据学习

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
第一天 hadoop的基本概念 伪分布式hadoop集群安装 hdfs mapreduce 演示 01-hadoop职位需求状况.avi 02-hadoop课程安排.avi 03-hadoop应用场景.avi 04-hadoop对海量数据处理的解决思路.avi 05-hadoop版本选择和伪分布式安装.avi 06-hadoop版本选择和伪分布式安装2.avi 07-hdfs&mapreduce;测试.avi 08-hdfs的实现机制初始.avi 09-hdfs的shell操作.avi 10-hadoop集群搭建的无密登陆配置.avi 第二天 hdfs原理和使用操作、编程 01-NN元数据管理机制.avi 02-NN工作机制2.avi 03-DN工作原理.avi 04-HDFS的JAVA客户端编写.avi 05-filesystem设计思想总结.av i 06-hadoop中的RPC框架实现机制.avi 07-hadoop中的RPC应用实例demo.avi 08-hdfs下载数据源码跟踪铺 垫.avi 09-hdfs下载数据源码分析-getFileSystem.avi 10-hdfs下载数据源码分析-getFileSystem2.avi 第三天 mapreduce的原理和编程 01-hdfs源码跟踪之打开输入流.avi 02-hdfs源码跟踪之打开输入流总结.avi 03-mapreduce介绍及wordcount.avi 04-wordcount的编写和提交集群运行.avi 05-mr程序的本地运行模式.avi 06-job提交的逻辑及YARN框架的技术机制.avi 07-MR程序的几种提交运行模式.avi 08-YARN的通用性意义.avi 09-yarn的job提交流程.avi 第四天 常见mr算法实现和shuffle的机制 01-复习.avi 02-hadoop中的序列化机制.avi 03-流量求和mr程序开发.avi 04-hadoop的自定义排序实现.avi 05-mr程序中自定义分组的实现.avi 06-shuffle机制.avi 07-mr程序的组件全貌.avi 08-textinputformat对切片规划的源码分析.avi 09-倒排索引的mr实现.avi 10-多个job在同一个main方法中提交.avi 第五天 hadoop2.x中HA机制的原理和全分布式集群安装部署及维护 01-zookeeper.avi 02-zookeeper2.avi 03-NN高可用方案的要点1.avi 04-hadoop-HA机制的配置文件.avi 05-hadoop分布式集群HA模式部署.avi 06-hdfs--HA测试.avi 07-hdfs--动态增加节点和副本数量管理.avi 08-HA的java api访问要点.avi 09-hive入门.avi 第六天 hbase hive 01-复习ha相关.avi 02-hive的元数据库mysql方式安装配置.avi 03-hive的使用.avi 04-hive的常用语法.avi 05-hql语法及自定义函数.avi 06-hbase表结构.avi 07-hbase集群架构及表存储机制.avi 08-hbase-shell.avi 09-hbase的java api.avi 第七天 storm+kafka 006-kafka整合storm.avi 01-storm基本概念.avi 02-storm编程规范及demo编写.avi 03-storm的topology提交执行.avi 04-kafka介绍.avi 05-kafuka集群部署及客户端编程.avi 06-kafka消费者java客户端编程.avi 第八天 实战项目 01-项目背景及技术架构.avi 02-主要技术选型.avi 03-flume介绍及演示.avi 04-行为轨迹增强处理流程.avi 05-样本url筛选模块开发.avi 06-行为轨迹增强模块1.avi 07-行为轨迹增强模块2.avi
Hadoop是一个开源的分布式计算框架,其中的Hadoop Distributed File System(HDFS)是其核心组件之一。HDFS是一个设计用于存储大规模数据的分布式文件系统,其目标是提供高可靠性、高性能和高可扩展性。下面对Hadoop 2.x HDFS的源码进行剖析。 HDFS的源码主要包含以下几个关键模块:NameNode、DataNode、BlockManager和FileSystem。 首先,NameNode是HDFS的主节点,负责管理文件系统的命名空间和元数据(例如文件的名称和位置等)。它通过解析客户端的请求,维护了一个表示文件和目录路径的层次结构,并使用高效的数据结构(如内存中的树状结构)来存储和管理元数据。 其次,DataNode是HDFS工作节点,负责存储和处理实际的数据块。每个DataNode都与一个或多个存储介质(如磁盘)相连,可以提供数据的读取和写入操作。DataNode定期向NameNode报告其存储的数据块的状态,并接收来自NameNode的指令,如复制、移动和删除数据块。 BlockManager是NameNode的重要组成部分,负责管理数据块的复制和位置信息。它通过与DataNode的交互,监控和维护数据块的复制系数(即数据块的副本数),确保数据块的可靠性和可用性。 最后,FileSystem是用户与HDFS进行交互的接口。它提供了一系列的API和命令,例如创建、读取和写入文件等,以便用户可以对HDFS中的文件进行操作。 Hadoop 2.x HDFS的源码剖析主要涉及上述模块的实现细节,包括具体数据结构的设计和实现、请求处理的流程、数据块的复制策略以及与底层存储介质的交互等。剖析源码可以深入了解HDFS的内部工作原理,帮助开发者理解和优化系统的性能,同时也有助于扩展和改进HDFS的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值