signed

QiShunwang

“诚信为本、客户至上”

HDFS入门介绍

2021/3/20 23:11:37   来源:

HDFS介绍


HDFS是Hadoop Distribute File System的简称,Hadoop分不是文件系统。Hadoop的核心组件之一,作为最底层的分布式存储服务而存在。分布式文件系统解决的问题就是大数据存储。它们是横跨在多台计算机上的存储系统。分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力。

基本系统架构

在这里插入图片描述

  • Namenode:用于存储、生成文件系统的元数据,运行一个实例维护所有系统中存在的文件和目录的文件系统树和元数据

  • Datanode:用于存储实际的数据,将自己管理的数据块上报给Namenode,运行多个实例

  • Client:从Namenode、Datanode获取数据返回给业务

注:

元数据保存在NameNode的内存当中,以便快速查询

DataNode通过心跳包(Heartbeat)与NameNode通讯

客户端读取/写入数据的时候直接与DataNode通信

HDFS的特性


1、master/slave 架构

HDFS 采用 master/slave 架构。一般一个 HDFS 集群是有一个 Namenode 和一定数目的Datanode 组成。Namenode 是 HDFS 集群主节点,Datanode 是 HDFS 集群从节点,两种角色各司其职,共同协调完成分布式的文件存储服务。

2、分块存储

HDFS 中的文件在物理上是分块存储(block)的,块的大小可以通过配置参数来规定,默认大小在 hadoop2.x 版本中是 128M。

3、 名字空间(NameSpace)

HDFS 支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、移动或重命名文件。
Namenode 负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被Namenode 记录下来。
HDFS 会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。

4、Namenode 元数据管理

我们把目录结构及文件分块位置信息叫做元数据。Namenode 负责维护整个hdfs文件系统的目录树结构,以及每一个文件所对应的 block 块信息(block 的id,及所在的datanode 服务器)。

5、Datanode 数据存储

文件的各个 block 的具体存储管理由 datanode 节点承担。每一个 block 都可以在多个datanode 上。Datanode 需要定时向 Namenode 汇报自己持有的 block信息。 存储多个副本(副本数量也可以通过参数设置 dfs.replication,默认是 3)。

6、 副本机制

为了容错,文件的所有 block 都会有副本。每个文件的 block 大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定,也可以在之后改变。

7、 一次写入,多次读出

HDFS 是设计成适应一次写入,多次读出的场景,且不支持文件的修改。
正因为如此,HDFS 适合用来做大数据分析的底层存储服务,并不适合用来做.网盘等应用,因为,修改不方便,延迟大,网络开销大,成本太高。适用于频繁读取,不适用于多次写入

HDFS的优劣


HDFS优势:

  1. 可构建在廉价机器上,设备成本相对低
  2. 高容错性,HDFS将数据自动保存多个副本,副本丢失后,自动恢复,防止数据丢失或损坏
  3. 适合批处理,HDFS适合一次写入、多次查询(读取)的情况,适合在已有的数据进行多次分析,稳定性好
  4. 适合存储大文件,其中的大表示可以存储单个大文件,因为是分块存储,以及表示存储大量的数据

HDFS劣势:

  1. 由于提高吞吐量,降低实时性
  2. 由于每个文件都会在namenode中记录元数据,如果存储了大量的小文件,会对namenode造成很大的压力
  3. 不合适小文件处理,在mapreduce的过程中小文件的数量会造成map数量的增大,导致资源被占用,而且速度慢。
  4. 不适合文件的修改,文件只能追加在文件的末尾,不支持任意位置修改,不支持多个写入者操作