HDFS简介

合集下载

Hadoop分布式文件系统(HDFS)详解

Hadoop分布式文件系统(HDFS)详解

Hadoop分布式⽂件系统(HDFS)详解HDFS简介:当数据集的⼤⼩超过⼀台独⽴物理计算机的存储能⼒时,就有必要对它进⾏分区 (partition)并存储到若⼲台单独的计算机上。

管理⽹络中跨多台计算机存储的⽂件系统成为分布式⽂件系统 (Distributed filesystem)。

该系统架构于⽹络之上,势必会引⼊⽹络编程的复杂性,因此分布式⽂件系统⽐普通磁盘⽂件系统更为复杂。

HDFS是基于流数据模式访问和处理超⼤⽂件的需求⽽开发的,它可以运⾏于廉价的商⽤服务器上。

总的来说,可以将 HDFS的主要特点概括为以下⼏点:(1 )处理超⼤⽂件这⾥的超⼤⽂件通常是指数百 MB、甚⾄数百TB ⼤⼩的⽂件。

⽬前在实际应⽤中, HDFS已经能⽤来存储管理PB(PeteBytes)级的数据了。

在 Yahoo!,Hadoop 集群也已经扩展到了 4000个节点。

(2 )流式地访问数据HDFS的设计建⽴在更多地响应“⼀次写⼊,多次读取”任务的基础之上。

这意味着⼀个数据集⼀旦由数据源⽣成,就会被复制分发到不同的存储节点中,然后响应各种各样的数据分析任务请求。

在多数情况下,分析任务都会涉及数据集中的⼤部分数据,也就是说,对HDFS 来说,请求读取整个数据集要⽐读取⼀条记录更加⾼效。

(3 )运⾏于廉价的商⽤机器集群上Hadoop设计对硬件需求⽐较低,只须运⾏在廉价的商⽤硬件集群上,⽽⽆须昂贵的⾼可⽤性机器上。

廉价的商⽤机也就意味着⼤型集群中出现节点故障情况的概率⾮常⾼。

这就要求在设计 HDFS时要充分考虑数据的可靠性、安全性及⾼可⽤性。

正是由于以上的种种考虑,我们会发现现在的 HDFS在处理⼀些特定问题时不但没有优势,⽽且有⼀定的局限性,主要表现在以下⼏个⽅⾯。

(1 )不适合低延迟数据访问如果要处理⼀些⽤户要求时间⽐较短的低延迟应⽤请求,则 HDFS不适合。

HDFS 是为了处理⼤型数据集分析任务的,主要是为达到⾼的数据吞吐量⽽设计的,这就可能要求以⾼延迟作为代价。

分布式文件系统HDFSPPT课件

分布式文件系统HDFSPPT课件

《大数据技术及应用》
信息科学与技术学院
2
3.1 分布式文件系统
• 3.1.1 • 3.1.2
计算机集群结构 分布式文件系统的结构
《大数据技术及应用》
信息科学与技术学院
3
3.1.1计算机集群结构
•分布式文件系统把文件分布存储到多个计算机节点上,成千上万的计算 机节点构成计算机集群 •与之前使用多个处理器和专用高级硬件的并行化处理装置不同的是,目 前的分布式文件系统所采用的计算机集群,都是由普通硬件构成的,这就 大大降低了硬件上的开销
客户端 文件名或数据块号 名称节点
(Client)
(NameNode)
数据块号、数据块位置
写数据 读数据
数据节点 (DataNode)
数据节点 (DataNode)
……
本地Linux文件系统
本地Linux文件系统
机架1
……
备份
数据节点
数据节点
(DataNode)
(DataNode)
……
本地Linux文件系统
Ø名称节点起来之后,HDFS中的更新操作会重新写到EditLog 文件中,因为FsImage文件一般都很大(GB级别的很常见), 如果所有的更新操作都往FsImage文件中添加,这样会导致系 统运行的十分缓慢,但是,如果往EditLog文件里面写就不会这 样,因为EditLog 要小很多。每次执行写操作之后,且在向客户 端发送成功代码之前,edits文件都需要同步更新。
《大数据技术及应用》
信息科学与技术学院
17
3.4.3通信协议
• HDFS是一个部署在集群上的分布式文件系统,因此,很多 数据需要通过网络进行传输。 • 所有的HDFS通信协议都是构建在TCP/IP协议基础之上的。 • 客户端通过一个可配置的端口向名称节点主动发起TCP连 接,并使用客户端协议与名称节点进行交互。 • 名称节点和数据节点之间则使用数据节点协议进行交互。 • 客户端与数据节点的交互是通过RPC(Remote Procedure Call)来实现的。在设计上,名称节点不会主动发起RPC, 而是响应来自客户端和数据节点的RPC请求。

大数据_hadoop_分布式文件系统

大数据_hadoop_分布式文件系统

2.HDFS
HDFS(Hadoop Distributed File System)是Hadoop项目 的核心子项目,是Hadoop主要应用的一个分布式文件系统。 注:HDFS只是Hadoop抽象文件系统的一个实例,还包括本地 文件系统、HFTP、S3等。
一、Hadoop文件系统
1.Hadoop文件系统
二、HDFS简介
1.HDFS
HDFS是基于流数据模式访问和处理超大文件的需求而开 发的,它可以运行于廉价的商用服务器上。
2.HDFS的主要特点:
(1)处理超大文件 实际应用中,HDFS已经用来存储PB级的数据了。 (2)流式的访问数据 运行在HDFS上的应用程序必须流式地访问他们的数据集。 HDFS的设计适合批量处理,而不是用户交互式的。重点是数 据吞吐量(通常分析任务都会涉及数据集的大部分数据不适合低延迟数据访问
HDFS是为了处理大型数据集分析任务,主要是为了达到 高的数据吞吐量而设计的,这就要求可能以高延迟为代价。 注:对于低延迟的访问需求,HBase是更好地选择。
(2)无法高效存储大量小文件 Hadoop中由namenode负责将文件系统中的元数据存储在 内存中,因此文件系统存储的文件总数受限于namenode的内 存容量。当存储大量的小文件时,会大大增加namenode的工 作压力,检索处理元数据所需的时间就会很长。
四、HDFS的基本操作
1.HDFS命令行操作
可以通过命令行接口和HDFS进行交互。
(1)下面以单机上运行Hadoop、执行单机伪分布为 例:
在单机伪分布中需要修改两个配置属性: ① 修改属性: 令 =hdfs://localhost/ 注:hadoop默认使用HDFS文件系统;在本机localhost运行 HDFS,其端口默认采用8020.

hdfs中dfs

hdfs中dfs

hdfs中dfsHDFS(Hadoop Distributed File System)中DFSHadoop Distributed File System(HDFS)是Apache Hadoop生态系统中最核心的组件之一。

它是一种被设计用于大规模数据处理和分布式存储的文件系统。

HDFS的设计目标是提供高可靠性、高可扩展性和高容错性,以满足大规模数据处理的需求。

本文将重点介绍HDFS中的DFS(Distributed File System)的相关内容。

DFS是HDFS的核心模块,负责将数据分布式地存储在集群中的各个节点上。

在Hadoop集群中,所有的数据都被切分成固定大小的块(block),这些块被分布式地存储在不同的节点上。

HDFS的块的默认大小是128MB,这种设计是为了在大规模数据处理时提供高效的访问性能。

当一个文件被上传到HDFS时,DFS会将文件切分成多个块,并将这些块存储在不同的节点上。

这种分布式存储的方式保证了数据的高可靠性和冗余性。

每个块会被复制到不同的节点上,这样即使某个节点发生故障,数据仍然能够被访问。

HDFS的DFS采用了主从架构,集群中有一个NameNode和多个DataNode。

NameNode负责管理文件系统的命名空间和块的分布情况,而DataNode则负责存储和服务于数据块。

NameNode是HDFS的核心组件,它保存了整个文件系统的元数据信息。

元数据包括文件和目录的名称、大小、创建时间、修改时间等。

当一个客户端需要访问文件时,它会先向NameNode发送请求,获取所需文件的块的位置信息,然后再直接和拥有这些块的DataNode通信。

为了保证系统的可靠性,HDFS将数据块的复制策略作为一个重要的设计考虑因素。

HDFS默认将数据块复制到集群的不同机架上的不同节点上,这样可以在机架或节点发生故障时提供数据的冗余备份,确保数据的高可用性。

DFS还支持手动或自动地增加或减少数据块的复制数量。

HDFS简介及基本概念

HDFS简介及基本概念

HDFS简介及基本概念(⼀)HDFS简介及其基本概念 HDFS(Hadoop Distributed File System)是hadoop⽣态系统的⼀个重要组成部分,是hadoop中的的存储组件,在整个Hadoop中的地位⾮同⼀般,是最基础的⼀部分,因为它涉及到数据存储,MapReduce等计算模型都要依赖于存储在HDFS中的数据。

HDFS是⼀个分布式⽂件系统,以流式数据访问模式存储超⼤⽂件,将数据分块存储到⼀个商业硬件集群内的不同机器上。

这⾥重点介绍其中涉及到的⼏个概念:(1)超⼤⽂件。

⽬前的hadoop集群能够存储⼏百TB甚⾄PB级的数据。

(2)流式数据访问。

HDFS的访问模式是:⼀次写⼊,多次读取,更加关注的是读取整个数据集的整体时间。

(3)商⽤硬件。

HDFS集群的设备不需要多么昂贵和特殊,只要是⼀些⽇常使⽤的普通硬件即可,正因为如此,hdfs节点故障的可能性还是很⾼的,所以必须要有机制来处理这种单点故障,保证数据的可靠。

(4)不⽀持低时间延迟的数据访问。

hdfs关⼼的是⾼数据吞吐量,不适合那些要求低时间延迟数据访问的应⽤。

(5)单⽤户写⼊,不⽀持任意修改。

hdfs的数据以读为主,只⽀持单个写⼊者,并且写操作总是以添加的形式在⽂末追加,不⽀持在任意位置进⾏修改。

1、HDFS数据块 每个磁盘都有默认的数据块⼤⼩,这是⽂件系统进⾏数据读写的最⼩单位。

这涉及到磁盘的相应知识,这⾥我们不多讲,后⾯整理⼀篇博客来记录⼀下磁盘的相应知识。

HDFS同样也有数据块的概念,默认⼀个块(block)的⼤⼩为128MB(HDFS的块这么⼤主要是为了最⼩化寻址开销),要在HDFS中存储的⽂件可以划分为多个分块,每个分块可以成为⼀个独⽴的存储单元。

与本地磁盘不同的是,HDFS中⼩于⼀个块⼤⼩的⽂件并不会占据整个HDFS数据块。

对HDFS存储进⾏分块有很多好处:⼀个⽂件的⼤⼩可以⼤于⽹络中任意⼀个磁盘的容量,⽂件的块可以利⽤集群中的任意⼀个磁盘进⾏存储。

云存储之HDFS精品PPT课件

云存储之HDFS精品PPT课件
• HDFS(Hadoop Distributed )
1. HDFS简介
管理网络中跨多台计算机存储的文件系统称为分布式文件系统。 HDFS是Hadoop中的分布式文件系统(Hadoop Distributed )。
HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost )硬件上。而且它提供高传输率(high throughput)来访问应用程序的 数据,适合那些有着超大数据集(large data set)的应用程序。HDFS 放宽了(relax)POSIX的要求(requirements),这样可以流的形式访 问(streaming access)文件系统中的数据。
• 客户端缓存 • 流水线复制 • 并发写控制 • 流程: 1.客户端把数据缓存到本地临时文件夹 2.临时文件夹数据超过64M,客户端联系NameNode,NameNode分配
DataNode,DataNode依照客户端的位置被排列成一个有着最近物理距 离和最小的序列 3.与序列的第一个数据服务器建立Socket连接,发送请求头,然后等待 回应,依次下传,客户端得到回包,流水线建立成功, 4. 正式发送数据,以4K为大小传送
• DatanodeProtocol
3. 通信协议簇及Shell
• DataTransferProtocol(功能由Datanode处理函数完成 )
3. 通信协议簇及Shell
• Shell
Usage:hadoop [--config confdir ] COMMAND
4. 关键运行机制及API
• 保障可靠性的措施
• 一个名字节点和多个数据节点 • 数据复制(冗余机制)
--存放的位置(机架感知策略) • 故障检测 --数据节点

大数据导论-思维、技术与应用 第5章 大数据文件系统HDFS

3. 文件修改问题 这里HDFS中的文件只有一个写入者,而且写操作总是将数据添加在文件的 末尾。不支持具有多个写入者的操作,也不支持在文件的任意位置进行修改。
HDFS的解决思路
采用分块多副本存储方式后,HDFS文件的可靠性就大大增强了,即使 某个服务器坏了,也仍然可以完整读取文件; 同时还带来一个很大的好处,就是增加了文件的并发访问能力。
例如: 多个用户读取这个文件时,都要读块1,HDFS可以根据服务器的繁忙程 度,选择从哪台服务器读块1。
HDFS的设计理念
HDFS的设计理念
1. 实时性差 要求低时间延迟的访问的应用,不适合在HDFS上运行。HDFS是为高数据吞 吐量应用优化的,这可能会以高时间延迟为代价。
2. 小文件问题 由于NameNode将文件系统的元数据存储在内存中,因此该文件系统所能 存储的文件总量受限于NameNode的内存总容量。根据经验,每个文件、 目录和数据块的存储信息大约占150字节。过多的小文件存储会大量消耗 NameNode的存储量。
用户
HDFS 基本架构
HDFS
服务器 A
服务器 B
服务器 C
服务器 D
HDFS的解决思路
为了解决存储节点负载不均衡的问题。 HDFS首先把一个文件分割成多个块,然后再把这些文件块存储在不同 服务器上。 这种方式的优势就是不怕文件太大,并且读文件的压力不会全部集中 在一台服务器上,从而可以避免某个热点文件会带来的单机负载过高 的问题。
大数据导论 第五章
CONTENTS
目录
PART 01 HDFS简介 PART 02 HDFS基本原理 PART 03 HDFS整体架构 PART 04 HDFS数据复制
PART 05 HDFS数据访问机制 PART 06 HDFS操作 PART 07 作业

hdfs ec策略

hdfs ec策略摘要:一、HDFS 简介1.HDFS 的定义与作用2.HDFS 的特点二、HDFS 的EC 策略1.EC 策略的定义与作用2.EC 策略的类型2.1 数据EC2.2 对象EC2.3 块EC三、EC 策略的实现1.数据EC 的实现2.对象EC 的实现3.块EC 的实现四、EC 策略的优势与不足1.优势2.不足五、总结正文:HDFS(Hadoop Distributed File System)是一个分布式文件系统,被广泛应用于大数据领域。

它具有高可靠性、高可用性和高扩展性等特点,可以存储海量数据。

然而,在大规模数据存储中,数据的完整性和一致性变得尤为重要。

为此,HDFS 引入了EC(Error Correction)策略,用于提高数据的可靠性和一致性。

HDFS 的EC 策略主要分为数据EC、对象EC 和块EC 三种。

其中,数据EC 主要用于修复数据节点上的数据错误,对象EC 用于修复对象存储节点上的数据错误,块EC 用于修复块存储节点上的数据错误。

这三种EC 策略共同保证了HDFS 数据的高可靠性和一致性。

在实现EC 策略的过程中,HDFS 采用了多种技术手段。

例如,数据EC 通过数据校验和、数据复制等方式实现;对象EC 通过对象复制、对象版本控制等方式实现;块EC 通过块校验和、块复制等方式实现。

这些技术手段既保证了数据的可靠性,又提高了数据的一致性。

然而,HDFS 的EC 策略并非完美无缺。

首先,EC 策略的实现增加了系统开销,可能导致系统性能下降。

其次,EC 策略并不能完全消除数据错误,当错误发生时,仍然需要进行数据修复。

最后,随着数据量的不断增长,EC 策略的复杂性和实现难度也在不断加大。

综上所述,HDFS 的EC 策略在保证数据可靠性和一致性方面具有重要作用,但同时也存在一些不足。

hdfs的原理

hdfs的原理HDFS(Hadoop Distributed File System)是Hadoop生态系统中的基本组件之一,它是一个分布式文件系统,用于存储和处理大规模数据集。

HDFS的原理主要有以下几个方面:1. 数据切块:HDFS将要存储的文件切分成固定大小的数据块(默认为128MB),并将这些数据块分散存储在集群中的多个节点上。

2. 冗余复制:HDFS会将每个数据块复制多次,并保存在不同的节点上。

默认情况下,每个数据块会复制三次,分别存储在不同的机架上的不同节点上。

这样做的目的是增加数据的可靠性和容错性。

3. Master/Slave架构:HDFS由一个NameNode和多个DataNode组成。

NameNode是HDFS的主节点,负责管理文件系统的命名空间、数据块的存储位置等元数据信息;DataNode是HDFS的工作节点,负责实际的数据存储和读写操作。

NameNode维护了一个全局的文件系统命名空间和每个数据块所在的DataNode的信息。

4. 分布式读写:客户端可以通过与NameNode交互获取文件的块的位置信息,并直接与DataNode进行数据的读写操作。

如果要读取一个文件,客户端首先询问NameNode该文件各个数据块所在的DataNode位置信息,然后直接从这些DataNode上读取数据;如果要写入一个文件,客户端首先向NameNode发送写请求,NameNode返回可供写入的DataNode 列表,客户端将数据块分割成与DataNode对应的大小,并将数据块分别发送给各个DataNode进行存储。

5. 容错恢复:HDFS通过定期向NameNode发送心跳信号来检测和监控每个DataNode的健康状态。

如果发现某个DataNode 失效,NameNode会将存储在该节点上的数据块复制到其他正常的DataNode上,以保证数据的冗余备份。

通过以上的原理,HDFS实现了数据的高可靠性、高容错性和高扩展性,适用于大规模的数据存储和处理场景。

HDFS详解

HDFS详解1、HDFS 是做什么的HDFS(Hadoop Distributed File System)是Hadoop项⽬的核⼼⼦项⽬,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超⼤⽂件的需求⽽开发的,可以运⾏于廉价的商⽤服务器上。

它所具有的⾼容错、⾼可靠性、⾼可扩展性、⾼获得性、⾼吞吐率等特征为海量数据提供了不怕故障的存储,为超⼤数据集(Large Data Set)的应⽤处理带来了很多便利。

2、HDFS 从何⽽来HDFS 源于 Google 在2003年10⽉份发表的GFS(Google File System)论⽂。

它其实就是 GFS 的⼀个克隆版本3、为什么选择 HDFS 存储数据之所以选择 HDFS 存储数据,因为 HDFS 具有以下优点: 1、⾼容错性数据⾃动保存多个副本。

它通过增加副本的形式,提⾼容错性。

某⼀个副本丢失以后,它可以⾃动恢复,这是由 HDFS 内部机制实现的,我们不必关⼼。

2、适合批处理它是通过移动计算⽽不是移动数据。

它会把数据位置暴露给计算框架。

3、适合⼤数据处理处理数据达到 GB、TB、甚⾄PB级别的数据。

能够处理百万规模以上的⽂件数量,数量相当之⼤。

能够处理10K节点的规模。

4、流式⽂件访问⼀次写⼊,多次读取。

⽂件⼀旦写⼊不能修改,只能追加。

它能保证数据的⼀致性。

5、可构建在廉价机器上它通过多副本机制,提⾼可靠性。

它提供了容错和恢复机制。

⽐如某⼀个副本丢失,可以通过其它副本来恢复。

当然 HDFS 也有它的劣势,并不适合所有的场合: 1、低延时数据访问⽐如毫秒级的来存储数据,这是不⾏的,它做不到。

它适合⾼吞吐率的场景,就是在某⼀时间内写⼊⼤量的数据。

但是它在低延时的情况下是不⾏的,⽐如毫秒级以内读取数据,这样它是很难做到的。

2、⼩⽂件存储存储⼤量⼩⽂件(这⾥的⼩⽂件是指⼩于HDFS系统的Block⼤⼩的⽂件(默认64M))的话,它会占⽤ NameNode⼤量的内存来存储⽂件、⽬录和块信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

HDFS简介作为Hadoop的核心技术之一,HDFS(Hadoop distributed File System,Hadoop分布式文件系统)是分布式计算中数据存储管理的基础。

它所具有的高容错高可靠性、高可扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储,为超大数据集(Large Data Set)的应用处理带来了很多便利。

HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。

HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。

HDFS 是Apache Hadoop Core项目的一部分。

前提和设计目标硬件错误硬件错误是常态而不是异常。

HDFS可能由成百上千的服务器所构成,每个服务器上存储着文件系统的部分数据。

我们面对的现实是构成系统的组件数目是巨大的,而且任一组件都有可能失效,这意味着总是有一部分HDFS的组件是不工作的。

因此错误检测和快速、自动的恢复是HDFS最核心的架构目标。

流式数据访问HDFS的设计中更多的考虑到了数据批处理,而不是用户交互处理。

比之数据访问的低延迟问题,更关键的在于数据访问的高吞吐量。

POSIX标准设置的很多硬性约束对HDFS应用系统不是必需的。

为了提高数据的吞吐量,在一些关键方面对POSIX的语义做了一些修改。

大规模数据集HDFS上的一个典型文件大小一般都在G字节至T字节。

因此,HDFS被调节以支持大文件存储。

它应该能提供整体上高的数据传输带宽,能在一个集群里扩展到数百个节点。

一个单一的HDFS实例应该能支撑数以千万计的文件。

简单的一致性模型HDFS应用需要一个“一次写入多次读取”的文件访问模型。

一个文件经过创建、写入和关闭之后就不需要改变。

这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。

Map/Reduce应用或者网络爬虫应用都非常适合这个模型。

“移动计算比移动数据更划算”一个应用请求的计算,离它操作的数据越近就越高效,在数据达到海量级别的时候更是如此。

因为这样就能降低网络阻塞的影响,提高系统数据的吞吐量。

将计算移动到数据附近,比之将数据移动到应用所在显然更好。

HDFS为应用提供了将它们自己移动到数据附近的接口。

异构软硬件平台间的可移植性HDFS在设计的时候就考虑到平台的可移植性。

这种特性方便了HDFS作为大规模数据应用平台的推广。

HDFS体系结构HDFS是一主/从(Master/Slave)体系结构,如图1所示。

从最终用户的角度来看,它就像传统的文件系统一样,可以难过目录路径对文件执行CRUD(Create、Read、Update 和Delete)操作。

但由于分布式存储的性质,HDFS集群拥有一个NameNode和一些DataNodes。

NameNode管理文件系统的元数据,DataNode存储实际的数据。

客户端通过同NameNode和DataNodes的交互访问文件系统。

客户端联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接和DataNode进行交互的。

Namenode和Datanode被设计成可以在普通的商用机器上运行。

这些机器一般运行着GNU/Linux操作系统(OS)。

HDFS采用Java语言开发,因此任何支持Java的机器都可以部署Namenode或Datanode。

由于采用了可移植性极强的Java语言,使得HDFS可以部署到多种类型的机器上。

一个典型的部署场景是一台机器上只运行一个Namenode实例,而集群中的其它机器分别运行一个Datanode实例。

这种架构并不排斥在一台机器上运行多个Datanode,只不过这样的情况比较少见。

集群中单一Namenode的结构大大简化了系统的架构。

Namenode是所有HDFS元数据的仲裁者和管理者,这样,用户数据永远不会流过Namenode。

图1 HDFS结构示意图文件系统的名字空间(namespace)HDFS支持传统的层次型文件组织结构。

用户或者应用程序可以创建目录,然后将文件保存在这些目录里。

文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、移动或重命名文件。

当前,HDFS不支持用户磁盘配额和访问权限控制,也不支持硬链接和软链接。

但是HDFS架构并不妨碍实现这些特性。

Namenode负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被Namenode记录下来。

应用程序可以设置HDFS保存的文件的副本数目。

文件副本的数目称为文件的副本系数,这个信息也是由Namenode保存的。

HDFS文件系统元数据的持久化Namenode上保存着HDFS的名字空间。

对于任何对文件系统元数据产生修改的操作,Namenode都会使用一种称为EditLog的事务日志记录下来。

例如,在HDFS中创建一个文件,Namenode就会在Editlog中插入一条记录来表示;同样地,修改文件的副本系数也将往Editlog插入一条记录。

Namenode在本地操作系统的文件系统中存储这个Editlog。

整个文件系统的名字空间,包括数据块到文件的映射、文件的属性等,都存储在一个称为FsImage的文件中,这个文件也是放在Namenode所在的本地文件系统上。

Namenode在内存中保存着整个文件系统的名字空间和文件数据块映射(Blockmap)的映像。

这个关键的元数据结构设计得很紧凑,因而一个有4G内存的Namenode足够支撑大量的文件和目录。

当Namenode启动时,它从硬盘中读取Editlog和FsImage,将所有Editlog中的事务作用在内存中的FsImage 上,并将这个新版本的FsImage从内存中保存到本地磁盘上,然后删除旧的Editlog,因为这个旧的Editlog的事务都已经作用在FsImage上了。

这个过程称为一个检查点(checkpoint)。

在当前实现中,检查点只发生在Namenode启动时,在不久的将来将实现支持周期性的检查点。

Datanode将HDFS数据以文件的形式存储在本地的文件系统中,它并不知道有关HDFS文件的信息。

它把每个HDFS数据块存储在本地文件系统的一个单独的文件中。

Datanode并不在同一个目录创建所有的文件,实际上,它用试探的方法来确定每个目录的最佳文件数目,并且在适当的时候创建子目录。

在同一个目录中创建所有的本地文件并不是最优的选择,这是因为本地文件系统可能无法高效地在单个目录中支持大量的文件。

当一个Datanode启动时,它会扫描本地文件系统,产生一个这些本地文件对应的所有HDFS数据块的列表,然后作为报告发送到Namenode,这个报告就是块状态报告。

通讯协议所有的HDFS通讯协议都是建立在TCP/IP协议之上。

客户端通过一个可配置的TCP端口连接到Namenode,通过ClientProtocol协议与Namenode交互。

而Datanode使用DatanodeProtocol协议与Namenode交互。

一个远程过程调用(RPC)模型被抽象出来封装ClientProtocol和Datanodeprotocol协议。

在设计上,Namenode不会主动发起RPC,而是响应来自客户端或Datanode 的RPC请求。

HDFS可靠性措施HDFS的主要设计目标之一就是在故障情况下也能保证数据存储的可靠性。

HDFS具备了较为完善的冗余备份和故障恢复机制,可以实现在集群中可靠地存储海量文件。

冗余备份HDFS将每个文件存储成一系列数据块(Block),默认块大小为64MB(配置)。

为了容错,文件的所有数据块都会有副本(副本数量即复制因子,可配置)。

HDFS的文件都是一次性写入的,并且严格限制为任何进修都只有一个写用户。

DataNode使用本地文件系统来存储HDFS的数据,但是它对HDFS的文件一无所知,只是用一个个文件存储HDFS的每个数据块。

当DataNode启动的时候,它会遍历本地文件系统,产生一份HDFS数据块和本地文件对应关系的列表,并把这个报告发给NameNode,这就是块报告(Blockreport)。

块报告包括了DataNode上所有块的列表。

副本存放副本的存放是HDFS可靠性和性能的关键。

优化的副本存放策略是HDFS区分于其他大部分分布式文件系统的重要特性。

这种特性需要做大量的调优,并需要经验的积累。

HDFS采用一种称为机架感知(rack-aware)的策略来改进数据的可靠性、可用性和网络带宽的利用率。

目前实现的副本存放策略只是在这个方向上的第一步。

实现这个策略的短期目标是验证它在生产环境下的有效性,观察它的行为,为实现更先进的策略打下测试和研究的基础。

大型HDFS实例一般运行在跨越多个机架的计算机组成的集群上,不同机架上的两台机器之间的通讯需要经过交换机。

在大多数情况下,同一个机架内的两台机器间的带宽会比不同机架的两台机器间的带宽大。

图2 数据的复制通过一个机架感知的过程,Namenode可以确定每个Datanode所属的机架id。

一个简单但没有优化的策略就是将副本存放在不同的机架上。

这样可以有效防止当整个机架失效时数据的丢失,并且允许读数据的时候充分利用多个机架的带宽。

这种策略设置可以将副本均匀分布在集群中,有利于当组件失效情况下的负载均衡。

但是,因为这种策略的一个写操作需要传输数据块到多个机架,这增加了写的代价。

在大多数情况下,副本系数是3,HDFS的存放策略是将一个副本存放在本地机架的节点上,一个副本放在同一机架的另一个节点上,最后一个副本放在不同机架的节点上。

这种策略减少了机架间的数据传输,这就提高了写操作的效率。

机架的错误远远比节点的错误少,所以这个策略不会影响到数据的可靠性和可用性。

于此同时,因为数据块只放在两个(不是三个)不同的机架上,所以此策略减少了读取数据时需要的网络传输总带宽。

在这种策略下,副本并不是均匀分布在不同的机架上。

三分之一的副本在一个节点上,三分之二的副本在一个机架上,其他副本均匀分布在剩下的机架中,这一策略在不损害数据可靠性和读取性能的情况下改进了写的性能。

心跳检测NameNode周期性地从集群中的每个DataNode接受心跳包和块报告,NameNode可以根据这个报告验证块映射和其他文件系统元数据。

收到心跳包说明该DataNode工作正常。

如果DataNode不能发送心跳消息,NameNode会标记最近没有心跳的DataNode为宕机,不会发给它们任何新的I/O请求。

这样一来,任何存储在宕机的DataNode的数据将不再有效。

DataNode的宕机会造成一些数据块的副本数下降并低于指定值,NameNode会不断检测这些需要复制的数据块,并在需要的时候重新复制。

相关文档
最新文档