您的位置:首页 > 大数据 > Hadoop

HDFS 概述(一)

2020-06-06 05:34 155 查看

Hadoop 重点之 HDFS

1、HDFS 简介

HDFS是Hadoop的一个分布式文件系统,也是指被设计成适合运行在通用硬件上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,HDFS和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。
在 HDFS 体系结构中有两类结点:
一类是 NameNode,又叫“名称结点”;
另一类是 DataNode,又叫“数据结点”。

2、HDFS 的基本思想

HDFS 是个抽象层,底层依赖很多独立的服务器,对外提供统一的文件管理功能。
为了解决存储结点负载不均衡的问题,HDFS 首先把一个文件分割成多个块,然后再把这些文件块存储在不同服务器上。
这种方式的优势就是不怕文件太大,并且读文件的压力不会全部集中在一台服务器上,从而可以避免某个热点文件会带来的单机负载过高的问题。

为了管理文件,HDFS 需要记录维护一些元数据,也就是关于文件数据信息的数据,如 HDFS 中存了哪些文件,文件被分成了哪些块,每个块被放在哪台服务器上等。
HDFS 把这些元数据抽象为一个目录树,来记录这些复杂的对应关系。这些元数据由一个单独的模块进行管理,这个模块叫作名称结点(NameNode)。存放文件块的真实服务器叫作数据结点(DataNode)。
由于分布式存储的性质,HDFS 集群拥有一个 NameNode 和多个 DataNode:
NameNode 管理文件系统的元数据;DataNode 存储实际的数据。
客户端通过同 NameNode 和 DataNode 的交互来访问文件系统。
客户端通过联系 NameNode 来获取文件的元数据,而真正的文件 I/O 操作是直接和 DataNode 交互进行的。
HDFS 主要针对 “一次写入,多次读取” 的应用场景,不适合实时交互性很强的应用场景,也不适合存储大量小文件。

3、HDFS 的设计理念

简单来讲,HDFS 的设计理念是,可以运行在普通机器上,以流式数据方式存储文件,一次写入、多次查询,具体有以下几点。
1)可构建在廉价机器上HDFS 的设计理念之一就是让它能运行在普通的硬件之上,即便硬件出现故障,也可以通过容错策略来保证数据的高可用性。
2)高容错性由于 HDFS 需要建立在普通计算机上,所以结点故障是正常的事情。HDFS 将数据自动保存多个副本,副本丢失后,自动恢复,从而实现数据的高容错性。
3)适合批处理HDFS 适合一次写入、多次查询(读取)的情况。
在数据集生成后,需要长时间在此数据集上进行各种分析。每次分析都将涉及该数据集的大部分数据甚至全部数据,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。
4) 适合存储大文件,这里说的大文件包含两种意思:一是文件大小超过 100MB 及达到 GB 甚至 TB、PB 级的文件;二是百万规模以上的文件数量。

4、HDFS 的局限

HDFS 的设计理念是为了满足特定的大数据应用场景,所以 HDFS 具有一定的局限性,不能适用于所有的应用场景,HDFS 的局限主要有以下几点。
1) 实时性差,要求低时间延迟的应用不适合在 HDFS 上运行,HDFS 是为高数据吞吐量应用而优化的,这可能会以高时间延迟为代价。
2) 不适合存储小文件,由于 NameNode 将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总量受限于 NameNode 的内存总容量。
根据经验,每个文件、目录和数据块的存储信息大约占 150 字节。过多的小文件存储会大量消耗 NameNode 的存储量。
3)文件修改问题HDFS 中的文件只有一个写入者,而且写操作总是将数据添加在文件的末尾。HDFS 不支持具有多个写入者的操作,也不支持在文件的任意位置进行修改。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: