大数据分析工程师面试集锦6-HDFS
点击上方“大数据与人工智能”,“星标或置顶公众号”
第一时间获取好内容
作者丨斌迪 HappyMint
编辑丨Zandy
祝读者们中秋节快乐!
本篇文章为大家带来HDFS面试指南,题目大部分来自于网络上,有小部分是来自于工作中的总结,每个题目会给出一个参考答案。
为什么考察HDFS?
为什么考察HDFS?
作为大数据生态的基石,HDFS支撑着所有上层的组件,其重要性不言而喻。HDFS作为分布式存储的基础解决方案,为所有的其他组件提供高可用、稳定而高效的数据存储服务。我们必须要了解其基本原理和概念,一方面可以对工作中排查问题有比较大的帮助,另一方面方便我们与他人沟通交流。
什么是HDFS?
HDFS的优缺点
优点:
(1) 高容错性
1) 数据自动保存多个副本。它通过增加副本的形式,提高容错性。
2) 某个副本丢失后,可以自动恢复。
(2) 适合批处理
1) 移动计算而不是移动数据。
2) 它会把数据位置暴露给计算框架。
(3) 适合大数据处理
1) 数据规模:能够处理数据规模达到 GB、TB、甚至PB级别的数据。
2) 文件规模:能够处理百万规模以上的文件数量,数量相当之大。
3) 节点规模:能够处理10K节点的规模。
(4) 流式数据访问
1) 一次写入,多次读取,不能修改,只能追加。
2) 保证数据的一致性。
(5) 可构建在廉价机器上
1) 它通过多副本机制,提高可靠性。
2) 它提供了容错和恢复机制。
缺点:
(1) 不适合低延时数据访问;
1) 毫秒级内的读写数据,做不到。
2) 它适合高吞吐率的场景,就是在某一时间内写入大量的数据。
(2) 无法高效的对大量小文件进行存储
1) 存储大量小文件的话,它会占用 NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,因为NameNode的内存总是有限的。
2) 小文件存储的寻道时间会超过读取时间,它违反了HDFS的设计目标。
(3) 单个文件不支持并发写入、文件随机修改
1) 一个文件只能有一个写,不允许多个线程同时写。
2) 仅支持数据追加,不支持文件的随机修改。
HDFS有哪些组件进程,它们有什么作用?
1)NameNode:HDFS的主节点,负责维护文件系统树,管理文件、目录、块等信息以及HDFS命名空间,协调并管理所有从节点,负责处理和调度客户端的读写请求。
2)DataNode:HDFS的从节点,负责具体数据的存储,处理与客户端的交互,进行具体数据的读写操作。
3)JournalNode:主要作用是负责两个NameNode之间的状态同步。
4)ZKFC(ZKFailoverController):主要作用是监控NameNode的健康状况,并实现Active状态的自动转移。
ZKFailoverController主要职责
1)健康监测:周期性的向它监控的NN发送健康探测命令,从而来确定某个NameNode是否处于健康状态,如果机器宕机,心跳失败,那么zkfc就会标记它处于一个不健康的状态。
2)会话管理:如果NN是健康的,zkfc就会在zookeeper中保持一个打开的会话,如果NameNode同时还是Active状态的,那么zkfc还会在Zookeeper中占有一个类型为短暂类型的znode,当这个NN挂掉时,这个znode将会被删除,然后备用的NN,将会得到这把锁,升级为主NN,同时标记状态为Active。
3)当宕机的NN启动时,它会再次注册zookeper,发现已经有znode锁了,便会自动变为Standby状态,如此往复循环,保证高可靠,需要注意,目前仅仅支持最多配置2个NN。
4)master选举:如上所述,通过在zookeeper中维持一个短暂类型的znode,来实现抢占式的锁机制,从而判断哪个NameNode为Active状态。
HDFS回收站机制,有什么作用?
//修改core-site.xml
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
这个功能务必要打开,因为它可以有效避免误删数据,避免错误操作带来的严重后果。我们在删除数据时,也最好不要跳过回收站,这样即使出现失误,也还有挽救的可能,不然数据是无法找回的。
HDFS数据块(block)是什么?主要作用和影响
HDFS存小文件的影响和解决方案?
并发写同一个HDFS文件可行吗?
不行, 因为客户端通过namenode接收到在数据块上写入的许可后, 那个块会锁定直到写入操作完成, 所以不能在同一个块上写入。
HDFS写程序?
2)检查是否已存在文件、检查权限。若通过检查,直接先将操作写入EditLog,并返回输出流对象。
3)client端按块大小切分文件。
4)client将NameNode返回的分配的可写的DataNode列表和Data数据一同发送给最近的第一个DataNode节点,此后client端和NameNode分配的多个DataNode构成pipeline管道,client端向输出流对象中写数据。
5)每个DataNode写完一个块后,会返回确认信息。
6)写完数据,关闭输出流。
7)发送完成信号给NameNode,记录文件名,大小,副本数量等信息。
HDFS读程序?
1)client访问NameNode,查询元数据信息,获得这个文件的数据块位置列表,返回输入流对象。
2)就近挑选一台datanode服务器,请求建立输入流 。
3)DataNode向输入流中写数据,以packet为单位来校验。
4)读取完成后,client关闭输入流。
写出你在工作中用过的hdfs的命令?(参考文章)
HDFS的数据压缩算法?
三个datanode当有一个datanode出现错误会怎样?
出现错误的时候无法和namenode进行通信,namenode要去确认datenode是不是宕掉了,这段时间称作超时时长,hdfs默认时间是10分钟30秒,确认该datanode宕机后,存储在这个datanode上的相应文件的副本数会减1,然后namenode会启动自动平衡机制,补全缺失的副本到其他机器上。
HDFS副本放置策略
系统默认有3个副本。其中:
第一个block副本放在client节点所在机架的datanode里(如果client不在集群范围内,则随机选取);
第二个block副本放置在与第一个datanode节点相同的机架中的另一个datanode中(随机选择);
第三个block副本放置于另一个随机远端机架的一个随机datanode中;
如果还有更多的副本就随机放在集群的node里。
HDFS可靠性策略
2)心跳,DataNode定时向NameNode发送心跳信息;
3)HA,文件系统镜像多分存储、主备NameNode实时切换。
小结
本篇HDFS面试指南,结合网络上的经典考题和工作中总结改编的题目一共15道,基本涉及了数据分析工作中常用的知识点,有概念类的也有实操类的,希望读者可以查漏补缺,完善HDFS面试知识点。
参考文献
https://blog.csdn.net/tclwh123/article/details/83903580
[2] 大数据分析工程师入门7--HDFS&YARN基础,作者:凯凯连 本公众号文章
[3] HDFS相关面试问题整理,作者:Dota_Data
https://blog.csdn.net/dota_data/article/details/93221356
[4] HDFS常用操作命令,作者:匕首博
https://www.cnblogs.com/jichui/p/10444430.html
[5] HDFS应用场景、原理、基本架构,作者:Alukar
https://www.jianshu.com/p/ff8d26037e34
[6] Hadoop面试必须知道的那些事儿,作者:呼呼
https://zhuanlan.zhihu.com/p/24946274
[7] 100 道常见 Hadoop 面试题及答案解析,作者:首席撩妹指导官
https://blog.csdn.net/qq_36864672/article/details/78213304
3.大数据分析工程师面试集锦3-SQL/SparkSql/HiveQL
4.大数据分析工程师面试集锦4-Hive5. 大数据分析工程师面试集锦5--Spark面试指南