2020Java面试大数据常见面试题+参考答案总结
技术面试题
1.Hadoop中有哪些组件?
Hadoop=HDFS+Yarn+MapReduce+Hive+Hbase+…
1).HDFS:分布式文件存储系统
- 主:namenode,secondarynamenode
- 从:datanode
2).Yarn:分布式资源管理系统,用于同一管理集群中的资源(内存等)
- 主:ResourceManager
- 从:NodeManager
3).MapReduce:Hadoop的计算框架,用map和reduce方式实现数据的全局汇总
4).Zookeeper:分布式协调服务,用于维护集群配置的一致性、任务提交的事物性、集群中服务的地址管理、集群管理等
- 主:QuorumPeerMain
- 从:QuorumPeerMain
5).Hbase:Hadoop下的分布式数据库,类似于NoSQL
- 主:HMaster,HRegionserver,Region
7).Hive:分布式数据仓库,其实说白了就是一个数据分析工具,底层用的还是MapReduce
8).Sqoop:用于将传统数据库中数据导入到hbase或者Hdfs中一个导入工具
9).Spark:基于内存的分布式处理框架
- 主:Master
- 从:Worker
2.Hdfs中角色有哪些?
- NameNode:管理元数据信息,给子节点分配任务(FSImage是主节点启动时对整个文件系统的快照,Edits是修改记录)
- DataNode:负责数据存储,实时上报心跳给主节点
- SecondaryNameNode:
1)首先,它定时到NameNode去获取edit logs,并更新到fsimage上。一旦它有了新的fsimage文件,它将其拷贝回NameNode中。
2) NameNode在下次重启时会使用这个新的fsimage文件,从而减少重启的时间。
3.Hdfs和Yarn有什么区别?
1)Hdfs是分布式文件存储系统,是用来存储文件的;
2)Yarn是一个资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和 数据共享等方面带来了巨大好处
4.MapReduce的shuffle过程?
从Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle。
1).Collect阶段:将MapTask的结果输出到默认大小为100M的环形缓冲区,保存的是key/value,Partition分区信息等。
2).Spill阶段:当内存中的数据量达到一定的阀值的时候,就会将数据写入本地磁盘,在将数据写入磁盘之前需要对数据 进行一次排序的操作,如果配置了combiner,还会将有相同分区号和key的数据进行排序。
3).Merge阶段:把所有溢出的临时文件进行一次合并操作,以确保一个MapTask最终只产生一个中间数据文件。
4).Copy阶段:ReduceTask启动Fetcher线程到已经完成MapTask的节点上复制一份属于自己的数据,这些数据默认会 保存在内存的缓冲区中,当内存的缓冲区达到一定的阀值的时候,就会将数据写到磁盘之上。
5).Merge阶段:在ReduceTask远程复制数据的同时,会在后台开启两个线程对内存到本地的数据文件进行合并操作。
6).Sort阶段:在对数据进行合并的同时,会进行排序操作,由于MapTask阶段已经对数据进行了局部的排序, ReduceTask只需保证Copy的数据的最终整体有效性即可。
5.MapReduce的Partition和Combine有什么区别?
- combine分为map端和reduce端,作用是把同一个key的键值对合并在一起,可以自定义,该类的主要功能是合并相同的key键
- partition是分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以自定义的,partition的作用就是把这些数据归类
6.Hadoop的高可用模式说一下?
7.Zookeeper在Hadoop中的作用?
1)Zookeepe主要用来解决分布式应用中经常遇到的数据管理问题,如集群管理、统一命名服务、分布式配置管理、 分布式消息队列、分布式锁、分布式协调等。
2)Zookeeper是一个由多个server组成的集群,一个leader,多个follower,每个server保存一份数据副本,全局数据 一致、分布式读写,更新请求转发,由leader实施。
8.Sqoop的底层原理?
是用来实现结构型数据(如关系数据库)和Hadoop之间进行数据迁移的工具。它充分利用了MapReduce的并行特点以批处理的方式加快数据的传输,同时也借助MapReduce实现了容错
9.Sqoop是怎么连接的关系型数据库?
sqoop import-all-tables –connect jdbc:mysql://192.168.52.110/hivemetadb --username root -password root
10.Java中抽象类怎么理解?
抽象类不能实例化,继承的关键字仍然是extends,而且继承过后可以不覆盖方法,只是使用继承而来的方法
A:抽象类和抽象方法必须用abstract关键字修饰;
B:抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类;
C:抽象类不能直接实例化;(可以通过子类(重写方法后的子类)的多态方式实例化);
- 它不是具体的;
- 抽象类有构造方法,用于子类访问父类数据的初始化;
D:抽象类的子类;
- 如果不想重写抽象方法,该子类必须是抽象类;
- 成为具体类则必须重写所有的抽象方法;
由于篇幅有限,只展示了一部分,需要完整版的朋友可以点一点下方链接免费领取!
链接:1103806531暗号:CSDN
项目面试题
1.大概介绍一下项目;
2.hbase表你们是怎么存数据的?一天数据量是多少?这么多数据你们都存hbase里吗?一开始就是个文件,hbase是表结构,那你是怎么去获取数据然后给存成表结构的?
3.假如现在我要查询每个月的每个片区里订单成交量最高的那个司机ID,你怎么实现?
4.hive怎么读取数据的?我要只存里边我需要的数据,你给我想下怎么优化?
5.你都用过哪些ETL工具?怎么用的?就像flume是怎么获取数据的,你怎么配置的?那kafka怎么读取数据的?hive是直接从kafka里获取数据吗?
6.你建过外表吗?怎么建的?为什么要建外表?
7.你会写shell吗?写过哪些?
8.你应该也经常用linux命令吧,都用过哪些?我现在要查所有后缀是.txt的文件名,怎么查?grep用过吗?
9.我现在不想查司机,我想查订单,怎么去设计hbase表?
总结
我这边也整理了一份 架构师全套视频教程 和关于java的系统化资料,包括java核心知识点、面试专题和20年最新的互联网真题、电子书等都有。有需要的朋友可以点一点下方链接免费领取!
链接:1103806531暗号:CSDN
本文地址:https://blog.csdn.net/XingXing_Java/article/details/108869452