大数据基础:Hadoop之HDFS重点架构原理

文章目录

Hadoop之HDFS重点架构原理

一、什么是Hadoop

二、HDFS简介

三、HDFS架构

3.1、NameNode

3.2、SecondaryNameNode

3.3、DataNode

3.4、Client

四、fsimage和editslog合并

五、Block副本放置策略

六、读写流程

6.1、HDFS写文件流程

6.2、HDFS读文件流程


Hadoop之HDFS重点架构原理

一、什么是Hadoop

分布式系统基础架构,旨在解决海量数据存储和计算分析问题,核心组件:HDFS + MapReduce + Yarn。

二、HDFS简介

Hadoop Distributed File System - 分布式文件存储系统,解决海量数据存储问题。

三、HDFS架构

3.1、NameNode

NameNode就是主从架构中的Master,是HDFS中的管理者。HDFS中数据文件分布式存储在各个DataNode节点上,NameNode维护和管理文件系统元数据(空间目录树结构、文件、Block信息、访问权限),随着存储文件的增多,NameNode上存储的信息越来越多,NameNode主要通过两个组件实现元数据管理:fsimage(命名空间镜像文件)和editslog(编辑日志)。

  • fsimage:HDFS文件系统元数据的镜像文件,其中包含了HDFS文件系统的所有目录和文件相关信息元数据。

  • editslog:用户操作HDFS的编辑日志文件,存放HDFS文件系统的所有操作事件,文件的所有写操作会被记录到Edits文件中

NameNode作用:

  1. 完全基于内存存储文件元数据、目录结构、文件block的映射信息。

  2. 提供文件元数据持久化/管理方案。

  3. 提供副本放置策略。

  4. 处理客户端读写请求。

3.2、SecondaryNameNode

随着操作HDFS的数据变多,久而久之就会造成edits文件变的很大,如果namenode重启后再一条条执行edits日志恢复状态就需要很长时间,导致重启速度慢,所以在NameNode运行的时候就需要将editslog和fsimage定期合并。这个合并操作就由SecondaryNameNode负责。

所以SecondaryNameNode作用就是辅助NameNode定期合并fsimage和editslog,并将合并后的fsimage推送给NameNode。

3.3、DataNode

DataNode是主从架构中的Slave,DataNode存储文件block块,Block在DataNode上以文件形式存储在磁盘上,包括2个文件,一个是数据文件本身,一个是元数据(包括block长度、block校验和、时间戳)。当DataNode启动后会向NameNode进行注册,并汇报block列表信息,后续会周期性(参数dfs.blockreport.intervalMsec决定,默认6小时)向NameNode上报所有的块信息。同时,DataNode会每隔3秒与NameNode保持心跳,如果超过10分钟NameNode没有收到某个DataNode的心跳,则认为该节点不可用。

DataNode作用:

  1. 基于本地磁盘存储block数据块。

  2. 保存block的校验和数据保证block的可靠性。

  3. 与NameNode保持心跳并汇报block列表信息。

3.4、Client

Client是操作HDFS的客户端。

Client作用:

  1. 与NameNode交互,获取文件block位置信息。

  2. 与DataNode交互,读写文件block数据。

  3. 文件上传时,负责文件切分成block并上传。

  4. 可以通过client访问HDFS进行文件操作或管理HDFS。

四、fsimage和editslog合并

  1. 当HDFS集群首次启动会在NameNode上创建空的fsimage,对HDFS的操作会记录到editslog文件中。

  2. 当开始进行editslog和fsimage合并时,SecondaryNameNode请求namenode生成新的editslog文件并向其中写日志。

  3. SecondaryNameNode通过HTTP GET的方式从NameNode下载fsimage和edits文件到本地。

  4. SecondaryNameNode将fsimage加载到自己的内存,并根据editslog更新内存中的fsimage信息,然后将更新完毕之后的fsimage写到磁盘上。

  5. SecondaryNameNode通过HTTP PUT将新的fsimage文件发送到NameNode,NameNode将该文件保存为.ckpt的临时文件备用。

  6. NameNode重命名该临时文件并准备使用,此时NameNode拥有一个新的fsimage文件和一个新的很小的editslog文件(可能不是空的,因为在SecondaryNameNode合并期间可能对元数据进行了读写操作)。

  7. 后续SecondaryNameNode会按照以上步骤周期性进行editslog和fsimage的合并。

注意:合并时机默认间隔1小时(3600s)或者每分钟(60s)editslog存储的事务(即操作数)到了1000000个。

五、Block副本放置策略

HDFS中每个block块有3副本。

第一个副本:放置在上传文件的DataNode,也就是Client所在节点上;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。

第二个副本:放置在与第一个副本不同的机架的节点上。

第三个副本:与第二个副本相同机架的随机节点。

更多副本:随机节点存放。

六、读写流程

6.1、HDFS写文件流程

  1. 客户端会创建DistributedFileSystem对象,DistributedFileSystem会发起对namenode的一个RPC连接,请求创建一个文件,不包含关于block块的请求。namenode会执行各种各样的检查,确保要创建的文件不存在,并且客户端有创建文件的权限。如果检查通过,namenode会创建一个文件(在edits中,同时更新内存状态),否则创建失败,客户端抛异常IOException。

  2. NN在文件创建后,返回给HDFS Client可以开始上传文件块。

  3. DistributedFileSystem返回一个FSDataOutputStream对象给客户端用于写数据。FSDataOutputStream封装了一个DFSOutputStream对象负责客户端跟datanode以及namenode的通信。

  4. 客户端中的FSDataOutputStream对象将数据切分为小的packet数据包(64kb,core-default.xml:file.client-write-packet-size默认值65536),并写入到一个内部队列(“数据队列”)。DataStreamer会读取其中内容,并请求namenode返回一个datanode列表来存储当前block副本。列表中的datanode会形成管线,DataStreamer将数据包发送给管线中的第一个datanode,第一个datanode将接收到的数据发送给第二个datanode,第二个发送给第三个,依次类推。

  5. FSDataOutputStream维护着一个数据包的队列,这的数据包是需要写入到datanode中的,该队列称为确认队列。当一个数据包在管线中所有datanode中写入完成,就从ack队列中移除该数据包。

  6. 当block传输完成,DN会向NN汇报block信息,同时Client继续传输下一个block,如果有多个block,则会反复从步骤4开始执行。

  7. 当客户端完成了数据的传输,调用数据流的close方法。该方法将数据队列中的剩余数据包写到datanode的管线并等待管线的确认。

  8. 客户端收到管线中所有正常datanode的确认消息后,通知namenode文件写入成功。

6.2、HDFS读文件流程

  1. 客户端通过FileSystem对象的open方法打开希望读取的文件,DistributedFileSystem对象通过RPC调用namenode,以确保文件起始位置。对于每个block,namenode返回存有该副本的datanode地址。这些datanode根据它们与客户端的距离来排序。如果客户端本身就是一个datanode,并保存有相应block一个副本,会从本地读取这个block数据。

  2. DistributedFileSystem返回一个FSDataInputStream对象给客户端读取数据。该对象管理着datanode和namenode的I/O,用于给客户端使用。客户端对这个输入调用read方法,存储着文件起始几个block的datanode地址的DFSInputStream连接距离最近的datanode。通过对数据流反复调用read方法,可以将数据从datnaode传输到客户端。到达block的末端时,DFSInputSream关闭与该datanode的连接,然后寻找下一个block的最佳datanode。客户端只需要读取连续的流,并且对于客户端都是透明的。

  3. 客户端从流中读取数据时,block是按照打开DFSInputStream与datanode新建连接的顺序读取的。它也会根据需要询问namenode来检索下一批数据块的datanode的位置。一旦客户端完成读取,就close掉FSDataInputStream的输入流。

  4. 在读取数据的时候如果DFSInputStream在与datanode通信时遇到错误,会尝试从这个块的一个最近邻datanode读取数据。同时也记住故障datanode,保证以后不会反复读取该节点上后续的block。DFSInputStream也会通过校验和确认从datanode发来的数据是否完整。如果发现有损坏的块,DFSInputStream会尝试从其他datanode读取其副本并通知namenode。

  5. Client下载完block后会验证DN中的MD5,保证块数据的完整性。


  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3224332.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

tk 文本生成器

import random import tkinter as tk import ttkbootstrap as ttk from tkinter import messagebox import pyperclipdef wenben_run():def generate_text(original_text, length):# 去掉原始文本中的换行符和空格original_text original_text.replace(\n, )original_text or…

全面助力巴西slot游戏包推广本土网盟dsp流量广告优势

全面助力巴西slot游戏包推广本土网盟dsp流量广告优势 在巴西这片充满活力的土地上,电子游戏市场蓬勃发展,成为娱乐产业的重要组成部分。随着网络技术的不断进步和移动互联网的普及,巴西玩家对于电子游戏的热情愈发高涨,游戏市场呈…

java算法day9

232.用栈实现队列 用队列实现栈 有效的括号 删除字符串中的所有相邻重复项 逆波兰表达式求值 解决栈和队列的基本数据结构 Queue(队列) 在java中是一个接口。定义的方法: //boolean add(E e): 将指定的元素插入此队列(如果…

研华工控机 UNO-2473G WIN7专业版系统下安装网卡驱动异常

基本配置:UNO-2473G、Windows 7 Pro 64bit 常规型嵌入式工控机,搭配Intel Atom™ E3845/Celeron J1900 处理器 第四代Intel Atom/Celeron J1900处理器,最高可达1.91/2.0 GHz,4GB DDR3L存储4/2 x GbE, 3 x USB 2.01 x USB 3.0或4…

OZON生活家居用品爆款新品

OZON生活家居用品爆款新品涵盖了多个方面,这些产品不仅满足了消费者对生活品质的追求,也反映了当前市场的热门趋势。以下是一些在OZON平台上备受关注的生活家居用品爆款新品: OZON生活家居用品爆款新品工具:D。DDqbt。COm/74rD T…

哪里有主机游戏店收费系统,佳易王电玩ps5ps4计时计费系统操作教程

哪里有主机游戏店收费系统,佳易王电玩ps5ps4计时计费系统操作教程 以下软件操作教程以,佳易王计时计费管理系统为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 一、软件程序图文讲解 1、主机游戏计时软件、电玩店计费软…

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 问题概述 📒📒 解决方案 📒🔖 方法一🔖 方法二🔖 方法三⚓️ 相关链接 🚓️📖 介绍 📖 在群晖(Synology)NAS设备上使用Docker时,我们可能会遇到查询Docker注册表失败,无法拉取Docker镜像的问题。这种情况…

Error:sql: expected 1 arguments, got 2

一 背景 在测试一个API接口时,看到日志里面突然抛出一个错误:Error:sql: expected 1 arguments, got 2 看了下,对应的表里面是有相关数据的,sql语句放在mysql里面执行也是没问题!那奇了怪了,为啥会产生这样…

商业地产规划vr实景还原系统更直观生动

在今日的建筑行业论坛中,众多业界专家深入探讨了建筑设计与展示的未来趋势。我们作为VR建筑展示领域的领军企业,始终秉持着对城市规划与发展的深度思考。多年来,我们积极参与并助力了无数城市片区的规划与建设。 回首2015年,我们与…

工业一体机为数字化工厂带来高效作业指导

随着工业4.0的浪潮席卷全球,数字化工厂的概念深入人心。在这一背景下,工业一体机作为数字化转型的重要一环,凭借其强大的功能和灵活的应用,为工厂实现高效作业指导提供了强大的助力。 一、工业一体机的优势:赋能数字化…

记录在Windows上安装Docker

在Windows上安装Docker时,可以选择使用不同的后端。 其中两个常见的选择是:WSL 2(Windows Subsystem for Linux 2)和 Hyper-V 后端。此外,还可以选择使用Windows容器。 三者的区别了解即可,推荐用WSL 2&…

汇川CodeSysPLC教程03-2-14 与HMI通信

硬件连接 PLC与HMI连接采用何种连接方式,通常是参考双方支持哪些接口。PLC(可编程逻辑控制器)与HMI(人机界面)之间的通讯方式主要有以下几种: 串行通讯(Serial Communication)&…

NVIDIA RTX 4090解析:卓越的性能表现带来全新的AI探索高度

前言 NVIDIA GeForce RTX 4090 在性能、效率和 AI 驱动的图形领域实现了质的飞跃。这款 GPU 采用 NVIDIA Ada Lovelace 架构,配备 24 GB 的 GDDR6X 显存。此外,RTX 4090还引入了多项创新技术。例如,它支持 DirectX12Ultimate,能够…

Linux基本命令的使用示例

目录 1实现效果:在downloads目录下创建1个空文件夹empty,创建1个空文件lake.txt,输入任意数据保存后退出 2实现效果:搜索包含关键字"泉眼"的行 3实现效果:重命名文件夹empty为full,复制文件cc…

利用 Python 解析pcap文件

1、问题背景 当面对处理网络数据包分析时,pcap文件作为一个常见的文件格式存储了网络数据包的详细记录,它常常被用来进行网络故障排查或安全分析。为了充分利用这些数据,我们需要对其进行解析并提取出有价值的信息,例如数据包类型…

AI自动生成PPT怎么用?5种提升演示效果的方法

随着#7月份我的同事一个个消失了#的话题热议,职场中的效率与变革再次成为焦点。 在忙碌的工作节奏中,AI自动生成PPT的软件悄然兴起,成为不少职场人的新宠。它们不仅简化了繁琐的PPT制作流程,更以高效、专业的姿态,助力…

Word文件打开密码设置:掌握这两种方法,保护你的文档安全

在日常工作和学习中,我们经常会使用Microsoft Word来创建和编辑文档。有时候,为了保护文档内容不被未经授权的人员查看或修改,我们通常会采用加密的方式来增加其安全性。那么Word文档怎么加密? 方法一:使用Word软件内置…

c++语法之函数重载

引例 我们在C语言里面写add函数的时候,只能支持一种类型的相加,除非我们创建多个add函数: 但是这样写并不方便,于是就有了c的函数重载。 函数重载 函数重载就是可以将多个参数类型、顺序、数量不同,实现逻辑相同的函…

Androidstudio开发,天气预报APP

1.项目功能思维导图 2. 项目涉及到的技术点 数据来源:和风天气API使用okhttp网络请求框架获取api数据使用gson库解析json数据使用RecyclerViewadapter实现未来7天列表展示和天气指数使用PopupMenu 实现弹出选项框使用动画定时器实现欢迎页倒计时和logo动画使用Text…

2023-2024华为ICT大赛中国区 实践赛网络赛道 全国总决赛 理论部分真题

Part1 数通模块(10题): 1、如图所示,某园区部署了IPv6进行业务测试,该网络中有4台路由器,运行OSPFv3实现网络的互联互通,以下关于该OSPFv3网络产生的LSA的描述,错误的是哪一项?(单选题) A.R1的LSDB中将存在…