BAT大数据高频面试题及详细答案(实战版)-1_第1页
BAT大数据高频面试题及详细答案(实战版)-1_第2页
BAT大数据高频面试题及详细答案(实战版)-1_第3页
BAT大数据高频面试题及详细答案(实战版)-1_第4页
BAT大数据高频面试题及详细答案(实战版)-1_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

BAT大数据高频面试题及详细答案(实战版)本套题目适配一线互联网大数据岗位面试,涵盖Java基础、Hadoop、Hive、Spark、Flink、数据仓库、数据倾斜、性能调优、项目实战等核心考点,答案均为职场实战总结,贴合真实面试话术,无书面化套话。一、Hadoop核心面试题1、简单说说HDFS的架构和工作机制HDFS采用主从架构,核心分为三个角色:NameNode、DataNode、SecondaryNameNode。NameNode是主节点,负责管理整个文件系统的元数据,包括文件目录、文件块位置、权限信息等,不存储真实数据,只维护元数据,同时接收客户端的读写请求、分配数据块存储位置。DataNode是从节点,集群中大部分节点都是DataNode,负责实际存储文件数据块,默认块大小128M,同时会定时向NameNode上报心跳和块状态信息,保证集群节点存活和数据一致性。SecondaryNameNode不是NameNode的备用节点,核心作用是辅助NameNode做元数据合并。NameNode运行时会产生fsimage元数据镜像和edits编辑日志,长期运行日志会无限增大,SNN会定时拉取日志和镜像,合并生成新的镜像文件,减轻NameNode压力,同时用于故障恢复。读写机制核心:客户端读写数据先找NameNode获取元数据和节点位置,之后直接和DataNode交互,全程不经过主节点,保证读写性能。2、HDFS副本机制及副本存放策略HDFS默认副本数为3,核心目的是容错,防止节点宕机、磁盘损坏导致数据丢失。副本存放遵循机架感知策略,保证高可用和均衡性:第一个副本:优先存放在客户端所在节点,如果客户端不在集群内,随机选集群内节点;第二个副本:存放在当前节点的**不同机架**节点,规避机架整体断电故障;第三个副本:存放在第二个副本的**同机架不同节点**,兼顾容错和读写性能;更多副本:随机分散在集群不同机架节点。这套策略既避免了单节点、单机架故障导致数据丢失,又不会因为跨机架传输过多导致性能损耗。3、MapReduce工作流程详细讲解MapReduce分为完整的8个步骤,核心是分片、Map阶段、Shuffle阶段、Reduce阶段:1.作业提交:客户端封装Job任务,提交给ResourceManager;2.任务初始化:RM分配资源,启动JobTracker,读取任务配置、计算数据分片数量,分片数决定MapTask数量;3.Map阶段:每个分片启动一个MapTask,读取每行数据,执行自定义Map逻辑,输出临时K-V键值对;4.分区:Map输出数据按分区规则划分,默认按key哈希分区,保证相同key分到同一个Reduce;5.排序:分区内自动按键进行字典序排序,这是MapReduce默认机制,无法关闭;6.归并溢出:内存缓冲区满后,数据溢出到磁盘,多次溢出会进行归并排序,生成有序小文件;7.Reduce拉取数据:所有Map任务执行完成后,ReduceTask主动拉取对应分区的所有有序数据,合并成全局有序数据;8.Reduce阶段:遍历有序数据,执行自定义Reduce逻辑,最终输出结果到HDFS。4、MapReduceShuffle阶段是什么?为什么是核心?Shuffle是Map输出到Reduce输入之间的所有数据处理流程,核心作用是**数据分组、排序、规整**,是MapReduce最耗时、最容易优化的阶段。简单说就是把Map散乱输出的K-V数据,整理成Reduce需要的、按key分组排序的规整数据。核心流程:分区、排序、Combiner合并、溢出归并、Reduce拉取合并。这个阶段直接决定任务运行效率,大部分数据倾斜、任务卡顿、资源溢出问题,都出在Shuffle阶段。二、Hive核心面试题1、Hive的架构和底层原理,Hive为什么不是数据库?Hive是基于Hadoop的数据仓库工具,本身不存储数据、不计算数据,只是**SQL转MapReduce/Spark/Flink任务的解析引擎**。核心架构组件:驱动模块:解析SQL、语法校验、生成执行计划;元数据存储:存储表结构、字段、分区、数据存储路径等元数据,默认derby,生产用MySQL;客户端:JDBC、CLI、Beeline等交互入口;底层执行引擎:默认MapReduce,可替换为Spark、Flink。Hive不是数据库的核心原因:第一,无实时读写能力,延迟高,不支持秒级查询;第二,不支持事务(早期版本)、不支持行级增删改,只适合批量离线计算;第三,数据存储在HDFS,依托分布式存储,而非数据库本地存储。2、Hive内部表和外部表的区别,生产如何选择?1.管理方式不同:内部表(托管表)由Hive全权管理,外部表由用户自主管理;2.删除逻辑不同:删除内部表,会同时删除元数据和HDFS真实数据;删除外部表,只删除元数据,HDFS数据保留;3.数据归属不同:内部表数据默认存储在Hive默认仓库路径,外部表数据可自定义任意HDFS路径;生产选型:绝大多数场景用外部表,尤其是原始日志表、业务明细表,防止误删表导致数据丢失;只有临时中间表、测试表会用内部表,用完直接清理,无需残留数据。3、Hive分区表和分桶表的区别、适用场景分区:按**时间、地区、渠道**等大维度对数据进行目录级划分,本质是HDFS文件夹拆分。查询时可以走分区裁剪,只扫描指定分区数据,大幅减少扫描量。适用场景:数据量大、经常按时间、区域筛选的表,比如每日日志、用户行为表、订单表。分桶:按**字段哈希取模**,将同一字段值的数据分到同一个文件,本质是文件级拆分。分桶可以实现数据抽样、高效join、分组聚合。适用场景:大表join、数据抽样分析、高频按字段分组统计的场景。生产常用组合:分区+分桶,先按时间分区,再按用户ID分桶,兼顾查询效率和计算效率。4、Hive数据倾斜的原因、解决方案(高频必问)数据倾斜核心现象:任务大部分节点快速跑完,个别任务卡在99%,整体耗时极长,资源分配不均。倾斜根本原因:key分布不均匀,大量相同key被分配到同一个Reduce/Task,单个任务处理数据量远超其他任务。常见原因:空值过多、热点key(比如默认0、未知渠道)、数据维度集中、join字段数据分布不均。生产解决方案:1.空值倾斜:对null/空字符串进行随机打散,给空值拼接随机数,让空值分散到不同任务;2.热点key倾斜:拆分热点key,单独抽取热点数据单独计算,非热点数据正常计算,最后合并结果;3.小表大表join倾斜:使用mapjoin,小表加载到内存,杜绝shuffle阶段倾斜;4.开启参数优化:设置hive.groupby.skewindata、hive.optimize.skewjoin开启倾斜自动优化;5.预处理清洗:提前过滤无效热点数据,从源头规避倾斜。三、Spark核心面试题1、Spark和MapReduce的区别,为什么Spark更快?核心区别:MapReduce是磁盘级计算,Spark是内存级计算。MapReduce每完成一个阶段就会落地磁盘,读写磁盘开销极大,且只有Map、Reduce两个阶段,复杂任务需要多次Job串联,延迟高。Spark基于内存迭代计算,中间结果优先存储在内存,减少大量磁盘IO;同时拥有丰富的算子,任务DAG调度,阶段划分更精细,容错机制更优。Spark更快的核心原因:1.内存计算,规避频繁磁盘读写;2.DAG有向无环图调度,一次性规划所有任务,减少重复调度开销;3.算子丰富,支持复杂迭代计算,适合机器学习、流式计算、复杂数仓计算;4.Shuffle优化更优,支持压缩、排序优化,减少数据传输量。2、SparkRDD、DataFrame、Dataset的区别1.RDD:Spark最基础的数据结构,分布式不可变集合,**无schema、无类型校验**,编译不报错,运行易出错,适合底层开发、复杂自定义算子。2.DataFrame:基于RDD封装,带schema结构,类似数据库表,**弱类型**(编译不校验字段类型),支持SQL查询,优化器优化,查询效率高于RDD。3.Dataset:DataFrame的升级版,**强类型**,编译阶段校验字段类型和结构,兼顾类型安全和SQL优化,性能最优,生产优先使用。简单总结:RDD灵活无优化,DataFrame高效无类型安全,Dataset兼顾高效和类型安全。3、Spark宽窄依赖、阶段划分、任务调度机制窄依赖:父RDD的一个分区只对应子RDD的一个分区,算子操作无需shuffle,比如map、filter、flatMap,执行效率高,可流水线执行。宽依赖:父RDD多个分区对应子RDD一个分区,会产生shuffle,比如groupBy、join、reduceByKey,是划分Stage的核心依据。Stage划分规则:遇到宽依赖就切分Stage,一个Stage内包含连续的窄依赖算子,保证同一个阶段任务流水线执行。任务调度:Driver生成DAG,按Stage划分任务,从后往前调度,先执行上游Stage,再执行下游Stage,每个Stage生成多个Task,分发到Executor执行。4、Spark数据倾斜解决方案相比Hive,Spark倾斜场景更多,除了基础的打散、过滤、mapjoin,核心独有方案:1.加盐打散:对倾斜key拼接随机前缀,打散到不同task,计算完成后去掉前缀聚合;2.拆分任务:热点key单独join计算,其余数据正常join,最后union合并;3.自适应执行:开启Spark3.0+自适应参数,自动调整分区、自动处理倾斜、自动优化shuffle;4.小表广播:使用broadcast广播小表,避免shuffle过程产生倾斜。四、Flink实时计算面试题1、Flink和SparkStreaming的核心区别1.计算模型不同:SparkStreaming是**微批处理**,按固定批次切割数据流,最小延迟秒级;Flink是**真正的流处理**,逐条处理数据,延迟毫秒级。2.容错机制不同:Spark基于Checkpoint+WAL,恢复延迟高;Flink基于精准的状态快照,故障恢复更快、数据一致性更好。3.数据处理语义:Spark仅支持至少一次;Flink支持**精准一次**语义,适合交易、支付、金额统计等精准场景。4.状态管理:Flink内置状态管理,支持窗口、聚合、累加状态,无需外部存储;SparkStreaming无原生状态,依赖第三方存储。生产选型:秒级延迟、离线准实时用SparkStreaming;毫秒级实时、精准数据统计、风控监控用Flink。2、Flink状态、Checkpoint、Savepoint区别状态(State):Flink任务运行过程中持久化的中间数据,比如窗口计数、聚合结果、会话状态,是实时计算的核心,保证断点续算。Checkpoint(检查点):Flink自动触发的快照机制,定时保存任务状态,用于**故障自动恢复**,频率高、轻量,用于日常容错。Savepoint(保存点):手动触发的快照,用于**人工运维操作**,比如升级任务、重启任务、迁移集群、修改逻辑,快照完整、稳定,不用于日常容错。3、Flink窗口机制分类及适用场景1.滚动窗口:窗口固定、不重叠、不间隔,比如每5分钟统计一次,适合固定周期汇总统计;2.滑动窗口:窗口固定、滑动步长小于窗口,窗口重叠,适合高频更新统计,比如每分钟刷新最近5分钟数据;3.会话窗口:基于数据间隔划分,无数据则窗口关闭,适合用户行为会话统计;4.全局窗口:所有数据进入一个窗口,适合全局累计统计。五、数据仓库核心面试题1、数仓分层架构及每层作用(ODS/DWD/DWS/DM/ADS)生产通用五层分层,核心目的:解耦、复用、容错、统一口径。1.ODS层:原始数据层,同步业务库、日志原始数据,不做清洗,保留原始快照,用于数据溯源、备份;2.DWD层:明细数据层,清洗、去重、过滤脏数据、字段标准化,保留完整明细,是数仓核心基础层;3.DWS层:聚合宽表层,按用户、商品、店铺等维度聚合,合成宽表,提前汇总常用指标,提升查询效率;4.DM层:数据集市层,按业务线拆分,比如用户集市、订单集市、流量集市,适配业务专属指标;5.ADS层:应用数据层,最终报表、大屏、接口、BI展示数据,指标口径最终落地层。2、维度建模是什么?星型模型和雪花模型区别维度建模是数仓核心建模方式,以**事实表+维度表**为核心,面向业务分析,查询效率高、口径清晰。星型模型:一张事实表直接关联所有维度表,维度表不关联其他表,结构简单,查询关联少,**生产90%场景使用**。雪花模型:维度表继续细分二级维度,表结构层级多,关联查询复杂,效率低,仅适合超大型复杂维度场景,极少使用。3、数据增量同步、全量同步适用场景全量同步:每次同步整张表所有数据,适合小表、配置表、维度表,数据量小、更新频率低,逻辑简单、无数据遗漏。增量同步:只同步新增、修改、删除数据,适合大业务表(订单、用户、行为日志),数据量大,全量同步开销过高,通过时间戳、binlog实现增量抓取。六、实战调优高频面试题1、大数据任务通用调优思路1.数据源头调优:提前过滤脏数据、无效数据,减少下游计算量;2.分区裁剪:查询必带分区条件,禁止全表扫描;3.倾斜优化:处理热点key、空值倾斜,打散数据、广播小表;4.资源调优:合理设置CPU、内存、分区数,避免资源过剩或资源溢出;5.Shuffle调优:开启压缩、调整缓冲区大小、减少shuffle数据量;6.缓存调优:Spark合

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论