最常见的HDFS面试问答
1. 什么是HDFS?
答:HDFS代表Hadoop分布式文件系统,该系统将大型数据集存储在Hadoop中。它可以在商用硬件上运行,并且具有很高的容错能力。HDFS遵循主/从体系结构,其中许多计算机在集群上运行。群集由一个NameNode和群集中的多个从属节点(称为DataNodes)组成。
NameNode存储元数据,即数据块的数量、副本、位置和其他详细信息。另一方面,数据节点存储实际数据,并根据客户端的请求执行读/写请求。
2. HDFS有哪些不同的组件?
答:HDFS具有三个组成部分:
- 名称节点
- 数据节点
- 次要名称节点
3. HDFS DataNode中DataBlock的默认块大小是多少?
答:在Hadoop 1.x中,DataBlock的默认块大小为64MB,在Hadoop 2.x中,其默认块大小为128MB。
4. 解释Hadoop中NameNode的服务。
答:NameNode在HDFS中扮演主节点的角色。它包含两个重要信息:
- 关于Hadoop元数据和文件系统树
- 数据块和数据节点之间的内存中映射
NameNode包含元数据信息,例如文件许可权、文件复制因子、块大小、文件创建时间、文件的所有者信息以及文件的块与数据节点之间的映射。
5. HDFS中的fsimage和editlogs是什么?
答:Hadoop文件的元数据存储在HDFS NameNode内存中的文件中,该文件称为fsimage。
当对Hadoop文件系统进行任何更改(例如添加或删除文件等)时,不会立即将其写入fsimage,而是将其保存在磁盘上称为editlog的单独文件中。当名称节点启动时,editlog将与旧的fsimage文件同步,并更新新的副本。
6. 在Unix和Linux中,默认块大小为4KB,那么为什么HDFS块大小设置为64MB或128MB?
答:块是存储在文件系统中的数据的最小单元。因此,如果我们考虑将Linux / Unix的默认块大小用于Hadoop中的数据存储,那么对于海量数据(PB),它将占用大量块。因此,元数据量将显着增加,从而导致NameNode的性能问题。因此,在Hadoop 1.x中,默认块大小为64MB,在Hadoop 2.x中,默认块大小为128MB。
7. NameNode启动时会发生什么?
答:当NameNode启动时,它将执行以下操作:
- 从最后保存的FsImage和editlog文件中,它将文件系统名称空间加载到其主内存中。
- 通过合并先前的fsimage和editslog文件来创建新的fsimage文件,以创建新的文件系统名称空间。
- 从所有DataNode接收有关块位置的信息。
8. Hadoop中的安全模式是什么?
答:安全模式指示NameNode的维护状态。在安全模式下,HDFS群集变为只读。因此,文件系统中不允许修改。同样,你不能在此模式下删除或复制任何数据块。
9. 如果更改HDFS中的块大小,现有数据会发生什么?
答:如果我们更改HDFS中的块大小,不会影响现有数据。
10. 什么是HDFS复制?默认复制因子是什么?
答:HDFS旨在容错以防止数据丢失。因此,HDFS在不同的机架和不同的数据节点中维护每个DataBlock的三个副本,这被称为复制。
默认复制因子为3。
11. 什么是次要NameNode?
答:Hadoop元数据存储在NameNode主内存和磁盘中。主要有两个文件用于此目的:
- 编辑日志
- 图像
对HDFS所做的任何更新都将输入到编辑日志中。随着条目数量的增加,文件大小会自动增长,但是,fsimage文件的文件大小保持不变。当服务器重新启动时,editlogs文件的内容将被写入fsimage文件,然后将其加载到主内存中,这非常耗时。editlogs文件大小越多,加载到fsimage中所花费的时间就越多,从而导致停机时间延长。
为避免此类长时间停机,使用了称为次要NameNode的NameNode帮助程序节点,该节点定期将内容从Editlog复制到fsimage,并将新的fsimage文件复制回NameNode。
12. NameNode如何处理DataNode故障?
答:HDFS体系结构的设计方式是,每个DataNode都会定期向HeartNode发送心跳以确保其处于工作模式。当NameNode没有收到来自特定DataNode的任何心跳信号时,它将认为该DataNode已失效或不起作用,并将所有相应的DataBlock转移到已经与其复制的其他活动DataNode。
HDFS面试高级问题
13. 如何在HDFS中执行数据/文件读取操作?
答:HDFS NameNode是所有文件信息及其在从属节点中实际位置的占位符。文件的读取操作遵循以下步骤:
- 当需要读取文件时,DistributedFileSystem实例从NameNode检索文件信息。
- NameNode检查该特定文件是否存在,并且用户有权访问该文件。
- 一旦满足上述条件,NameNode便将令牌提供给客户端,以进行身份验证以从DataNode获取文件。
- NameNode提供文件的所有Block细节和相关数据节点的列表。
- 然后根据它们与客户端的接近程度对DataNode进行排序。
- DistributedFileSystem将输入流返回到名为FSDataInputStream的客户端,以便客户端可以从中读取数据。
- FSDataInputStream充当DFSInputStream的包装,DFSInputStream负责管理NameNode和DataNode和I / O。
- 当客户端在流上调用read()时,DFSInputStream连接到壁橱DataNode块,数据通过流返回给客户端。重复调用read()操作,直到完全读取第一个块的末尾为止。
- 完全读取第一个块后,将关闭与该DataNode的连接。
- 接下来,DFSInputStream再次连接到下一个块的下一个可能的DataNode,并继续直到完全读取该文件。
- 读取整个文件后,FSDataInputStream调用close()操作以关闭连接。
14. 是否可以同时写入HDFS文件?
答:否,HDFS不允许并发写入。因为当一个客户端收到NameNode的允许在数据节点块上进行写入的权限时,该特定块将被锁定,直到写入操作完成。因此,没有其他客户端可以在同一块上写入。
15. 现有的HDFS体系结构面临哪些挑战?
答:现有的HDFS体系结构仅由一个NameNode(包含单个Namespace)和多个保存实际数据的DataNode组成。此体系结构在群集大小有限的情况下效果很好。但是,如果我们尝试增加集群大小,则会遇到一些挑战。
- 由于命名空间和块紧密耦合,因此其他服务无法轻松有效地利用块的存储容量。
- 对于单个NameNode,如果我们想在集群中添加更多DataNode,它将创建巨大的元数据。在这里,我们可以水平缩放DataNodes。但是,我们不能以相同的方式扩展NameNode。这是一个命名空间可伸缩性问题。
- 当前的HDFS文件系统具有与吞吐量相关的性能限制。因为单个名称节点仅支持60000个并发任务。
- 我们无法获得单个应用程序的隔离名称空间,因为HDFS部署发生在多租户环境中,并且多个应用程序或组织共享一个群集。
16. 什么是HDFS联盟?
答:在现有的HDFS体系结构中,无法水平扩展NameNode。Hadoop Federation是一个过程,通过该过程可以水平扩展几个独立的NameNode,而无需任何相互协调。
在HDFS联合体系结构中,DataNode位于底层,并用作公用存储。每个DataNode都向集群中的所有NameNode进行注册。在这里,许多名称节点管理许多名称空间,而每个名称空间都有其自己的块池。块池是一组块,并且属于单个命名空间。
总结
以上就是今天的内容了,如果对你有所帮助,希望你能够关注、点赞、转发一键三连支持一下。
需要完整学习线路和配套课堂笔记,请回复111。