如何比较装X地回答问题 | 面试系列.1 (2)

1、跟namenode通信查询元数据,找到文件块所在的datanode服务器
2、挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流
3、datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)
4、客户端以packet为单位接收,先在本地缓存,然后写入目标文件

当然为了避免翻车,还是希望大家可以真的去看看部分源码,装X要适当,稍微秀一下就可以,不然被追问导致翻车的可能性还是有的。

hdfs 有哪些进程,各自的作用是什么?

NameNode:Namenode 管理者文件系统的Namespace。它维护着文件的元数据,包括文件名、副本数、文件的BlockId,以及block所在的服务器,会接受来自client端的读写请求,和datanode的block信息上报。

DataNode:hfds的工作节点,他们根据客户端或者是namenode的调度存储和检索数据,并且定期向namenode发送他们所存储的块(block)的列表。

JournalNode:负责两个NameNode高可用时的数据同步保证数据一致,存放NameNode的editlog文件(元数据),部署在任意节点,奇数个。

DFSZKFailoverController(ZKFC):负责监控NameNode的健康状态,并及时把信息状态写入Zookeeper,如有异常会触发主从切换,部署在有NameNode的节点。

另外你上百度搜这个问题的话,很少会提到后面两个进程,SecondaryNameNode却经常被提到,这个东东其实可以不用说,是 hadoop 比较旧而且已经基本没公司用的一种部署方式,NameNode会有单点问题,所以可以不用和其他的混合在一起说。

hdfs 如何保证可用性 ?

NameNode的高可用由JournalNode和DFSZKFailoverController保证,JN负责主从数据的一致,ZKFC负责主从的failover;

数据在HDFS中是默认存储三份的,且在不同的DataNode,所以DataNode挂掉两台仍然能保证数据的完整性;(挂三台的概率理论上是很低的,真挂了的话就算是重大事故了,等着罚钱吧。那有什么更好的解决办法呢?其实是有的,就是逢年过节记得要拜拜服务器,多上几柱香)

JournalNode也是分布式的,因为有选举机制,所以默认要大于1的奇数个服务器在线,挂掉一两台问题也不太大,但是要做好监控。

DFSZKFailoverController(ZKFC)这个进程貌似在设计上并没有去关注可用性的问题,它是部署在两个NameNode节点上的独立的进程,但是其实他的作用就是辅助zookeeper做NameNode的健康监控,所以可以直接说Zookeeper的可用性。
Zookeeper是一个独立的分布式系统,用于管理和协调分布式系统的工作,它本身也会通过zab协议来保证数据一致,和主备节点的选举切换等等。

另外,这个类型的文章我也准备来写一个系列,每一篇会涉及几个大数据面试的问题和答案,也会有我的一些想法和建议。这是开篇,就先写HDFS相关的,另外我会尽量提高发文的频率,大家还是多多支持啦,好看就点个在看吧。

觉得有价值请关注 ▼

如何比较装X地回答问题 | 面试系列.1

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywypz.html