当前位置: 首页 > article >正文

大数据面试题整理——HDFS

大数据面试题整理

第一章 HDFS面试题
第二章 MapReduce面试题


文章目录

  • 大数据面试题整理
  • 一、请简要介绍一下 HDFS。
  • 二、HDFS 的主要特点有哪些?
  • 三、说说 HDFS 的架构,以及 NameNode 和 DataNode 的作用。
  • 四、什么是心跳机制?
  • 五、解释一下 HDFS 的副本放置策略。
  • 六、描述一下 HDFS 的读写数据流程。
  • 七、HDFS 有哪些优点和缺点?
  • 八、有哪些方法可以优化 HDFS 的性能?
  • 九、如何处理 HDFS 中的小文件问题?
  • 十、比较一下 HDFS 与传统文件系统的区别。
  • 十一、对比 HDFS 与分布式对象存储系统。
  • 十二、 说一下HDFS的客户端命令
  • 十三、HDFS安全模式
    • 1、什么是 HDFS 的安全模式
    • 2、什么情况下 HDFS 会进入安全模式
  • 十四、说一下 HDFS的checkpoint流程(SecondaryNameNode的职责)


一、请简要介绍一下 HDFS。

您好,HDFS 即 Hadoop 分布式文件系统,它在大数据处理中起着至关重要的作用。HDFS 采用主从架构,主要由一个 NameNode 和多个 DataNode 组成。NameNode 负责管理整个文件系统的元数据,包括文件的目录结构、文件名以及文件块的位置信息等。而 DataNode 则实际存储数据块。HDFS 具有高容错性,通过数据冗余存储多个副本来确保数据的可靠性,非常适合处理大规模的数据,并且采用流式数据访问模式,即一次写入多次读取,这种模式特别适合批处理作业。同时,它可以在廉价的硬件上运行,降低了成本。

二、HDFS 的主要特点有哪些?

首先,高容错性是 HDFS 的一大特点。文件被分割成数据块存储在不同的 DataNode 上,每个数据块都有多个副本,这样即使某个 DataNode 出现故障,数据仍然可以从其他副本中恢复。其次,它能处理大规模数据,无论是 PB 级还是更大规模的数据都能轻松应对。再者,流式数据访问模式使得它在大数据批处理场景中表现出色。最后,HDFS 可以运行在普通的商用服务器上,无需昂贵的高端硬件设备,大大降低了成本。

三、说说 HDFS 的架构,以及 NameNode 和 DataNode 的作用。

HDFS 的架构是主从式的。NameNode 就像是文件系统的大脑,它管理着文件系统的命名空间,掌控着所有文件和目录的信息,处理客户端对文件系统元数据的操作请求,比如创建、删除、重命名文件或目录等。同时,它还负责监控 DataNode 的状态,通过接收 DataNode 的心跳和块报告来确保整个系统的正常运行。而 DataNode 则是具体干活的,它们存储实际的数据块,执行来自 NameNode 的读写操作指令,并且定期向 NameNode 发送心跳和快报告,以告知 NameNode 自己的状态以及所存储的数据块信息。

四、什么是心跳机制?

在 HDFS 中,心跳机制是 DataNode 向 NameNode 表明自己存活状态的重要方式。DataNode 会定期向 NameNode 发送心跳信号,这个间隔通常是可以配置的。如果 NameNode 在一段时间内没有收到某个 DataNode 的心跳,就会认为该 DataNode 可能出现了故障,然后采取相应的措施,比如将这个 DataNode 上的数据块复制到其他正常的 DataNode 上,以保证数据的冗余性和系统的可靠性。

五、解释一下 HDFS 的副本放置策略。

数据存储:
在 HDFS 中,文件会被分割成固定大小的数据块,默认是 128MB。这些数据块被存储在不同的 DataNode 上。每个数据块会有多个副本,默认是 3 个副本。这样的存储方式既方便了数据的分布式存储和管理,又提高了数据的可靠性和可用性。
副本放置策略:
副本放置策略是经过精心设计的。第一个副本通常放置在与客户端相同的节点上,如果客户端不在集群中,就随机选择一个节点。这样可以减少网络开销,提高写入性能。第二个副本放置在与第一个副本不同的机架上的某个节点上,目的是防止单个机架出现故障导致数据丢失。第三个副本则放置在与第二个副本相同机架的不同节点上。更多的副本也会遵循类似的策略,尽量保证副本分布在不同的机架和节点上,以实现更高的可靠性和可用性。

六、描述一下 HDFS 的读写数据流程。

读数据:
客户端要读取文件时,向 NameNode 发送读取文件请求。NameNode 返回文件的元数据,包括数据块的位置信息。客户端根据这些位置信息,选择最近的 DataNode 读取数据块。DataNode 会将数据块发送给客户端。客户端读取完一个数据块后,会继续请求下一个数据块,直到整个文件读取完成。
写数据:
当客户端要向 HDFS 写入数据时,首先会向 NameNode 发送创建文件请求。NameNode 会检查文件是否已存在、客户端是否有写入权限等。如果通过检查,NameNode 会为文件分配数据块,并返回可用的 DataNode 列表。客户端将数据分成数据包,并按照 NameNode 提供的 DataNode 列表顺序依次写入数据块。每个 DataNode 接收数据包后,会将数据写入本地存储,并同时将数据传递给下一个 DataNode,形成流水线式的数据传输。当所有数据块都写入成功后,客户端通知 NameNode 写操作完成。

七、HDFS 有哪些优点和缺点?

优点:
首先说优点,HDFS 的高可靠性是非常突出的,通过数据冗余存储保证了数据在各种情况下的安全性。它的高扩展性也很显著,可以轻松地通过增加节点来扩展存储容量和处理能力。在大数据处理方面,HDFS 是非常适合的,能够高效地处理大规模的数据,为大数据分析和处理提供了坚实的基础。
缺点:
当然,HDFS 缺点也很明显。它不适合低延迟数据访问,因为其架构设计更侧重于批处理作业,对于实时性要求高、低延迟的应用不太适用。另外,HDFS 不适合存储大量小文件,因为 NameNode 内存中存储文件系统的元数据,大量小文件会导致 NameNode 内存消耗过大。还有,HDFS 的写入性能相对较低,一次写入多次读取的设计使得写入操作相对复杂。

八、有哪些方法可以优化 HDFS 的性能?

对于优化 HDFS 的性能,可以从多个方面入手。调整数据块大小是一种方法,根据数据特点和应用需求,较大的数据块适合大文件和顺序读写,较小的数据块适合小文件和随机读写。增加副本数量在对数据可靠性要求极高的场景下是可行的,但会增加存储空间开销。优化 NameNode 内存可以通过合理配置 NameNode 的内存参数,或者采用 NameNode Federation 等技术来分担元数据管理压力。数据压缩也是一个好办法,对数据进行压缩可以减少存储空间和网络传输开销,提高性能。

九、如何处理 HDFS 中的小文件问题?

处理 HDFS 中的小文件问题,可以采用多种方式。合并小文件是一种常见的方法,使用一些工具或程序将多个小文件合并成一个大文件。也可以使用 SequenceFile 等容器格式,将小文件打包存储在其中。对于大量小文件且需要随机访问的场景,采用 HBase 等列式存储系统可能是更好的选择,它可以高效地管理小文件并提供快速的随机访问。

十、比较一下 HDFS 与传统文件系统的区别。

在存储规模上,HDFS 能处理 PB 级甚至更大数据,传统文件系统通常适用于较小规模数据存储;容错性方面,HDFS 通过数据冗余实现高容错,传统文件系统容错性较低;数据访问模式上,HDFS 适合一次写入多次读取的流式访问,传统文件系统支持更灵活读写操作;硬件要求上,HDFS 可运行在廉价硬件上,传统文件系统可能对硬件性能要求较高。

十一、对比 HDFS 与分布式对象存储系统。

数据模型上,HDFS 基于文件和目录结构,分布式对象存储系统以对象为基本存储单元;接口方面,HDFS 提供文件系统接口,分布式对象存储系统通常提供 HTTP API 等接口;应用场景上,HDFS 更适合大数据处理和批处理作业,分布式对象存储系统适用于云存储、内容分发等场景。

十二、 说一下HDFS的客户端命令

hdfs dfs -put
hdfs dfs -get
hdfs dfs -getmerge
hdfs dfsadmin safemode leave

十三、HDFS安全模式

1、什么是 HDFS 的安全模式

Hdfs 的安全模式,即 HDFS safe mode, 是 HDFS 文件系统的一种特殊状态,在该状态下,hdfs 文件系统只接受读数据请求,而不接受删除、修改等变更请求,当然也不能对底层的 block 进行副本复制等操作。
从本质上讲,安全模式 是 HDFS 的一种特殊状态,而 HDFS 进入该特殊状态的目的,是为了确保整个文件系统的数据一致性/不丢失数据,从而限制用户只能读取数据而不能改动数据的。

2、什么情况下 HDFS 会进入安全模式

HDFS 进入安全模式的情况分为两种,即主动进入与被动进入。
被动进入:管理员出于运维管理等各种原因,可以主动执行命令让 hdfs 进入安全模式,相关的命令有:hdfs dfsadmin -safemode enter/get/leave;
主动进入:HDFS 也可能会主动进入安全模式,这种情况更为常见,是 HDFS 在特殊状况下,为了保证整个文件系统的数据一致性/整个文件系统不丢失数据,而主动进入的一种自我保护状态,底层根本原因又分为两种:
HDFS 底层启动成功并能够跟 namenode 保持定期心跳的 datanode 的个数没有达到指定的阈值, 阈值通过参数 dfs.namenode.safemode.min.datanodes 指定;
HDFS 底层达到了最小副本数要求的 block 的百分比没有达到指定的阈值:最小副本数通过参数 dfs.namenode.replication.min/dfs.namenode.safemode.replication.min 指定,阈值通过参数 dfs.namenode.safemode.threshold-pct 指定;
当然如果 HDFS 底层启动成功并能够跟 namenode 保持定期心跳的 datanode 的个数没有达到指定的阈值,此时HDFS 底层达到最小副本数要求的 block 的百分比一般也都不会达到指定的阈值;
不难理解,正常情况下,HDFS 启动过程中会有一段时间主动进入安全模式并在一段时间后主动退出安全模式,这是由 hdfs 的分布式架构决定的,因为 namenode 启动成功后,需要等待 datanode 启动成功并通过心跳汇报 datanode 上存储的 block 的信息(block report),只有在掌握了足够的 block 的信息(达到最小副本数要求的 block 占所有 block 的百分比达到指定的阈值),并等待特定时间后(通过参数 dfs.namenode.safemode.extension 30000控制),才会主动退出安全模式。
常见的HDFS进入安全模式的直接原因有:
部分 datanode 启动失败或者因为网络原因与 namenode 心跳失败;
部分 datanode 节点存储 hdfs 数据的磁盘卷有损坏,导致存储在该磁盘卷中的数据无法读取;
部分 datanode 节点存储 hdfs 数据的磁盘分区空间满,导致存储在该磁盘卷中的数据无法正常读取;

十四、说一下 HDFS的checkpoint流程(SecondaryNameNode的职责)

  1. SecondaryNameNode向NameNode发起合并请求
  2. NameNode将当前的Editslog文件保存改名edits,并新建EditsLog继续持久化工作。
  3. 将改名后的edits文件和本地的FSImage(旧)发送给sencondaryNameNode
  4. SecondaryNameNode负责将FSImage(旧)+edits文件合并成FSImage(新)
  5. 将新的FSImage(新)发送给NameNode保存。

http://www.kler.cn/news/353284.html

相关文章:

  • #每日一题#自动化 2024年10月
  • AnaTraf | 网络流量分析仪:网络故障排除的利器
  • Java面向对象(三)(抽象和封装)(自己学习整理的资料)
  • 5G NR GSCN计算SSB中心频率MATLAB实现
  • 计算机视觉算法的演进与应用:从基础理论到前沿技术
  • Spring Boot 3.3 【八】整合实现高可用 Redis 集群
  • C语言笔记 18 —— 指针与数组
  • cmake Qt模板
  • dayjs日期格式化,开发uniapp或unicloud前后端进行时间格式转换
  • Linux——DNS服务器正向解析搭建教程
  • Java使用原生HttpURLConnection实现发送HTTP请求
  • Scala的flatten函数
  • Spring Boot构建高效医疗病历B2B交互平台
  • 1992-2022年全国各省产业集聚水平测算数据(含原始数据+计算过程+结果)(无缺失)
  • 【ROS实操六】launch的使用
  • python yfinance 下载金融数据,股票数据
  • 设计模式02-桥接模式(Java)
  • MySQL数据的导出
  • IJKPlayer源码分析-整体结构
  • 智慧园区管理:构建高效、安全、智能的园区环境
  • 当你不会介绍自己的产品和系统时,不妨看看大厂是如何做的
  • Python 如何处理大规模数据库表的迁移与数据迁移的高效执行
  • 微信小程序使用wx.navigateTo路由跳转层级限制
  • 2024-10-16 问AI: [AI面试题] 描述遗传算法的概念
  • MATLAB基础应用精讲-【数模应用】Bland-Altman图(附python和R语言代码实现)
  • Python 3.13 中的 7 个新类型特性