HDFS面试重点

文章目录

  • 1. HDFS的架构
  • 2. HDFS的读写流程
  • 3.HDFS中,文件为什么以block块的方式存储?

1. HDFS的架构

HDFS的架构可以分为以下几个主要组件:

  1. NameNode(名称节点):

    • NameNode是HDFS的关键组件之一,负责管理文件系统的命名空间(文件和目录结构)以及客户端的访问请求。
    • 它维护了整个文件系统的元数据,包括文件和目录的层次结构、文件的权限和属性等。
    • NameNode记录了文件系统中每个数据块的位置信息(存储在哪个数据节点上)。
  2. DataNode(数据节点):

    • DataNode是集群中的工作节点,负责存储实际的数据块。
    • 它们根据NameNode的指示存储、检索和删除数据块。
    • DataNode负责定期向NameNode发送心跳消息以报告其健康状况,并汇报存储在本地的数据块信息。
  3. Secondary NameNode(辅助名称节点):

    • Secondary NameNode并不是NameNode的备用,而是负责定期合并编辑日志(edits log)和镜像文件(fsimage)以保持NameNode的元数据的大小较小。
    • 它定期从NameNode获取最新的编辑日志和镜像文件,并将其合并,然后将新的fsimage文件发送回NameNode。
  4. 客户端:

    • 客户端是与HDFS交互的应用程序或用户。它们通过HDFS的Java API、命令行工具(如hadoop fs命令)、或者其他支持HDFS的接口(如Hive、Spark等)来访问和操作文件系统。

总体而言,HDFS的架构是一个主从式的架构,其中NameNode作为中心管理元数据和客户端请求,而DataNode负责存储实际的数据块。这种架构提供了高可靠性和可扩展性,使得HDFS适用于大规模数据存储和处理。

2. HDFS的读写流程

HDFS的读写流程包括以下几个步骤:

  1. 写入流程

    • 当一个客户端想要向HDFS写入数据时,它首先会与NameNode通信,请求在文件系统中创建一个新文件。
    • NameNode会检查文件是否已经存在,如果不存在则返回一个文件描述符给客户端,并且记录下新文件的元数据信息。
    • 客户端收到文件描述符后,开始将数据划分为固定大小的数据块,并且选择一个DataNode来存储每个数据块。通常,客户端会选择距离它最近的DataNode来写入数据。
    • 客户端将数据块发送给选定的DataNode,并且DataNode负责将数据块写入本地磁盘。同时,DataNode也会将数据块的副本发送给其他DataNode,以提高数据的可靠性和容错性。
    • 在所有数据块都成功写入后,客户端通知NameNode写入操作完成。NameNode更新文件的元数据,包括数据块的位置信息和副本数量。
  2. 读取流程

    • 当一个客户端想要从HDFS读取数据时,它首先会与NameNode通信,请求打开指定文件。
    • NameNode会返回文件的元数据信息,包括文件的大小、数据块的位置等。
    • 客户端根据元数据信息确定每个数据块的位置,并且与最近的DataNode建立连接。
    • 客户端向DataNode发送读取请求,并且DataNode负责从本地磁盘读取数据块,并将数据块传输给客户端。
    • 如果某个DataNode发生了故障或者数据传输失败,客户端可以尝试从其他副本所在的DataNode读取数据,从而实现容错和高可用性。

3.HDFS中,文件为什么以block块的方式存储?

  1. 将文件分成固定大小的数据块可以使得数据在集群中分布均匀,并且能够实现并行处理。每个数据块都可以在集群中的不同节点上进行存储和处理,从而实现数据的高效读写和处理。

  2. 通过将文件分成多个数据块并在集群中复制多个副本,可以提高数据的容错性。如果某个节点发生故障或者数据损坏,系统可以从其他副本所在的节点上获取数据,从而保证数据的可靠性和可用性。

  3. 可以减少存储空间的碎片化,提高存储利用率。

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

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

相关文章

Android7.1 ANR error 弹窗处理

Android7.1 ANR error 弹窗处理 问题描述解决方法 郑重声明:本人原创博文,都是实战,均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Rockchip OS:Android 7.1.2 Kernel: 3.10 问题描述 有时会用到第三方apk,内置到系统中&…

全国车辆识别代码信息API查询接口-VIN深度解析

我们先来介绍下什么是vin码,以及vin码的构成结构解析,汽车VIN码,也叫车辆识别号码,通俗可以理解为汽车的身份证号码。 VIN码一共分四大部分: 1~3位,是世界制造厂识别代号(WMI)&…

DevOps本地搭建笔记(个人开发适用)

需求和背景 win11 wsl2 armbian(玩客云矿渣),构建个人cicd流水线,提高迭代效率。 具体步骤 基础设施准备 硬件准备:一台笔记本,用于开发和构建部署,一台服务器,用于日常服务运行。 笔记本…

Rust 并行库 crossbeam 的 Channel 示例

示例1 一个不完整的示例&#xff1a; let (tx, rx) channel::unbounded::<Task>(); let mut handlers vec![];for _ in 0..number {let rx rx.clone();let handle thread::spawn(move || {while let Some(task) rx.recv() {task.call_box();}});handlers.push(han…

Mysql数据库的优点

功能强大 MySQL中提供了多种数据库存储引擎,各引擎各有所长,适用于不同的应用场合,用户可以选择最合适的引擎以得到最高性能,可以处理每天访问量超过数亿的高强度的搜索 Web 站点。MySQL5 支持事务、视图、存储过程、触发器等。 支持跨平台 MySQL支持至少20种以上的开发…

如何批量注册无数个电子邮箱

需求 最近我们需要批量注册无数个steam账号来做一些不可描述的事情&#xff0c;那么我们就需要先批量注册无数个电子邮箱Email 而且我们希望注册和接收邮件是可以通过脚本自动化的&#xff0c;最好是通过正常的API接口 什么叫正常的API接口&#xff1f;正常的API接口是指邮件…

MongoDB聚合运算符:$derivative

$derivative聚合运算符返回返回指定窗口内的平均变化率&#xff08;即求导&#xff09;&#xff0c;变化率使用以下公式计算&#xff1a; $setWindowFields阶段窗口中的第一个和最后一个文件。分子&#xff0c;等于最后一个文档的表达式的值减去第一个文档表达式的值。分母&am…

Antd中s-table组件某字段进行排序

Antd中s-table组件某字段进行排序 提前说明&#xff0c;s-table组件包含分页等功能 <s-tableref"table":columns"columns":data"loadData"bordered:row-key"(record) > record.id"></s-table>而其中loadData为获取表数…

ref和reactive的区别?

Ref 和 Reactive 是两种不同的编程概念&#xff0c;通常在响应式编程中经常提到。 Ref&#xff08;引用&#xff09;是指对某个数据的引用或者指针&#xff0c;类似于指向某个内存地址的指针。在编程中&#xff0c;我们可以通过引用来访问、修改特定的数据。Ref 通常用于管理和…

线性表的顺序存储实验

附 录 #include<stdio.h> #include<stdlib.h>typedef struct {double* data;int length; }Sqlist;void initSqlist(Sqlist* L, int n) {L->data (double*)malloc(n * sizeof(double)); if (L->data NULL){printf("内存分配失败\n");exit(1);}pri…

react实现表格多条件搜索

创建一个React组件来渲染表格及搜索功能。可以使用函数式组件或者类组件。 在组件的状态中定义搜索条件的值。可以使用useState钩子函数来定义和更新搜索条件的状态。 在组件中创建一个表单&#xff0c;包含多个输入框或下拉列表等用于输入搜索条件的表单元素。 为每个表单元…

boost 压缩与解压缩流

boost 压缩与解压缩流&#xff08;zip、zip2、gzip、lzma、zstd压缩方式&#xff09; #include <boost/iostreams/filtering_stream.hpp> #include <boost/iostreams/filter/zlib.hpp> #include <boost/iostreams/filter/bzip2.hpp> #include <boost/ios…

MTK安卓开发板_联发科开发板评估套件_安卓主板硬件开发

在介绍开发板之前&#xff0c;让我们先来区分一下核心板和开发板的区别。核心板是一种集成度高、功能完整的计算模块&#xff0c;搭载系统&#xff0c;简化了外围接口&#xff0c;体积尺寸相对较小&#xff0c;主要适用于嵌入式系统。而开发板由核心板底板组成&#xff0c;提供…

Python实战:采集全国5A景点名单

本文将以采集全国 5A 景点名单为例&#xff0c;详细介绍如何使用 Python 进行数据采集。 本文采集到全国340家5A景区的名单&#xff0c;包括景区名称、地区、 A级、评定年份这些字段。 一、分析数据源 为了获取权威数据&#xff0c;我们来到主管部门的官方网站&#xff0c;在右…

Java集合中经典的 5种设计模式,打死也要记住啊!

集合 一、 迭代器模式(Iterator Pattern)二、 工厂模式(Factory Pattern)三、 装饰器模式(Decorator Pattern)四、 适配器模式(Adapter Pattern)五、 组合模式(Composite Pattern) Java 集合框架中的 List、Set、Map 以及其实现类都使用了多种经典的设计模式 一、 迭代器模式(I…

测试用例是什么?怎么写?不会测试用例的看过来,

前言 今天笔者想和大家来聊聊测试用例&#xff0c;这篇文章主要是想要写给测试小伙伴们的&#xff0c;因为我发现还是有很多小伙伴在遇到写测试用例的时候无从下手&#xff0c;我就想和大家简单的聊聊&#xff0c;这篇文章主要是针对功能测试的哟。 一、什么是测试用例&#…

如何将服务器数据迁移到另一台服务器?

将服务器数据迁移到另一台服务器通常涉及以下几个步骤&#xff1a; 1.备份数据&#xff1a; 在进行数据迁移之前&#xff0c;首先需要备份服务器上的数据。这包括网站文件、数据库、配置文件等。可以使用各种备份工具和方法&#xff0c;如rsync、scp、FTP、数据库备份工具等。 …

Azure Databricks 集群合并小文件与删除过多的历史版本

原因是&#xff1a;databricks 集群的数据底层是HDFS虽然是spark做为引擎读写如果没有及时合并也一样会因为小文件问题造成大量的资源消耗&#xff0c;也就会越来越慢。目前采用的主要方式&#xff0c;定时合并&#xff0c;与版本删除 1、python 脚本如下有用到的同学可以参考下…

Flask开发类似jenkins构建自动化测试任务工具

1、自动化 某一天你入职了一家高大上的科技公司&#xff0c;开心的做着软件测试的工作&#xff0c;每天点点点&#xff0c;下班就走&#xff0c;晚上陪女朋友玩王者&#xff0c;生活很惬意。 但是美好时光一般不长&#xff0c;这种生活很快被女主管打破。为了提升公司测试效率…

有了HTTP协议,为什么还要有WebSocket

HTTP的缺陷 现在的应用场景可能更多的是&#xff0c;前端发起一次HTTP请求&#xff0c;服务器后端返回一次HTTP响应。但是有这样的场景&#xff0c;是需要服务器主动给前端发送请求的。 最常见的场景是扫码登陆。 这里有两种解决方案&#xff0c;一种是微信的解决方案&#xf…