简介:这份《2023年史上最全的大数据面试题》面向大数据开发、运维、云计算、数据治理及架构岗位的求职者与进阶学习者,围绕面试复盘和知识体系查漏补缺,系统梳理 Linux&Shell、Hadoop、Zookeeper、Flume、Kafka、Hive、HBase、Sqoop、Scala 与 Spark 等核心模块。压缩包内为 1 个 docx 文档,约 491KB,目录按技术栈分章组织,便于按专题检索。内容不仅覆盖 HDFS 读写、MapReduce Shuffle、YARN 提交流程、Kafka 数据丢失与重复、Hive 数据倾斜、HBase RowKey 设计、Sqoop 一致性等高频题,还延伸到参数调优、项目经验和 Spark 架构、宽窄依赖、缓存与 checkpoint 等进阶考点。目前已有 884 人学习,适合用于面试前集中梳理、构建答题框架和定位薄弱环节。
1. 大数据面试题到底在考什么:从“背题”到一张能力地图
大数据面试题这五个字,很容易被理解成一摞背完就能过的题。其实它更像一张城市地图:Linux 是道路,Hadoop 是货运系统,Kafka 是转运站,Spark 和 Flink 是不同速度的运输队。你不需要记住每个路牌,但要知道从仓库到用户手里,数据经过了哪些路口。
搞懂这张地图,面试时不会只蹦名词,工作中遇到“任务卡住”“数据对不上”也知道往哪一层查。它值得看,不是因为题多,而是因为它把散落的工具放回同一条数据链上,让你知道每个概念为什么存在、和谁配合、边界在哪。
2. 为什么大数据面试题像一张分层地图:从Linux到Spark的认知顺序
2.1 底层底座:Linux、Shell 与集群常识
大数据平台不是装在一台电脑上的软件,它先是一组机器,然后才是一堆框架。Linux 和 Shell 之所以常被放在最前面,不是因为面试官喜欢考命令,而是因为数据平台跑在操作系统之上,日志、进程、端口、磁盘、网络都从这一层冒出来。一个任务失败,表面看是 Spark 报错,往深里查可能是磁盘满了、端口被占了、Shell 脚本里引号写错导致参数没传进去。这些事不一定是日常主线,但一旦出问题,就是绕不开的底座。
Shell 的角色更像胶水。采集脚本、调度脚本、补数据脚本、清理临时文件,很多环节靠它把不同工具串起来。面试里问grep、sed、awk,不是要你背参数表,而是看你有没有在机器上定位问题的习惯:能不能从一堆日志里筛出错误行,能不能替换配置里的某个字段,能不能按列截取时间戳。命令本身可以查,排查思路不好临时补。
端口号和配置文件也是同一类问题。端口号像门牌,知道门牌才能找到服务;配置文件决定集群怎么启动、副本放几份、内存给多少。背下端口号不等于懂 Hadoop,但说不出 NameNode、DataNode、ResourceManager 各自大概在什么位置,就很难理解后面的读写流程和提交流程。流程题才是把底座串起来的那根线:客户端先找谁,数据写到哪几个节点,失败后谁补副本,任务提交后谁分配资源。把这些走一遍,Linux 层就不再是零散命令,而是数据真正经过的机器和网络。
提示:流程题不要只背步骤名,要能说出每一步在搬什么数据、谁在等谁。
2.2 数据怎么进来、怎么存:Flume、Kafka、HDFS、HBase
数据不会自己躺进仓库。它先从业务库、日志文件、埋点接口里出来,经过采集、缓冲、存储,才轮到计算。Flume 常被放在采集端,负责把日志一类数据可靠地送到下游。它的事务机制听起来抽象,其实就是“先记一笔再搬,搬成功才确认”。Put 事务管数据进来,Take 事务管数据出去,中间用 Channel 缓冲。面试里问“Flume 会不会丢数据”,本质是问你在哪个环节可能断:Source 读到了但 Channel 没接住,或者 Sink 写失败了但源头已经确认。
Kafka 更像一个高吞吐的转运站。上游把消息写进 Topic,下游按自己的节奏消费。分区让数据能并行处理,副本让某台机器坏掉时还有备份,ISR 就是“跟得上主副本进度的那组副本”。很多人把 Kafka 当成普通消息队列,只记住“快”,却忽略它的设计前提:消息按分区有序,消费者组里一个分区同一时刻只给一个消费者,副本同步有滞后。问分区数、副本数、数据量计算,其实是在问你有没有容量意识。分区太少,并行度上不去;分区太多,元数据和文件句柄压力上来。副本不是越多越安全,同步副本也要花网络和磁盘。
HDFS 负责存大文件。它把文件切成块,分散到多台机器上,再靠副本保证坏盘时不丢。这个设计适合一次写入、多次读取的大文件,不适合大量小文件。小文件多了,NameNode 要记的元数据变多,就像仓库里全是巴掌大的包裹,货架编号比货还占地方。面试里问 HDFS 读流程和写流程,不是让你背“客户端、NameNode、DataNode”三个词,而是看你知不知道数据块怎么选、副本怎么传、失败怎么重试。
HBase 则是另一类存储。它按 RowKey 组织数据,适合海量稀疏数据的随机读写。RowKey 设计不好,热点会集中到少数机器上,写入看着在跑,其实一半资源在排队。把 HDFS 和 HBase 放在一起看就清楚了:HDFS 像大仓库,适合整批搬货;HBase 像按编号取货的货架,适合拿着单号快速找一件。两者不是谁替代谁,解决的问题不同。
2.3 数据怎么算、怎么调度:MapReduce、Yarn、Hive、Spark、Flink
数据存下来之后要算。MapReduce 是早期批处理代表,核心动作可以理解成“先分散处理,再按 key 归并”。中间那个按 key 重新分发的过程叫 Shuffle,像把混在一起的快递按小区分拣。分拣本身不产生最终结果,但没有它,后面的汇总做不了。Shuffle 也是很多性能问题的源头:数据量大、key 分布不均、落盘和网络传输多,任务就会拖慢。
Yarn 管的是资源。集群里 CPU 和内存有限,多个任务同时跑,谁先拿、拿多少、排队还是插队,要有规则。Job 提交流程里,客户端先找 ResourceManager,再由 ApplicationMaster 去申请资源、协调任务。调度器差异常被问,是因为它直接影响多租户环境下的公平和吞吐:有的先来先服务,有的分队列按权重分,有的兼顾小任务延迟。面试官问这些,不是要你背配置项,而是看你有没有“集群是共享资源”的意识。
Hive 把 SQL 带到 Hadoop 生态里。它不直接存数据,而是把表结构、分区、SQL 语句翻译成分布式作业。内部表和外部表的区别,关键在于删表时数据动不动;分区和分桶的区别,关键在于目录切分和文件切分。窗口函数常被问,是因为它能保留明细行做组内计算,和GROUP BY的折叠行不是一回事。UDF、UDTF 则是把自定义逻辑塞进 SQL 里,适合清洗和拆列。Hive 优化、数据倾斜、动态分区这些题,表面是 SQL 技巧,背后是对数据分布的理解。
Spark 用内存计算和弹性数据集把批处理做快,也支持微批流处理。RDD 的血统记录让它在丢分区时能重算,宽窄依赖决定 Stage 怎么切,缓存和 checkpoint 是两种不同的“后悔药”:一个留在内存里加速,一个落到可靠存储上保命。Spark SQL 里的 DataFrame、DataSet 和 RDD 常被放在一起比较,核心差别是结构化程度和优化空间。广播变量、累加器、广播 join 这些概念,都是为了减少数据搬运。
Flink 更强调原生流处理。窗口、水印、状态、Exactly-once 这些词,落到场景里就是:数据可能迟到,怎么等;计算到一半失败,状态怎么恢复;消息重复了,结果怎么不重复。Spark Streaming 的微批和 Flink 的流处理不是谁一定更好,而是时间语义和延迟要求不同。批处理看吞吐,流处理看延迟和状态一致性,选型先看业务能不能等。
2.4 为什么面试官爱问流程而不是命令
命令可以查手册,流程很难临时拼。一个人能把 HDFS 写流程讲顺,说明他知道客户端、NameNode、DataNode 之间谁先动、谁确认、失败后谁补;能把 Yarn 提交流程讲顺,说明他知道资源申请和任务运行不是一回事。流程题像一条线,把存储、计算、调度、网络串起来。只背结论的人,遇到“任务卡在哪个阶段”就容易露怯。
流程题还有一个好处:它能暴露边界。比如问 Kafka 丢不丢数据,答案不是简单的“不丢”,而是要看生产者确认、副本同步、消费者提交位点各自怎么配。问 Spark 数据倾斜,也不是一句“加盐”就完事,要先看是 join 倾斜、group by 倾斜还是空值倾斜。面试官追问流程,往往是在判断你有没有真正处理过“数据在机器之间搬动”的细节。
3. 大数据岗位到底在分工什么:开发、运维、云计算、数据治理、架构师的边界
3.1 大数据开发:写SQL和写代码不是一回事
大数据开发常被误解成“写 SQL 的”或者“写 Scala/Java 的”。真实工作里,两件事经常同时出现:用 SQL 做数仓分层和指标计算,用代码写 Spark、Flink 任务或者自定义函数。SQL 写得出来,只说明逻辑能跑;跑得快不快、数据准不准、第二天能不能稳定重跑,才是开发要负责的部分。一个指标口径没对齐,后面报表全跟着偏;一个 join 没考虑数据分布,任务可能跑几个小时。
开发岗的面试题会落在 ETL 流程、数仓分层、维度建模、拉链表、窗口函数、数据倾斜这些点上。ETL 不是三个字母的缩写题,它对应的是“抽取、转换、加载”这条链路:源表怎么同步,增量怎么识别,脏数据怎么处理,历史状态怎么保留。拉链表就是给会变化的数据留时间切片,今天改地址,不是把昨天地址抹掉,而是记下生效区间。问这些,是看你能不能对数据结果负责。
写代码的部分则更看调试和调优。Spark 任务提交参数怎么设,Shuffle 分区怎么调,缓存用在哪一步,广播变量适合多大表,这些问题没有固定答案,要结合数据量、集群资源和业务时效。开发岗的边界不是“会多少工具”,而是能把一个需求从源数据走到可用指标,并且知道哪一步可能翻车。
3.2 大数据运维与云计算:保障“跑得稳”而不是“跑得通”
运维岗的核心不是把软件装起来,而是让集群在一段时间内稳定运行。机器会坏,磁盘会满,任务会堆,队列会堵,日志会刷得飞快。运维要看的指标包括资源使用率、任务失败率、服务可用性、容量余量。面试里问集群搭建、配置文件、端口、故障处理,不是考安装步骤,而是考你遇到服务起不来时,先看进程、看端口、看日志还是看资源。
云计算把这个边界往前推了一步。资源申请、环境准备、权限配置、监控告警、成本控制,很多动作变成了流程化操作。云开发不是“在云上点按钮”,而是知道哪些资源该弹性扩,哪些任务该错峰跑,哪些存储适合冷数据,哪些账单异常要追到具体队列。会用云平台不难,难的是把资源使用和业务负载对上。
运维和开发经常互相“甩锅”:开发说任务慢是集群资源不够,运维说资源够是你代码写得歪。真要把问题说清,还是得回到流程和数据分布。一个任务卡住,可能是数据倾斜,也可能是队列被大任务占满;一个服务重启,可能是内存泄漏,也可能是磁盘写满。岗位名称不同,排查路径常常重叠。
3.3 数据治理与架构师:让数据“说得清、找得到、可追责”
数据治理听起来虚,落到日常却很具体:这张表谁建的、字段什么意思、上游是谁、下游谁在用、口径变过没有、质量有没有监控。元数据和血缘系统就是给数据建“户口本”和“家谱”,出了问题能顺着链路往回找。数据质量监控则是设规则,比如空值率、主键唯一性、金额不能为负,跑完任务自动检查,而不是等业务方发现报表不对再回头查。
架构师的边界又不一样。架构师不是画一张漂亮图的角色,而是要在存储、计算、实时、离线、成本、团队能力之间做取舍。选 Kafka 还是别的消息系统,选 Hive 还是更快的查询引擎,批处理能不能满足时效,流处理要不要上,数据湖和数据中台各自解决什么问题,这些判断都依赖对业务和资源的理解。面试里问框架选型、集群规模、人员配置,其实是在问你有没有整体观。
数据治理和架构师常被放到同一张能力地图上,因为两者都关心“长期可用”。开发关心这个任务今天能不能出结果,运维关心这个集群这周稳不稳,治理关心半年后还能不能找到数据,架构关心一年后这套架构撑不撑得住。岗位不同,问题会交叉。
3.4 岗位不同,为什么面试题会重叠
因为底层概念是共享的。开发要懂 Shuffle 才能调优,运维要懂 Shuffle 才能判断资源瓶颈,治理要懂血缘才能追影响范围,架构要懂批流边界才能选型。下面这张表可以把边界看得更清楚。
| 岗位方向 | 日常产出 | 最怕什么 | 常被追问的点 |
|---|---|---|---|
| 大数据开发 | 数仓模型、ETL 任务、指标结果 | 口径错、任务不稳定 | Shuffle、数据倾斜、窗口函数、拉链表 |
| 大数据运维 | 稳定集群、监控告警、故障恢复 | 容量不足、故障定位慢 | 端口、日志、资源队列、副本与磁盘 |
| 云计算相关 | 资源环境、弹性伸缩、成本可见 | 资源浪费、权限混乱 | 资源规格、存储类型、监控与账单 |
| 数据治理 | 元数据、血缘、质量规则、权限标准 | 数据找不到、口径说不清 | 血缘链路、质量指标、权限边界 |
| 大数据架构师 | 选型方案、分层边界、容量规划 | 选型过度、成本失控 | 批流取舍、集群规模、扩展性 |
表格不是让人对号入座,而是说明同一道题在不同岗位眼里的重点不同。问 Kafka 分区数,开发想并行度,运维想磁盘和网络,架构想容量和扩展。能把同一概念从不同岗位角度讲出来,面试时就不容易只停在定义上。
4. 高频概念怎么区分:Hadoop、Hive、HBase、Spark、Flink 不是替代关系
4.1 存储、计算、消息、协调:四种角色别混
初学者最容易把一堆框架排成“谁替代谁”的队列,其实它们经常是分工关系。HDFS 负责存大文件,Yarn 负责分资源,MapReduce 和 Spark 负责算,Hive 提供 SQL 层,HBase 提供随机读写,Kafka 负责消息流转,Zookeeper 负责协调。把它们放在一张表里,角色会清楚很多。
| 概念 | 主要角色 | 通俗理解 | 常见边界 |
|---|---|---|---|
| HDFS | 分布式文件存储 | 大仓库,适合整批存取 | 不适合大量小文件 |
| Yarn | 集群资源调度 | 分配 CPU、内存的调度台 | 不负责具体计算逻辑 |
| Hive | SQL 数仓工具 | 把 SQL 翻译成分布式作业 | 不直接存原始数据 |
| HBase | 列式 NoSQL 数据库 | 按 RowKey 快速取货的货架 | RowKey 设计不好会热点 |
| Kafka | 分布式消息系统 | 高吞吐转运站 | 分区、副本要按容量规划 |
| Spark | 批流计算引擎 | 内存计算的多面手 | 微批流处理有延迟边界 |
| Flink | 流处理引擎 | 原生流处理,强调状态和时间 | 不是所有场景都必须上 |
Hadoop 本身也不是一个单独软件,它更像一个生态总称。面试里问“Hadoop 优化”,可能问的是 HDFS 小文件、MapReduce 压缩、Yarn 队列、集群参数,范围很宽。先把角色分清,再谈优化,才不会被工具名带着跑。
4.2 批处理、流处理、交互查询:时间语义决定选型
批处理处理的是“已经落下来的数据”,特点是吞吐大、延迟按小时或天算。流处理处理的是“还在路上的数据”,特点是延迟低,但要处理乱序、迟到、状态和故障恢复。交互查询追求的是人点一下很快出结果,通常依赖索引、列式存储或更快的执行引擎。三种模式不是先进替代落后,而是业务能不能等的问题。
Spark Streaming 常被描述成微批,它把流切成一小段一小段处理,延迟通常比原生流处理高一些,但生态和批流统一做得顺。Flink 把流当成一等公民,窗口、水印、状态这些概念更靠前。问“Flink 和 Spark Streaming 区别”,不要只答“一个快一个慢”,要说清时间语义、状态管理、延迟要求和团队维护成本。选型时,业务能接受分钟级延迟,微批可能更省心;要求秒级甚至更低,原生流处理更合适。
Hive 的交互查询也要看引擎。Hive 本身是 SQL 层,底层可以跑 MapReduce,也可以跑 Tez、Spark 等引擎。问“Hive 快不快”,不如问“底层执行引擎是什么、数据格式是什么、分区裁剪有没有用上”。HBase 的点查又是另一条路,它不靠全表扫描,而靠 RowKey 定位。把批处理、流处理、交互查询混在一起比快慢,就像拿卡车、快递车和自行车比谁先进,先看货量和时效。
4.3 数据仓库分层与ETL:ODS、DWD、DWS、ADS 到底差在哪
数仓分层常被问,是因为它能看出一个人有没有整体数据流概念。ODS 层贴近源系统,尽量保留原始数据;DWD 层做清洗、规范、明细宽表;DWS 层按主题做轻度汇总;ADS 层面向报表和应用。每一层解决的问题不同:ODS 保真,DWD 保干净,DWS 保复用,ADS 保好用。分层不是为了多建几张表,而是为了让口径有地方沉淀,出问题能往回追。
ETL 和 ELT 也常被混。ETL 是先转换再加载,ELT 是先加载再转换。传统数仓受存储和算力限制,倾向先清洗再入库;大数据平台存储便宜、算力可扩展,先把原始数据落下来再转换更常见。叫法不同,核心都是把源数据变成可用数据。拉链表则解决“数据会变”的问题:用生效日期和失效日期记录历史状态,查某天状态时按区间过滤,而不是只留最新一行。
下面这段 SQL 用窗口函数保留明细行,同时算当天订单数。它和GROUP BY的区别在于:GROUP BY会把同一个用户同一天的多行折成一行,窗口函数不会。
-- 按用户和日期分组计数,但保留每一行订单明细 SELECT user_id, dt, order_id, COUNT(*) OVER (PARTITION BY user_id, dt) AS day_order_cnt FROM order_detail;这段代码里,PARTITION BY user_id, dt决定按用户和日期划分窗口,COUNT(*) OVER在窗口内计数,外层查询仍然返回每一行。面试里问窗口函数,常会追问“和 group by 有什么区别”“窗口范围怎么写”“数据量大时怎么优化”。回答时先讲行数变化,再讲执行代价,比背函数名有用。
5. 初学者最容易踩的误区:把“工具名”当成“能力项”
5.1 误区一:背熟端口号就等于懂Hadoop
易混点:把端口号、默认配置、安装步骤当成 Hadoop 能力的全部。
为什么混:这些内容具体、好背、面试时容易问,看起来像“硬知识”。
怎么区分:端口号只是入口,懂 Hadoop 要看能不能讲清数据怎么写进去、副本怎么放、任务怎么提交、失败怎么恢复。能说出 NameNode 和 DataNode 的分工,比背十个端口更有用。端口可以查,流程和边界查不到。
5.2 误区二:Hive 就是数据库,HBase 也是数据库
易混点:两个名字里都带“数据库”的影子,干脆当成同一类东西。
为什么混:它们都能用表来理解,也都能查数据,初学者容易只记“都能存数据”。
怎么区分:Hive 更像 SQL 数仓工具,底层把查询翻译成分布式作业;HBase 是按 RowKey 随机读写的列式存储。Hive 适合批量分析和报表,HBase 适合按单号快速取一条记录。问“Hive 和 HBase 区别”,先答使用方式,再答底层结构。
5.3 误区三:Spark 一定比 MapReduce 快,所以可以无脑替换
易混点:把“内存计算”当成万能加速键。
为什么混:Spark 在不少迭代计算和交互分析场景里确实快,宣传语也容易让人忽略前提。
怎么区分:Spark 快,是在数据能缓存、Shuffle 可控、资源够用的前提下。数据量远超内存、任务本身是重 Shuffle、集群资源紧张时,换引擎不一定解决问题。选型要看数据分布、任务类型和运维成本,不是看谁名字新。
5.4 误区四:数据倾斜是代码写错了
易混点:任务慢就改 SQL 写法,以为语法换一种就能好。
为什么混:数据倾斜常在 join、group by 里暴露,看起来像代码问题。
怎么区分:数据倾斜是数据分布问题,某个 key 特别多,少数任务干了大部分活。要先看 key 分布,再看是空值倾斜、热点 key 还是 join 设计问题。加盐、拆分、广播、调分区都是手段,前提是知道哪一段在倾斜。血泪经验是:不看分布直接改参数,往往只是把慢任务挪了个位置。
5.5 误区五:面试题背完就能上岗
易混点:把题库当学习路径,从头背到尾。
为什么混:面试题覆盖广,背完会有“都见过”的错觉。
怎么区分:题库适合查漏补缺,不适合替代项目理解。能背出 Shuffle 定义,不等于能解释一次任务为什么卡在某个 Stage;能背出数仓分层,不等于能说清一个指标从源表到报表经过哪些表。用题找缺口,再回到流程和场景里补,才不容易忘。
6. 这份大数据面试题什么时候用、什么时候别用:一份查漏补缺的用法
这份资料适合在你已经接触过一些概念、但知识还散着的时候用。比如准备面试前,按岗位圈范围:开发岗重点看 ETL、数仓分层、Spark 调优和数据倾斜;运维岗重点看集群、端口、日志、资源和故障;数据治理方向重点看元数据、血缘、质量规则;架构方向重点看选型边界和容量。用它当索引,遇到卡壳的章节再展开,比从第一页背到最后更有效。
它不适合零基础当天拿来硬背。没有做过任务、没看过日志、没调过一次慢查询,背流程题很容易变成复述步骤名。也不适合只看答案不看追问,更不适合把题库当成唯一学习路径。下面这张表可以帮你判断场景。
| 使用场景 | 适不适合 | 原因 |
|---|---|---|
| 面试前按岗位查漏 | 适合 | 能快速发现哪块概念断线 |
| 工作中遇到名词卡壳 | 适合 | 当索引翻到对应技术栈 |
| 带新人梳理知识地图 | 适合 | 先讲流程,再补细节 |
| 零基础当天背题 | 不适合 | 没有场景,背完就忘 |
| 只看答案不追流程 | 不适合 | 追问一来就露底 |
我后来带人时有个习惯:不先问题库,而是让对方挑三道流程题口述,比如 HDFS 写流程、Yarn 提交流程、一个 Spark 任务从提交到出结果。讲不顺的地方,才是他真正该回去翻的章节。从那以后我每次整理学习计划,都强制走一遍“先讲流程,再补概念,最后看题”的顺序,省得在名词里打转。需要时把这份大数据面试题资料取来对照就好,不必从头背到尾。希望帮到你。
本文还有配套的精品资源,点击获取