大数据开发面试题【HDFS篇】

## 15、介绍下HDFS,说下HDFS优缺点,以及使用场景?

HDFS(hadoop distributed file system)
优点
  高容错:将文件分为多个块,可以在多个节点上进行复制存储,当节点发生故障时,可以自动恢复数据
  高吞吐:并行处理数据块,较高的读写速度,高效进行批处理操作
  适应大文件存储:将文件划分为多个小块,分布在各个节点上,适合大文件存储和处理
  缺点:
  高延迟数据访问
  不适合小文件存储:对小文件的存储不够高效,浪费存储空间和元数据开销
  使用场景:大规模数据存储和计算、日志分析

## 16、HDFS作用

存储大规模数据集、数据的冗余和备份、高吞吐的数据访问、故障监测和恢复

## 17、HDFS有哪些容错机制

数据冗余和备份:将一个文件划分为多个块存储到各个节点上并做副本备份,当某一个节点出问题的时候,其他节点数据依然可用
心跳机制:DN会定时向NN发送心跳信号,确保依然在工作,如果NN在某一时间段内未接收到DN的信号,则标记该DN不可用
副本恢复:当某一节点发生故障时候,HDFS会自动启用副本恢复机制,将该节点上的块副本复制到其他可用的数据节点上,保证数据的完整新
容错检测和恢复:HDFS会定期监测节点和块的完整性,并自动修复损坏的块

## 18、HDFS的副本机制

冗余存储:会将每个块的副本存储在不同数据节点上,默认的将每个块的副本数设置为3
数据本地性:副本机制会尽量将数据存储在离计算节点比较近的节点上,减少网络传输
副本同步:某个节点故障或者新增节点,HDFS会自动将副本从其他节点复制到新的节点上,保持副本数量和位置平衡

## 19、HDFS的常见数据格式,列式存储格式和行存储格式异同点,列式存储优点有哪些?

HDFS中常见的数据格式:文本文件、序列文件、Avro文件、Parquet文件、ORC文件
按行存储:数据按行进行存储,一行的所有值都连续存储
按列存储:数据按列进行存储,同一列的数据连续存储
列示存储优点:
压缩率高:由于列示存储同一列的数据类型相同,可以采用更高效的算法进行压缩,减少存储空间
查询性能优异:对于特定查询需求的列,只需要读取该列的数据,提高查询性能
更好的数据压缩和解压缩效率:列式存储格式在读取时候只需要解压缩需要的列数据,效率更高

## 20、HDFS如何保证数据不丢失(HDFS如何保证数据一致性、保证数据安全)

数据副本机制:多个副本保存在不同节点上,可从副本中恢复
心跳监测:DN周期性的向NN发送心跳信号,确保还在工作状态,若长时间没有心跳信号,则NN将该故障DN山上的数据副本复制到其他节点上
数据完整性校验:客户端写入数据的时候,会计算数据块的校验和,将其存储在NN上,当读取数据的时候,使用检验和检验数据是否完整
容错机制:在节点故障或者网络问题时候,数据能保持一致性和可用性

## 21、HDFS NN高可用如何实现?

HDFS高可用机制使用了一个Active-StandBy架构,当其中一个NN处于活动状态时候,另一个NN处于备用状态;
需要Active NameNode、Standby NameNode、JournalNode、ZooKeeper;JournalNode用于存储NN的编辑日志,确保在NN切换时候的数据一致性。Zookeeper用于监控和管理活动和备用NN之间的切换;

## 22、HDFS的mapper和reducer的个数如何确定?reducer的个数依据是什么?

1、Mapper的个数由输入数据的分片数决定,hdfs将数据文件划分为多个块,每一个块由一个mapper进行处理
2、在确定reducer个数时候,需要考虑集群中的硬件资源,一般来说reducer个数不超过集群中可用计算节点数
3、对于计算密集型任务,可以增加reduer的个数提高计算速度,对于IO密集型的任务,增加mapper的个数加快数据处理速度
reduce个数可以由程序员自行设定,也决定了输出文件的个数;
设置的数量范围为:(0.95——1.75)* 节点数量*每个节点上最大的容器数

## 23、HDFS中向DN中写入数据失败怎么办?

## 24、HDFS中DN怎么存储数据的?

1、客户端向NN发起写请求,将需要写入的文件名、文件大小等信息告诉NN。
2、NN将文件进行划分,记录数据块的副本位置信息并返回给客户端
3、客户端根据副本位置信息,将数据块发送给对应的DN
4、DN接收到数据块后,将数据块存储在本地磁盘上,
5、DN写入数据的时候,先写入一个临时文件,一旦数据块写入完成,则转变为永久存储文件
6、DN会定时向NN报告存储的数据块信息

## 补充:HDFS读文件过程

1、客户端访问NN,查询元数据信息,获得这个文件的数据块位置列表,返回输入流对象
2、就近挑选一台DN服务器,请求建立输入流
3、DN向输入流中写数据,以packet为单位来校验
4、关闭输入流

## 补充:300m,切片大小是128m,切几片

第一片:0-128M,第二片:128-256M,第三片:256-300M
每次切片的时候,都要判断切完剩下的部分是否大于块的1.1倍,大于时候,继续按照规定切块,小于1.1倍时候,将剩下的文件大小归到一个切片上去
全部评论

相关推荐

wuwuwuoow:校友好 1.相关课程这行可以删了 2.个人呢技能多看看别人简历怎么写,好的直接抄下来 3.项目看起来可能是团队的圣遗物?有上线吗?QPS 为啥才 300?我想象这个业务应该不复杂,可以在简历中添加如果优化接口提高 QPS 的 4.日志记录做的太复杂了,要考虑目前你的项目体量,日志直接用 log.info 啥的记录就好了,写入到本地文件。引入了太多技术,带来太多复杂性。还有为什么日志需要回滚?日志需要有这么高要求的一致性吗 5.为什么用 MinIO 做冷数据存储?MinIO 更适合做对象存储,而 MySQL 是存储结构化数据,他们的定位是不一样的。如果要存冷数据,一般也是存到 MySQL 中。比如一个线上的 MySQL,和一个做冷数据的 MySQL,可以用上 MyISAM 引擎加快写入性能,甚至不写 MySQL 也行,直接写到文件中 不过我想的是这个场景中,每天真的有这么多数据吗?每天少说也得几万、几十万条数据增长,才考虑冷热数据分离。 6.SpringSecurity 用起来不容易,面试可以问的东西却很多,不建议在简历上写这个 7.不设置 Redis 缓存,假设出现了数据不一致,那该怎么办呢? 8.排版注意一下,比如 minio MinIO,Mysql MySQL 9.再加个项目,看看牛客别人怎么写的,可以写个轮子项目
点赞 评论 收藏
分享
北斗导航Compass低仿版:没必要写这么多东西,还是尽量浓缩成一页,自我评价,git和cursor Trae这些都可以去掉。实习经历的描述最好根据star法则改一下,别这么直白
点赞 评论 收藏
分享
评论
5
18
分享

创作者周榜

更多
牛客网
牛客企业服务