面试大数据方向必问的问题:HDFS的读写流程

news2024/11/14 10:54:05

HDFS读写流程

这个问题是面试大数据分析师必不可少的问题,有不少面试者不能完整的说出
来,所以请务必记住。并且很多问题都是从 HDFS 读写流程中引申出来的。

一、HDFS读流程

  1. Client 向 NameNode 发送 RPC 请求。请求文件 block 的位置;
  2. NameNode 收到请求之后会检查用户权限以及是否有这个文件,如果都符
    合,则会视情况返回部分或全部的 block 列表,对于每个 block,NameNode
    都会返回含有该 block 副本的 DataNode 地址;这些返回的 DataNode 地址,
    会按照集群拓扑结构得出 DataNode 与客户端的距离,然后进行排序,排
    序两个规则:网络拓扑结构中距离 Client 近的排靠前;心跳机制中超时
    汇报的 DataNode 状态为 STALE,这样的排靠后;
  3. Client 选取排序靠前的 DataNode 来读取 block,如果客户端本身就是
    DataNode,那么将从本地直接获取数据(短路读取特性);
  4. 底层上本质是建立 Socket Stream(FSDataInputStream),重复的调用父类
    DataInputStream 的 read 方法,直到这个块上的数据读取完毕;
  5. 当读完列表的 block 后,若文件读取还没有结束,客户端会继续向
    NameNode 获取下一批的 block 列表;
  6. 读取完一个 block 都会进行 checksum 验证,如果读取 DataNode 时出现错误,
    客户端会通知 NameNode,然后再从下一个拥有该 block 副本的 DataNode
    继续读;
  7. read 方法是并行的读取 block 信息,不是一块一块的读取;NameNode 只是
    返回 Client 请求包含块的 DataNode 地址,并不是返回请求块的数据;
  8. 最终读取来所有的 block 会合并成一个完整的最终文件;
    在这里插入图片描述

二、HDFS写流程

  1. Client 客户端发送上传请求,通过 RPC 与 NameNode 建立通信,NameNode
    检查该用户是否有上传权限,以及上传的文件是否在 HDFS 对应的目录下
    重名,如果这两者有任意一个不满足,则直接报错,如果两者都满足,则
    返回给客户端一个可以上传的信息;
  2. Client 根据文件的大小进行切分,默认 128M 一块,切分完成之后给
    NameNode 发送请求第一个 block 块上传到哪些服务器上;
  3. NameNode 收到请求之后,根据网络拓扑和机架感知以及副本机制进行文
    件分配,返回可用的 DataNode 的地址;
  4. 客户端收到地址之后与服务器地址列表中的一个节点如 A 进行通信,本
    质上就是 RPC 调用,建立 pipeline,A 收到请求后会继续调用 B,B 在调
    用 C,将整个 pipeline 建立完成,逐级返回 Client;
  5. Client 开始向 A 上发送第一个 block(先从磁盘读取数据然后放到本地内存
    缓存),以 packet(数据包,64kb)为单位,A 收到一个 packet 就会发送给
    B,然后 B 发送给 C,A 每传完一个 packet 就会放入一个应答队列等待应答;
  6. 数据被分割成一个个的 packet 数据包在 pipeline 上依次传输,在 pipeline
    反向传输中,逐个发送 ack(命令正确应答),最终由 pipeline 中第一个
    DataNode 节点 A 将 pipelineack 发送给 Client;
  7. 当一个 block 传输完成之后, Client 再次请求 NameNode 上传第二个 block,
    NameNode 重新选择三台 DataNode 给 Client。

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

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

相关文章

深入理解深度学习——BERT派生模型:扩大掩码范围SpanBERT

分类目录:《深入理解深度学习》总目录 MLM训练方法是BERT拥有自然语言理解能力的核心训练方法。然而,BERT在预训练过程中挑选掩码词的概率是独立计算的,即BERT掩码词的粒度是最小的,可能是单个词,也可能是一个词的部分…

【连载】经历了十多年的电子开发,回过头来跟大家一起,看穿单片机!

「经历了十多年的单片机开发,站在我现在的高度来回看单片机,可谓望眼欲穿。」 下面振南要介绍的是“单片机的体系架构模型”,是超脱于任何一种具体型号的单片机芯片之上的(我感觉我要成仙),它具有很强的普适…

【Django】图形验证码显示及验证

图形验证码显示及验证 开发项目时,在登陆或者注册功能中为防止脚本恶意破坏系统,故而添加图形验证码。 文章目录 图形验证码显示及验证1 安装配置2 验证码显示及正确性验证3 效果显示 1 安装配置 安装第三方库 pip install django-simple-captcha配置s…

SpringBoot+Vue 的在线考试系统(附源码,数据库,教程)

文章目录 源码下载地址第一章第二章.主要技术第三章第四章 系统设计4.1功能结构4.2 数据库设计4.2.1 数据库E/R图4.2.2 数据库表 第五章 系统功能实现5.1系统登录注册5.2管理员功能模块 源码下载地址 源码下载地址 源码下载地址https://download.csdn.net/download/u013749113…

[python][yolov8][深度学习]将yolov8实例分割成一个类几句代码完成实例分割任务

大家都知道,yolov8目前支持图像分类、目标检测、姿态估计、实例分割,而实例分割一般都是用命令行去预测图片,这个如果要引入pyqt5或着嵌入其他python模块有点麻烦,因此需要封装一个类去预测图像,这样我们可以轻松完成各种实例分割…

Redis实战案例4-缓存更新策略

1. 缓存更新策略 缓存中的数据一致性问题(数据库更新数据,而Redis存的是旧数据) 内存淘汰策略:当内存很充足时,很长时间无法淘汰数据,所以很难控制淘汰,一致性差; 超时剔除&#xff…

【教学类-36】Midjounery生成的四张图片切片成四张小图

作品展示: 把一张正方形图片的四个等大小图切割成四张图片 背景需求 最近在学习ChatGPT的绘画(midjounery AI艺术) 我想给中班孩子找卡通动物图片(黑白边框),打印下来,孩子们练习描边、涂色…

C++11-右值引用与移动语义

右值引用与移动语义 一,右值引用概念右值引用简单例子左值引用与右值引用的比较 二,右值引用的使用场景函数对于其内部局部对象的传值返回insert,push等接口左值引用与右值引用总结 三,完美转发四,新的类功能默认成员函…

【数据分享】1929-2022年全球站点的逐月平均海平面压力数据(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 对于具体到监测站点的气象数据,之前我们分享过1929-2022年全球气象…

机器学习小结之决策树

文章目录 前言一、介绍1.1 原理1.2 流程1.3 信息熵,信息增益和基尼不纯度 二、构建决策树2.1 特征选择2.2 决策树生成2.3 剪枝 三、经典算法3.1 ID33.2 C4.53.3 CART 四、案例4.1 Iris 数据集 鸢尾花 分类4.2 基于决策树的英雄联盟游戏胜负预测 参考 前言 决策树(D…

GDPU 模电(电工) 作业答案

🍑 配套资源 📚 电子技术基础:电路与模拟电子[第2版] 提取码: 345r 第2章 电阻电路分析 第4章 正弦稳态电路分析 第6章 半导体器件 第7章 放大电路分析 第8章 负反馈放大电路 第9章 集成运算放大器及其应用 第11章 直流稳压电源 &#x1f6…

深度学习(10)之Roboflow 使用详解:数据集标注、训练 及 下载

Roboflow 使用详解:数据集标注、训练 及 下载 本文在 用YOLOv8推荐的Roboflow工具来训练自己的数据集 的基础上进行了修改 介绍如何从网站下载开源数据集详细介绍如何借助 roboflow 标注数据集并自动转换为可直接训练的数据格式 获取开源数据集 跳转找到开源分页…

浅谈Spring Cloud Gateway

网关:用户和微服务的桥梁 网关的核心是一组过滤器,按照先后顺序执行过滤操作。 Spring Cloud Gateway是基于webFlux框架实现,而webFlux框架底层则使用了高性能的Reactor模式通信框架的Netty Spring Cloud Gateway是Spring Cloud生态系统中的一个API网…

leetcode62. 不同路径(动态规划-java)

不同路径 leetcode62. 不同路径题目描述暴力递归代码演示 递归加缓存代码演示 动态规划代码演示 动态规划专题 leetcode62. 不同路径 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/unique-paths 题目描述 一个机器人位…

leetcode863. 二叉树中所有距离为 K 的结点(java)

二叉树中所有距离为 K 的结点 leetcode863. 二叉树中所有距离为 K 的结点题目描述 DFS 深度优先遍历代码演示 二叉树专题 leetcode863. 二叉树中所有距离为 K 的结点 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/all-…

英之剑法——第一境(通达人与物之境)

🌟博主:命运之光 ☀️专栏:英之剑法🗡 ❤️‍🔥专栏:英之试炼🔥 ☀️博主的其他文章:点击进入博主的主页 🐳 开篇想说的话:开学就大三了,命运之光…

永磁同步电机在线参数辨识综述

优点 实时性:在线参数辨识能够在电机实际运行时进行参数估计,可以实时地获取电机的参数信息。这使得在线参数辨识更适用于需要实时调节和优化电机控制策略的应用场景。 动态适应性:在线参数辨识可以根据电机的实时工作状态和环境变化来动态地…

最“赚钱”编程语言出炉,惊到我了.....

Stack Overflow 发布了 2023 年开发者调查报告,据称共计超过 9 万名开发者参与了此次调查。 完整报告包含了受访开发者画像,以及关于开发技术、AI、职业、社区等方面的内容。本文主要介绍关于开发技术和 AI 的部分。 懒人目录: 最流行编程语…

[皮尔逊相关系数corrwith]使用案例:电影推荐系统

协同过滤算法用于发现用户与物品之间的相关性,主要有两种:基于用户的和基于物品的。 基于用户: 用户1购买了物品A、B、C、D,并给了好评;而用户2也买了A、B、C,那么认为用户1和用户2是同类型用户&#xff…

hello算法笔记之堆

堆: 一种满足特定条件的完全二叉树,可分为两种类型: 「大顶堆 Max Heap」,任意节点的值 ≥其子节点的值;「小顶堆 Min Heap」,任意节点的值 ≤ 其子节点的值; 将二叉树的根节点称为「堆顶」&a…