最码农 最码农
  • 首页
  • 动态广场
  • 精选栏目
  • 闲言碎语
  • 左邻右里
  • 笔记屋
  • 注册
  • 登录
首页 › 大数据 › Hadoop HDFS(一)

Hadoop HDFS(一)

Cosy
1年前大数据阅读 1,291

文章链接

Hadoop HDFS(一)

Hadoop HDFS(二)

Hadoop HDFS(三)

HDFS 概述

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

HDFS 有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS 放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。

HDFS 的优点

  • 高容错性
    • 数据保存多个副本
    • 数据丢的失后自动恢复
  • 适合批处理
    • 移动计算而非移动数据
    • 数据位置暴露给计算框架
  • 适合大数据处理
    • GB、TB、甚至 PB 级的数据处理
    • 百万规模以上的文件数据
    • 10000+ 的节点
  • 可构建在廉价的机器上
    • 通过多副本存储,提高可靠性
    • 提供了容错和恢复机制

HDFS 的缺点

  • 低延迟数据访问处理较弱
    • 毫秒级别的访问响应较慢
    • 低延迟和高吞吐率的请求处理较弱
  • 大量小文件存取处理较弱
    • 会占用大量NameNode的内存
    • 寻道时间超过读取时间
  • 不支持并发写入、文件随机修改
    • 一个文件仅有一个写者
    • 仅支持Append写入

HDFS 节点

Hadoop HDFS(一)-最码农

Hadoop 是建立在(master – slave)关系上 , HDFS 同样有 2 种类型的节点 ,集群中包含NameNode 和 DataNode。

  • HDFS Master ( NameNode )

NameNode 负责调度客户端的访问,管理从属节点以及将任务指派给它们,NameNode 执行文件系统的 Namespace 操作, 例如:打开、关闭、重命名文件和目录。NameNode 应当部署在相对可靠的硬件环境中。

  • HDFS Slave (DataNode)

DataNode 数据节点在 Hadoop 分布式文件系统里管理存储的数据,Slave (数量 1 ~ 1000)执行节点到节点间的任务和服务的读写请求,还执行来自于NameNode 节点的建立、删除、复制指令,一旦一个块(block)被写入DataNode , 将复制至其他 DataNode 并且继续执行,直到所配置副本的数量。DataNode 节点可以部署在廉价的硬件上,并且不需要非常可靠的硬件环境。

HDFS 进程

HDFS 的进程运行在以下节点上 :

  • NameNode: 运行在所有的 Master 上,用来存放元数据,如文件名存储、块的数量、副本的数量、位置块、块 ID 等,为了使用的可持续性,本地磁盘中还存放元数据副本,这种元数据放在内存中可更快速地检索数据,所以 NameNode 机器应该配置较高的内存。
  • DataNode:运行在所有的 DataNode 上,这些是存储数据的实际工作节点。

HDFS 数据存储

当任何文件被写入到 HDFS 中时,将被分成小块 ,称为块数据,默认块的大小为 128 MB,可以根据要求增加。这些块以分布式方式存储在集群的不同节点上,这为 Mapreduce 提供了一种在群集中并行处理数据的机制。每个块的多个副本存储在不同节点上的群集中。这就是数据的复制,默认情况下,HDFS 复制数量为 3。它提供容错、可靠性和高可用性,大文件被拆分为 n 个小块,这些块以分布式方式存储在群集中的不同节点上,每个块都被复制并存储在群集中的不同节点上。

Hadoop HDFS(一)-最码农

1、文件被切割成固大小的数据块

  • hadoop 1.x 上默认数据块大小是 64 MB,数据块大小可配置。在hadoop 2.x上默认是128M
  • 若数据块大小不到默认数据块大小,则单独成一个数据块。

2、block大小配置

如果进行数据块的自定义需要修改hdfs-site.xml文件,例如:

<property>
<name>dfs.blocksize</name>
<value>100m</value>
</property>
<property>
<name>dfs.namenode.fs-limits.min-block-size</name>
<value>100m</value>
</property>

此时表示 HDFS 每个数据的大小为100MB。注意,在修改HDFS的数据块大小时,先停掉集群Hadoop 的运行进程,修改完毕后重新启动。

3、一个文件存储方式

  • 按大小切割成若干个 block,存储在不同的节点上
  • 每个 block 默认存三个副本
  • Block 大小和副本数由 Client 上传文件的时候设置。文件上传成功以后,副本数可以变更, 但是 Block 大小不可变。 dfs.blocksize 100m dfs.namenode.fs-limits.min-block-size 100m

4、HDFS 的 Block 块大小为什么是128MB

Block 块的大小主要取决于磁盘传输速率,一般 hdfs 的寻址时间为 10ms 左右。当寻址时间为传输时间的 1%时为最佳状态,因此传输时间大概在 1s 左右。机械硬盘文件顺序读写的速度为100 MB/s,普通固态为500MB/s,PCIe 固态的速度可以达到 2000 MB/s,因此块的大小可以分别设为 128 MB、512 MB、2048 MB。

HDFS 体系结构

Hadoop 分布式文件系统结构见下图,有一个 NameNode, 且有多个 DataNode 执行存储工作。节点排列在集群中,数据块的副本存储在集群中不同的机器上,以提供容错机制。本文的其余章节里,我们将看到如何在 HDFS 中执行读取和写入操作,要在 HDFS 中读取或写入文件,客户端需要与NameNode 进行交互,建立文件的 write-once-read-many 模型。

Hadoop HDFS(一)-最码农

NameNode 存储元数据,DataNode 存储实际数据。集群环境中,客户端使用 NameNode 执行交互任务。集群中的一些 DataNode 节点将 HDFS 数据存储在本地磁盘中,DataNode 定期向NameNode 发送心跳消息以指示它处于活动状态,并且根据复制数量(默认值3),复制数据到其他数据节点。

NameNode

HDFS 体系结构中的 NameNode 称为主节点,存储元数据,即数据块、副本和其他详细信息的数量和描述。此元数据存储在 Master 的内存中,以便更快地检索数据。NameNode 维护和管理 Slave 数据节点,并将任务分配给它们。它是 HDFS 的核心,因此应该部署在相对可靠的硬件上。

核心任务

  • 管理文件系统的命名空间
  • 规范客户端对文件的访问
  • 操作文件系统,例如命名、关闭、打开文件/目录
  • 接收 Hadoop 集群中的心跳消息和 block(块)报告,确保数据节点是活动的,block 报告包含数据节点上所有块的列表信息
  • 处理所有 block 的复制数量

镜像文件

FsImage 包含整个文件系统名称空间,作为文件存储在 NameNode 的本地文件系统中,还包含文件系统中所有目录和索引的序列化形式,每个索引都是文件或目录元数据的内部表示。

编辑日志

EditLogs 包含对 Fsimage 上的文件系统所做的所有最新修改,如:NameNode 从客户端接收创建、更新、删除请求,之后这个请求被记录到编辑日志中。

DataNode

DataNode 也称为 Slave,在 Hadoop HDFS 体系结构中,DataNode 将实际数据存储在 HDFS中,它根据客户机的请求执行 IO 操作,可以部署在较廉价的硬上。

核心任务

根据NameNode的指令,进行block副本的创建、删除和复制
管理系统内的数据存储
向 NameNode 发送心跳消息以报告 HDFS 的运行状况,默认情况下,此频率设置为3秒。

Secondary NameNode

Secondary NameNode 称为辅助节点,它并不是 NameNode 节点的备份。当 NameNode 启动时,从(Fsimage)镜像文件读取HDFS的状态信息,修改 Editlogs(编辑日志)文件,之后将编辑日志合并更新到镜像文件中,最后使用新的空编辑文件开始正常操作。生产环境中 NameNode 很少重新启动,随着使用时间的推移,编辑日志会越来越大,Secondary NameNode作用是帮助我们减小编辑日志,更新合并编辑日志到镜像文件中。

Hadoop HDFS(一)-最码农

Checkpoint Node

Checkpoint Node 称为检查节点,是定期创建命名空间检查点的节点。

检查节点首先下载镜像文件,并从活动的 NameNode 进行编辑,然后在本地合并它们(镜像文件和编辑日志),最后将新的镜像文件上传到活动的 NameNode。最新的检查点存储在与 NameNode目录结构相同的目录中,允许检查点的镜像在必要时始终可供 NameNode 读取。

Backup Node

Backup Node 称为备份节点,提供与检查点节点相同的检查点功能,NameNode 支持一个备份节点。

备份节点保留内存中文件系统命名空间的最新副本,它始终与活动的 NameNode状态同步,与检查点不同,它不需要下载镜像文件和编辑日志,在内存中已拥有命名空间的最新状态,执行效率更高,只需要将命名空间保存到本地镜像文件中并重新编辑。

Replication Management

Replication Management 称为副本管理。

如果一个副本不可访问且已损坏,我们可以从另一个副本读取数据。HDFS 体系结构中每个文件块默认的复制数量是 3,这也是可配置的。因此,每个块复制三次并存储在不同的数据节点上。

如果我们使用默认配置在 HDFS 中存储 128 MB 的文件,我们将占用 384 MB(3 * 128 MB)的空间。

NameNode 定期从 DataNode 接收块的消息报告以维护复制数量,当块复制数量过度或不足时,根据需要添加或删除 NameNode 的副本。

Rack Awareness

Rack Awareness 称为机架感知。

Hadoop 在一组计算机上运行,这些计算机通常分布在许多机架上,NameNode 将块的副本放置在多个机架上, 以提高容错能力。NameNode 尝试在每个机架中至少放置一个块的副本,目的是提高数据可靠性和网络带宽利用率,以便在整个机架出现故障后,系统也将具有高度可用性。

Hadoop 集群中,为了提高 HDFS 文件读写时的网络流量,NameNode 选择靠近同一机架或附近机架的DataNode 进行读写请求,NameNode 通过维护每个数据节点的机架 ID 来获取机架信息,机架感知是基于机架信息选择数据节点。

NameNode确保所有副本都不存储在同一个机架或单个机架上,它遵循机架感知算法来减少延迟和容错,我们知道默认的复制数量是 3,根据机架感知算法,块的第一个副本将存储在本地机架上,下一个副本将在同一机架中存储另一个数据节点,第三个副本将存储在不同机架上。

机架用于提高:

  • 数据高可用性和可靠性
  • 集群的性能
  • 网络带宽
Hadoop HDFS
赞赏 赞(5) 收藏(0)
Hadoop 完全分布式搭建
上一篇
Hadoop HDFS(二)
下一篇
再想想
暂无评论
随 机 推 荐
K-近邻算法
Hadoop HA 高可用
Hadoop HDFS(一)
Zookeeper 内部原理
Hadoop 数据压缩
Zookeeper 分布式安装部署
MapReduce 作业提交全过程
HDFS 概述
5
  • 5
  • 0
介绍

我们致力于打造一个原创的计算机相关技术的博客网站,旨在为访客提供一个优质的计算机技术教程交流平台。网站开辟了很多于计算机相关的栏目,并且收集了不少实用资源,同时也鼓励欢迎访客一起分享、交流、学习。

灵魂推荐
Veer图库 数码荔枝
栏目标题
首页 动态广场 精选栏目 闲言碎语 左邻右里 笔记屋
Copyright © 2021-2022 最码农. Designed by nicetheme. 苏ICP备20033168号
  • 首页
  • 动态广场
  • 精选栏目
  • 闲言碎语
  • 左邻右里
  • 笔记屋
# 教程 # # Hadoop # # HDFS # # 人工智能 # # 算法 #
Cosy
即使世界毁灭,也总有回光返照的那一刻
90
文章
0
评论
413
喜欢