Hadoop基础——HDFS知识点梳理

news2024/9/27 23:30:11

HDFS基础知识

1. 介绍一下HDFS组成架构?

组成部分:

  • HDFS Client,
  • NameNode,
  • DataNode
  • Secondary NameNode( HA模式下是 StandBy NameNode)
  1. Client: 客户端
    1. 文件切分,文件上传HDFS时,client将文件切分成一个一个的block,然后进行存储。
    2. 与NN交互,获取文件的位置信息。
    3. 与DN交互,读取或者写入数据。
    4. Client提供一些命令来管理HDFS, 比如启动或者关闭HDFS
    5. Client可以通过一些命令来访问HDFS
  2. NameNode: master,
    1. 管理hdfs的命名空间
    2. 管理数据块的映射信息
    3. 处理客户端的读写请求
    4. 配置副本策略
  3. DateNode: slave,NN下达命令,DN执行实际的操作
    1. 存储实际的数据块
    2. 执行数据块的读写操作
  4. Secondary NameNode:
    1. 辅助NN,分担其工作量。
    2. 定期合并fsimage和edits log,生成新的fsimage替换旧的fsimage。
    3. 在紧急情况下辅助恢复NN。

2. NameNode 和 SecondaryNameNode 的区别与联系

  1. 区别:
    1. namenode 负责管理整个文件系统的元数据,以及命名空间。
    2. secondary name node 负责定期合并fsimage和edit log。
  2. 联系:
    1. secondary name node 中保存了一份和namenode一致的fsimage(镜像文件)和edits log(编辑日志)。
    2. 在namenode 发生故障时, 可以从secondary namenode恢复数据。

3. NN和DN的区别和联系?

  1. 从角色来看:
    1. NN是master,承担管理者的角色,
    2. DN 是slave, 承担具体执行者的角色。
  2. 从工作内容:
    1. NN管理HDFS的名称空间,数据块的映射信息,处理客户端读写请求。
    2. DN 存储实际的数据块, 执行数据块的读/写操作。

4. HDFS在HA模式下的工作流程?

相较于非HA模式,多了3部分:

  1. 负责负载均衡的ZK集群。
  2. Edits log文件管理系统Qjournal。
  3. ZKFailoverController负责监测NN是否健康。
    在这里插入图片描述

5. ZKFailoverController的作用?(HA NameNode的工作模式)

  1. 健康监测: 周期性的向它监控的NN发送健康探测命令,从而确定某个NN是否处于健康状态,如果机器宕机,心跳失败,zkfc就会标记该NN处于一个不健康的状态。
  2. 会话管理: 如果NN是健康的,zkfc就会在zk 中保持一个打开的会话,如果NN同时还是Active状态,那么zkfc还会在Zookeeper中占有一个类型为短暂类型的znode,当这个NN挂掉后,znode也将会被删掉,然后备用的NN,将会得到这把锁,升级为主NN,同时标记状态为Active。
  3. 当宕机的NN新启动时,会再次注册zk, 发现已有znode锁,会自动变为standby状态(防止脑裂,出现两个active node)
  4. master选举:通过在zk中维持一个短暂类型的znode, 来实现抢占式的锁机制,从而判断哪个NameNode为Active状态。

6. HDFS的存储机制

写数过程:

  1. 客户端通过 Distributed FileSystem模块向NN发其文件上传请求, NN检查目标文件是否已存在,父目录是否存在
  2. NN返回是客户端是否可以上传
  3. 客户端请求第一个block上传到哪几个dn服务器上
  4. NN返回3个dn节点,分别为dn1,dn2, dn3,表示采用这个三个节点存储数据。
  5. 客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3, 将这个通信管道建立完成。
  6. dn1, dn2, dn3逐级应答客户端
  7. 客户端开始往dn1上传第一个block, 以packet为单位,dn1收到一个packet就会传给dn2,dn2传给dn3; dn1每传一个packet会放入一个应答队列等待应答。
  8. 当一个block传输完成后, 客户端再次请求NameNode上传第二个block的服务器。
    在这里插入图片描述

读数过程:

  1. 客户端通过 Distribued FileSystem 向NameNode请求文件,NameNode通过查询元数据,找到文件所在的DataNode地址。
  2. 挑选一台DataNode(就近原则)服务器,请求读取数据。
  3. DataNode开始传输数据给客户端(从磁盘里读取数据输入流,以packet为单位来做校验)
  4. 客户端以packet为单位接收,现在本地缓存,然后写入目标文件。
    在这里插入图片描述

7. Secondary NN 和 HA模式下的StandbyNN的区别

  1. 首先强调,SecondaryNN 不是NN的备份,只能算是辅助,负责定期合并fsimage和edits log,形成新的fsimage 以替换旧的fsimage。简单理解:Secondry NN负责的是定期存档,方便那天NN异常退出,可以快速回复。
  2. HA下的Standby NN可以理解为是Active的备份,实时合并fsimage和edits log,将合并后的fsimage 替换旧的fsimage。一旦Active NN挂了,Standby NN 就可以转正,继续提供服务,无需等待,即高可用性的含义
  3. 对比,secondary nn 架构简单,但是存在元数据丢失的问题;HA架构复杂,但是元数据不会丢失。

8. HDFS中负责存储的是哪一部分

DateNode,DN 负责具体的数据存储操作

9. HDFS中的Block默认大小是多少?为什么这么设计?

Block默认大小:
1.X版本是64MB,2.X和3.X是128MB。
Block的大小是不能太大,也不能太小,这样做的目的是尽量减少寻址时间在总时间中的占比。
这么理解:

  • 文件块越大,寻址时间越短,但磁盘传输时间越长;
  • 文件块越小,寻址时间越长,但磁盘传输时间越短。

至于为什么是128M,根据统计,HDFS中平均寻址时间大概为10ms,经过测试,寻址时间为传输时间的1%时,为最佳状态
那么按照公式计算:
最佳传输时间为10ms/0.01=1000ms=1s
目前磁盘的传输速率普遍为100MB/s:
最佳block大小:100MB/s x 1s = 100MB
处于对2进制的执着,block设计为128MB。

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

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

相关文章

玩转中文AI模型攻略——ModaHub魔搭社区攻略

目录 1. 注册和登录: 2. 浏览和搜索: 3. ModaHub排行榜: 4. AI应用导航: 5. 向量数据库: 6. 企业Chatbot: ModaHub魔搭社区是一个中文AI模型开源社区,旨在为开发者和研究者提供一个交流、…

抓住出海中东热潮,茄子科技(海外SHAREit Group)有效助力游戏企业出海

近年来,随着国际形势的紧张,不少中国出海企业在海外市场营收受到了不同程度的影响。为摆脱这一困境,大家开始将目光瞄准了海外新兴市场,其中中东以其高速的增长,量利双收的回报赢得了不少中国出海企业的青睐。 与此同…

FastDDS源码剖析:源码结构分析

include: 包含Fast-DDS的头文件。这些头文件定义了库使用的公共API和数据结构。 src: 包含Fast-DDS库的源代码文件。这包括各种组件的实现,例如发布者、订阅者、主题和RTPS协议。 cpp: c实现Fast-DDS的主要源代码。 pcp -fastdds: Fast-DDS公共API的实现。 rtps: …

【AI】清华开源中英双语对话模型ChatGLM2-6B本地安装笔记

清华开源中英双语对话模型ChatGLM2-6B本地安装笔记 首先,直接上资源,网盘中是ChatGLM2-6B源码及模型文件: 链接:https://pan.baidu.com/s/1DciporsVT-eSiVIAeU-YmQ 提取码:cssa 官方的Readme已经很详尽了&#xff0…

Unreal Engine游戏引擎

Unreal Engine(下文简称为UE),是一款由Epic Games开发的游戏引擎,用于创建电子游戏、虚拟现实和增强现实应用、数字孪生等内容。UE支持实时渲染、高品质的图形效果和物理模拟、可扩展的蓝图视觉脚本语言,以及跨平台和多…

Appium Server GUI + Appium Inspector 定位UI元素

Appium Server GUI 下载 Appium Server GUI 安装包并完成安装,完成安装后启动,点击 startServer 快速启动 Appium 服务。 Appium Inspector 下载 Appium Inspector 安装包并完成安装,完成安装后启动,填入以下内容。 Remote Hos…

蓝牙运动耳机推荐、最好用的蓝牙运动耳机排名

在现代快节奏的生活中,健康和锻炼成为越来越多人追求的目标。无论是户外跑步、健身房锻炼,还是徒步旅行,一个好的运动耳机是不可或缺的伴侣。它能为您提供高品质的音乐享受,同时保持舒适的佩戴体验,让您在运动中时刻保…

基于Python和MD5算法的公寓管理系统设计与实现-计算机毕设 附源码77723

基于Python和MD5算法的公寓管理系统设计与实现 摘 要 本论文主要论述了如何使用Python开发一个公寓管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述公寓管理系统的当前背景以及…

jetson nano如何读取pwm波信号?通过编码器读取车速,使用sbus串口读取,解决方案

jetson nano如何读取pwm波信号? 通常我们采用的是通过gpio读取,但是linux系统的时钟特别的不准导致计算的不对。 所以我推荐用sbus 用外围硬件,有pwm转sbus设备, 这个设备可以将pwm波转换位串口数据,我们只需要将输出的…

GPT上车只为人车交互?车企还在憋大招

ChatGPT改造汽车的序幕已经拉开,奔驰率先出手。 不久前,梅赛德斯-奔驰将ChatGPT集成到了车机上,开启了为期三个月的测试,结果显示,它的语音助手不仅可以完成简单地指令,还能进行连续多轮对话,理…

CSS 高阶小技巧 - 角向渐变的妙用!

本文将介绍一个角向渐变的一个非常有意思的小技巧! 我们尝试使用 CSS 绘制如下图形: 在之前,类似的图案,其实我们有尝试过,在 单标签实现复杂的棋盘布局 一文中,我们用单标签实现了这样一个棋盘布局&#x…

从0到1:一对一交友app开发的步骤和技巧

今天与大家分享一下一对一交友app开发的步骤和技巧。 步骤 步骤一:确定目标用户群 在开发一对一交友app之前,首先需要确定目标用户群。这是非常重要的一步,因为只有了解目标用户的需求和偏好,才能更好地开发出一款满足他们需求…

C# 元组

文章目录 C# 元组Tuple 类ValueTuple 类ValueTuple 与 Tuple的区别System.ValueTuple 类型的值是可变的System.Tuple 类型的值是不可变的System.ValueTuple 类型的数据成员是字段 System.ValueTuple 与匿名类在使用Linq查询时,如何权衡使用元组还是匿名类权衡主要区…

爆肝整理,性能测试-测试工具选型(各个对比)卷起来...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能测试和功能测…

cf 比赛 04

2021.04.30 训练地址 B. The Number of Pairs 令 u g c d ( a , b ) u gcd(a, b) ugcd(a,b),设 l c m ( a , b ) k ∗ u lcm(a, b) k * u lcm(a,b)k∗u,则原式可写为 u ∗ ( k ∗ c − d ) x u * (k * c - d) x u∗(k∗c−d)x,那么…

leetcode 222. 完全二叉树的节点个数

2023.7.3 用层序遍历遍历一遍二叉树&#xff0c;然后遍历的每个节点都进行一次计数&#xff0c;直接上代码&#xff1a; class Solution { public:int countNodes(TreeNode* root) {queue<TreeNode*> que;int ans 0;if(root nullptr) return ans;que.push(root);while…

speech_recognition + PocketSphinx 实现语音唤醒

文章目录 前言环境下载中文包制作激活词 编码实现唤醒 前言 这玩意是干啥的呢&#xff0c;主要的话就是最近有个小项目&#xff0c;需要在ros上面实现一个语音唤醒的操作。同时要求&#xff0c;离线操作&#xff0c;只能使用离线的SDK。然后逛了一圈&#xff0c;发现科大讯飞的…

22.RocketMQ之NameServer启动流程

NameServerController启动流程总览 启动类&#xff1a;org.apache.rocketmq.namesrv.NamesrvStartup#main java public static void main(String[] args) { main0(args); } java public static NamesrvController main0(String[] args) { try { //创建NamesrvController Names…

因Spring与SpringMVC配置信息写反导致Spring无法自动托管对象实例

因Spring与SpringMVC配置信息写反导致Spring无法自动托管对象实例 异常提示 03-Jul-2023 11:25:24.491 警告 [RMI TCP Connection(3)-127.0.0.1] org.springframework.context.support.AbstractApplicationContext.refresh Exception encountered during context initializat…

【485. 最大连续 1 的个数】

目录 一、题目解析二、算法思路三、代码实现 一、题目解析 二、算法思路 三、代码实现 class Solution { public:int findMaxConsecutiveOnes(vector<int>& nums) {int ret0;int left0,right0;for(;right<nums.size();right){if(nums[right]!1){retmax(ret,right…