Hadoop理论及实践-HDFS读写数据流程(参考Hadoop官网)

news2024/11/24 1:47:35

NameNode与DataNode回顾

主节点和副本节点通常指的是Hadoop分布式文件系统(HDFS)中的NameNode和DataNode。

  • NameNode(主节点):NameNode是Hadoop集群中的一个核心组件,它负责管理文件系统的命名空间和元数据。它记录了文件的目录结构、文件的块分配信息以及每个文件块所在的DataNode等关键信息。NameNode维护着整个文件系统的元数据,并提供对文件系统的访问控制。

  • DataNode(副本节点):DataNode是Hadoop集群中的另一个核心组件,它负责存储实际的数据块。当客户端写入文件时,数据被分成多个块并复制到不同的DataNode上进行存储。DataNode会周期性地向NameNode汇报存储信息、块的完整性以及心跳状态等信息。

        NameNode和DataNode协同工作,实现了HDFS的高可靠性和扩展性。NameNode作为主节点,负责管理和控制整个文件系统的元数据;而DataNode作为副本节点,负责存储和处理实际的数据块。这种分布式架构使得HDFS能够容纳大规模的数据,并提供高吞吐量的读写操作。

HDFS读数据流程

        HDFS读数据操作,一般是客户端通过RPC 调用Namenode以确定文件按块起始位置,对于每一个块,namenode返回保存该块副本的datanode地址(返回结果具有优先顺序),客户端通过DistributedFileSystem返回的FSDataInputStream对象,调用read方法将数据从datanode传回客户端。

读流程详细版

1、客户端请求文件读取

        当用户需要读取一个文件时,首先客户端会向NameNode发送一个读取文件的请求

2、NameNode响应

        NameNode接收到请求后,会检查文件的元数据信息,包括文件的位置、块的位置等。

        具体为NameNode验证权限和路径,检查文件是否存在。如果文件不存在,则返回错误信息给客户端;如果文件存在,则返回文件的元数据信息(如文件大小、块信息等)给客户端

3、数据块位置获取

        NameNode根据文件的元数据信息确定了文件所在的数据块,然后会返回该数据块所在的DataNode列表给客户端。

4、就近原则选择DataNode,建立数据传输通道

        客户端根据就近原则选择距离自己最近的一个DataNode作为主节点(Primary DataNode),用于与其建立数据传输通道。

        具体如下:客户端通过比较自身与各个DataNode的网络距离,选择距离最近的DataNode作为首选节点, 首选节点可能存在负载过重的情况,因此客户端需要进行负载均衡。客户端可以向NameNode请求额外的DataNode列表。客户端从首选节点和其他可用的DataNode中选择一个数据副本进行读取。这里可以使用随机选择算法来确保负载均衡

5、NameNode节点与DataNode节点建立通信

        NameNode主节点开始与其他副本节点DataNode进行通信,DataNode节点将数据块传输给NameNode节点,并由NameNode节点将数据传输给客户端

6、考虑负载均衡,进行数据传输

        HDFS采用负载均衡的策略来提高系统的性能和资源利用率。在读取文件时,如果某个DataNode的负载较高,可以选择其他负载较低的DataNode进行数据传输,以实现负载均衡。

7、数据传输

      DataNode主节点将数据块分成一系列小的数据包,并通过TCP/IP协议发送给客户端。

     注: DataNode开始向客户端传输数据(从磁盘中读取数据输入流FSDataInputStream,以packet为单位做检验)

8、客户端以packet为接收单位,先本地缓存,然后写入目标文件,即客户端接收到数据包后,可以进行处理或者保存。

读流程简化版

  1. 客户端向NameNode发送读取文件请求。
  2. NameNode检查文件的元数据信息,确定文件所在的数据块和对应的DataNode列表。
  3. 客户端根据就近原则选择距离最近的一个DataNode作为主节点。
  4. 主节点与其他副本节点建立通信,并将数据块传输给客户端。
  5. 客户端接收数据包并进行处理或保存。

读数据注意

1、hdfs读数据流程是串行读

2、怎样选择节点

        同一机器,同一机架,同一网络

读面试题

  1. HDFS读文件的流程是怎样的?

    • HDFS读文件的流程包括:客户端向NameNode发送读取文件的请求,NameNode验证权限和路径并返回文件的元数据信息,客户端根据元数据信息获取数据块所在的数据节点列表,客户端与数据节点建立连接并发送读取数据块的请求,数据节点将数据块发送给客户端,客户端接收并处理数据块,通过重复这个过程直到读取完所有数据块。
  2. HDFS读取大文件时是否会有性能问题?

    • HDFS针对大文件的并行读取机制可以提高读取性能。大文件被切分成多个数据块,并且这些数据块可以同时从不同的数据节点读取,利用了集群中多个节点的读取带宽和计算资源,从而提高了整体的读取效率。
  3. HDFS如何处理并发读取操作?

    • HDFS使用共享锁来实现并发访问控制。多个客户端可以同时读取同一个文件的不同部分,每个数据节点也可以同时为多个客户端提供数据块的读取。这种并发读取机制保证了系统的吞吐量和响应时间。
  4. 如果某个数据节点发生故障,会影响HDFS的读取吗?

    • 当某个数据节点发生故障时,HDFS会自动检测到并通知NameNode。NameNode会选择其他副本所在的数据节点进行读取,以保证数据的可用性和完整性。因此,即使某个数据节点发生故障,不会明显影响HDFS的读取操作。
  5. HDFS的读取操作与传统文件系统的读取操作有何不同?

    • HDFS采用流式读取方式,数据块直接从数据节点传输给客户端,减少了读取延迟。而传统文件系统通常需要将整个文件先复制到客户端再进行读取,这个过程会消耗大量的时间和网络带宽。

HDFS写数据流程

写流程详细版

1、客户端向HDFS的NameNode发送写请求。

  • 客户端通过DistributedFileSystem的API或命令行工具(如hdfs dfs -put)向HDFS的NameNode发送写入请求,请求创建新文件或追加数据。

2、NameNode接收到写请求后,首先检查文件的元数据信息,并确定文件将要存储的位置和所需的数据块数量,确定文件是否存在以及是否有写入权限。

  • NameNode维护了整个文件系统的元数据信息,包括文件和目录的属性、访问控制列表等,它会检查请求中指定的路径和权限。
  • 如果文件不存在,则创建新文件,并将其元数据信息记录在NameNode的命名空间中。NameNode在命名空间中为新文件分配一个唯一的文件ID,并将该文件的基本信息存储在内存中。        

4、数据块分配。NameNode根据一定的策略选择可用的DataNode,并为文件的每个数据块分配一个主节点(Primary DataNode)和多个副本节点(Replica DataNode),NameNode返回文件的数据节点列表给客户端。

  • NameNode根据配置的复制因子(默认为3)和集群的拓扑结构来选择一组适合的数据节点作为副本位置。选择的原则通常是数据节点距离客户端的网络距离较近。
  • 就近原则选择主节点:在选择主节点时,HDFS会考虑就近原则,即选择距离客户端最近的DataNode作为主节点,以减少数据传输的延迟。

  • 客户端收到数据节点列表后,就知道了数据块应该写入哪些数据节点。

5、客户端根据数据节点列表,将数据切分成数据块,并按照指定的策略将这些数据块依次写入各个DataNode的数据节点。        

  • 客户端通常会将大数据文件切分成多个数据块,每个数据块默认大小为128MB(可以通过配置进行调整)。客户端通过与相应的数据节点建立连接,并将数据块发送给数据节点。
  • 主节点与副本节点建立通信:主节点与副本节点之间建立通信通道。主节点将数据块传输给副本节点,并协调副本节点之间的数据同步
  • 数据写入主节点:客户端通过与主节点建立连接向主节点发送数据写入请求。主节点将数据块按照指定的格式进行存储,并将数据复制到副本节点。

  • 数据复制和同步:主节点将数据块的副本传输给其他副本节点,并协调副本节点之间的数据同步,保证数据的一致性。

6、每个数据节点接收到数据块后,将数据块存储在本地磁盘上,并向客户端发送确认消息。

  • 数据节点负责接收数据块并存储在本地的数据目录中。一旦数据块完全写入磁盘,数据节点会向客户端发送确认消息。

7、客户端等待所有数据节点都完成数据块的写入。

  • 客户端会等待所有数据块都成功写入对应的数据节点,并收到数据节点的确认消息。

8、客户端向NameNode发送完成写操作的请求。

  • 客户端通知NameNode已经完成了文件的写入操作。

9、NameNode接收到完成写操作的请求后,更新文件的元数据信息。

  • NameNode会更新文件的元数据信息,包括文件大小、数据块的位置信息等。

10、客户端收到写操作完成的确认消息。

  • 客户端收到NameNode的确认消息,表示文件写入操作已经成功完成。

写流程简化版

  • 客户端向NameNode发送写入文件请求。
  • NameNode确定文件存储位置和数据块分配情况。
  • 主节点与副本节点建立通信并协调数据复制和同步。
  • 客户端通过与主节点建立连接将数据写入主节点。
  • 主节点将数据块的副本传输给其他副本节点进行数据同步。
  • 当所有副本节点完成数据写入和同步后,主节点发送写操作完成确认信号。
  • 客户端关闭连接,完成文件写入操作。

写面试题

  1. 解释HDFS的工作原理和体系结构。

           HDFS是一个分布式文件系统,用于存储和管理大数据集。它由NameNode和DataNode组成,其中NameNode负责维护文件系统的元数据信息,而DataNode负责存储实际的数据块。客户端通过与NameNode和DataNode的交互来进行文件读写操作。
    1. HDFS中的NameNode和DataNode的角色是什么,它们之间的通信机制是怎样的?

      NameNode是HDFS的主节点,负责管理整个文件系统的命名空间和元数据信息。它与DataNode进行心跳通信以监控其状态,并指导数据块的复制和恢复操作。
  2. HDFS如何实现数据的容错性和可靠性?

    • HDFS提供了数据的容错性和可靠性,主要通过数据的复制机制实现。每个数据块默认会有三个副本存储在不同的数据节点上,这样即使某个数据节点发生故障,仍然可以从其他副本进行读取和恢复。HDFS还支持自动故障检测和恢复,当一个数据节点出现故障时,NameNode会通知其他数据节点进行副本的重新复制。
  3. 如何处理大规模文件的写入?

    • HDFS通过将大文件切分成多个数据块进行并行写入,从而实现高效的大规模文件写入。同时,HDFS使用流式写入的方式,客户端将数据块直接发送给数据节点,而不需要整个文件先完全写入客户端再传输到数据节点。这大大减少了写入延迟,提高了写入性能。
  4. 复制因子是什么,它对HDFS的影响是什么?

    • 复制因子是指每个数据块在HDFS中的副本数量。默认情况下,HDFS的复制因子为3,即每个数据块会有三个副本存储在不同的数据节点上。复制因子的增加可以提高数据的容错性和可靠性,但也会增加存储空间的开销。
  5. HDFS如何处理并发写入操作?

    • HDFS通过使用排他锁(在写操作时)和共享锁(在读操作时)来实现并发访问控制。对于写操作,只允许一个客户端进行写入,并且会进行写锁定,防止其他客户端同时写入。对于读操作,多个客户端可以同时读取同一个文件的不同部分。
  6. 数据节点故障时的数据恢复机制是怎样的?

    • 当一个数据节点发生故障导致某些副本不可访问时,HDFS会自动检测到故障,并向NameNode报告。NameNode会根据存储在元数据中的信息,选择其他拥有相应副本的数据节点进行数据复制,以保证数据的完整性和可用性。
  7. HDFS的写入操作与传统文件系统的写入操作有何不同?

    • HDFS的写入操作是追加写入而非覆盖写入,即新的数据会追加到已有的数据块中,而不会修改已有的数据。这种方式可以避免数据的移动和复制,提高写入性能。
  8. 可能遇到的HDFS写入性能问题和优化方法有哪些?

    • 可能的性能问题包括网络带宽瓶颈、硬盘IO限制等。针对这些问题,可以采取以下优化方法:增加数据节点和网络带宽以提高写入并行度、选择更高性能的硬盘或使用SSD、调整HDFS参数以优化性能等。

参考文章

Apache Hadoop 3.4.0-SNAPSHOT – Hadoop Commands Guide,hadoop官网

Tuzki眯眼看世界 - 简书

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

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

相关文章

uni——不规则tab切换(skew)

案例展示 案例代码 <!-- 切换栏 --> <view class"tabBoxs"><view class"tabBox"><block v-for"(item,index) in tabList" :key"index"><view class"tabItem":class"current item.id&…

Vue 本地应用 记事本 v-on v-model v-for使用

vue当中如何生成列表结构&#xff1f;使用的指令是v-for&#xff0c;同时要有一个可以生成列表的数据&#xff0c;常用的是数组。记事本里面的内容并不复杂&#xff0c;所以这里使用字符串数组就行了。 获取用户输入的内容使用绑定v-model&#xff0c;双向数据绑定&#xff08…

黑马头条项目学习--Day1: 环境搭建、SpringCloud微服务(注册发现、网关)

Nacos注册发现、网关 a. 项目介绍b. app登录1) 需求分析2) 表结构分析3) 手动加密&#xff08;md5随机字符串&#xff09;4) 用户端微服务搭建5) 功能实现6) app网关7) 网关校验jwt8) 前端集成, 配置nginx a. 项目介绍 业务说明 技术栈说明 [外链图片转存失败,源站可能有防盗…

基于MSP430 红外避障-遥控小车(电赛必备 附项目代码)

文章目录 一、硬件清单二、模块连接三、程序设计四、项目源码 项目环境&#xff1a; 1. MSP430F55292. Code Composer Studio3. 蓝牙调试助手 项目简介&#xff1a; 小车可分为3种工作模式&#xff0c;每种工作模式都会打印在OLED显示屏上&#xff0c;通过按键转换工作模式。 模…

RocketMQ 5.x broker注册到Nameserve源码分析

这里是weihubeats,觉得文章不错可以关注公众号小奏技术&#xff0c;文章首发。拒绝营销号&#xff0c;拒绝标题党 RocketMQ版本 5.1.0 背景 入口 这里源码入口我们就从broker启动开始查看吧&#xff0c;然后慢慢到NameServer 由于不知道具体代码在哪&#xff0c;所以我们就…

Three.js阴影

目录 Three.js入门 Three.js光源 Three.js阴影 使用灯光后&#xff0c;场景中就会产生阴影。物体的背面确实在黑暗中&#xff0c;这称为核心阴影&#xff08;core shadow&#xff09;。我们缺少的是落下的阴影&#xff08;drop shadow&#xff09;&#xff0c;即对象在其他…

汇总当下的AI绘画模型

AI绘画从今年过年那阵儿兴起&#xff0c;到现在(2023.8)已经半年过去了&#xff0c;涌现了很多风格迥异的模型&#xff0c;我在这里简单汇总一些。 一、写实人物类 1.1 AWPortrait 比较拟真的人物肖像 1.2 XXMix_9realistic 2.5D人物模型&#xff0c;因为画面带有一丝油画的…

从零开始学习 Java:简单易懂的入门指南之API、String类(八)

常用API 1.API1.1API概述1.2如何使用API帮助文档 2.String类2.1String类概述2.2String类的特点2.3String类的构造方法2.4创建字符串对象两种方式的区别2.5字符串的比较2.5.1号的作用2.5.2equals方法的作用 2.6用户登录案例2.6.1案例需求2.6.2代码实现 2.7遍历字符串案例2.7.1案…

【SQL应知应会】表分区(四)• Oracle版

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分区表 • Oracle版 前言一、分区表1.什么是表分区…

深入大B行业,什么是最有力的敲门砖?

引言&#xff1a;2023上半年&#xff0c; 能扛过外部环境各种变化&#xff0c; 这样的科技公司就很不容易了。 【全球云观察 &#xff5c; 热点关注】在当前后疫情时代下&#xff0c;全球经济增长处于的低增长期&#xff0c;这对所有科技企业的发展带来了直接影响。 有业内人…

【ChatGPT 指令大全】怎么使用ChatGPT来辅助学习英语

在当今全球化的社会中&#xff0c;英语已成为一门世界性的语言&#xff0c;掌握良好的英语技能对个人和职业发展至关重要。而借助人工智能的力量&#xff0c;ChatGPT为学习者提供了一个有价值的工具&#xff0c;可以在学习过程中提供即时的帮助和反馈。在本文中&#xff0c;我们…

解决VScode远程服务器时opencv和matplotlib无法直接显示图像的问题

解决VScode远程服务器时opencv和matplotlib无法直接显示图像的问题 1、本方案默认本地已经安装了VScode与MobaXterm2、在服务器端3、在本地端安装MobaXterm4、测试5、opencv显示测试&#xff08;测试过程中需保持MobaXterm开启的状态&#xff09;6、 matplotlib显示测试&#x…

【Linux】操作系统与冯诺依曼体系——深度解析(软硬件层面)

​ 前言 大家好吖&#xff0c;欢迎来到 YY 滴 Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过Linux的老铁&#xff0c;从软硬件层面向大家介绍操作系统与冯诺依曼体系&#xff0c; 主要内容含&#xff1a; 欢迎订阅 YY滴Linux专栏&#xff01;更多干货持…

如何找到优质跨境电商补单资源

做跨境电商的卖家都知道&#xff0c;补单&#xff08;测评&#xff09;可以帮助他们的产品快速提升销量、评论&#xff0c;获得排名&#xff0c;打造爆款&#xff0c;但是现在市面上有大量的测评机构资源是烂资源&#xff0c;机刷&#xff0c;黑卡等一系列不法手段层出不穷&…

润和软件人才评定报名系统正式上线,培养openEuler专业生态人才

8月3日&#xff0c;江苏润和软件股份有限公司&#xff08;以下简称“润和软件”&#xff09;自主研发的人才评定报名系统正式上线运行&#xff0c;欢迎大家咨询报名&#xff01; 2022年10月&#xff0c;润和软件申请并通过了openEuler开源社区理事会评审&#xff0c;成为openE…

条件语义相似度-CSTS

C-STS: Conditional Semantic Textual Similarity 语义文本相似度&#xff08;STS&#xff09;&#xff1a;测量一对句子之间的相似程度。在本质上是一个模棱两可的任务&#xff0c;因为句子相似度取决于某一特定方面。 条件语义文本相似度&#xff08;C-STS&#xff09;&…

破解难题:精准评估研发工作量的艺术

引言 在当今的软件研发环境中&#xff0c;评估研发工作量已经成为了一个重要且不容忽视的话题。无论是研发团队的日常工作&#xff0c;还是项目的战略规划&#xff0c;都离不开对工作量的精准评估。然而&#xff0c;评估研发工作量并非易事&#xff0c;它涉及到多个方面的挑战…

MongoDB创建用户 、数据库、索引等基础操作

MongoDB的权限认证是相对来说比较复杂的&#xff0c;不同的库创建后需要创建用户来管理。 本机中的MongoDB是docker 启动的&#xff0c;所以先进入docker的镜像中 docker exec -it mongodb bash 这样就进入到了镜像MongoDB中&#xff0c;然后输入命令连接MongoDB数据库 注…

LLM - Transformer LLaMA2 结构分析与 LoRA 详解

目录 一.引言 二.图说 LLM 1.Transformer 结构 ◆ Input、Output Embedding ◆ PositionEmbedding ◆ Multi-Head-Attention ◆ ADD & Norm ◆ Feed Forward ◆ Linear & Softmax 2.不同 LLM 结构 ◆ Encoder-Only ◆ Encoder-Decoder ◆ Decoder-Only …

在线识别文字提取,好用的方法速速收下

在现代社会&#xff0c;识别文字提取已经成为了一项非常重要的技能。随着网络技术的不断发展&#xff0c;现在我们已经可以通过在线工具来识别文字并提取出所需要的信息。本文将分享一些好用的方法和注意事项&#xff0c;帮助大家更好地进行在线识别文字提取。 OCR技术 OCR技术…