☰
大数据笔试高频考点全解析:从HDFS到Spark调优
2026/10/6 13:33:16 网站建设 项目流程

秋招笔试季,大数据岗位的题目又在各个技术群里刷屏了。刷屏的原因很现实:题目看着不难,真动笔写起来却处处是坑。我这些年既当过出题人,也帮人复盘过上百份笔试题答案,发现一个规律——笔试淘汰的人,往往不是知识面窄,而是踩在那些“以为会、其实没想透”的考点上。这篇文章就把大数据笔试题里的高频考点按模块拆开,结合常见题型和答题思路,给准备校招或跳槽的朋友一个可以直接对照复习的清单。

1. 大数据笔试到底在考什么:近两年的考察风向

1.1 题型分布与分值结构

大数据岗位的笔试题,近几年已经从“背概念”转向“考理解”了。以我看到的各厂真题来看,题型大致可以分成四块:选择题/填空题(约占三成)、SQL题(约占两到三成)、简答/原理题(约占两成)、编程或场景设计题(约占两成)。有的公司会把SQL和编程合并成一道大数据量的代码题,比如给你一份用户行为日志,要求写出清洗逻辑或统计指标的实现。

选择题考察面最杂,Hadoop、Spark、Hive、Kafka、Flink、数据仓库理论都会涉及,偶尔还会混几道Linux和Java基础题。简答题则集中在几个固定主题:HDFS读写流程、Spark任务提交与执行流程、数据倾斜的解决方案、Hive与普通数据库的区别、Kafka消息不丢失的机制等。场景设计题一般是“给你一个业务需求,请你设计离线数仓的层级结构”或者“某张表数据量暴增,如何优化查询”。

从分值倾斜来看,出题人最看重的是两件事:一是对分布式计算框架运行机制的理解程度,二是实际写SQL和处理数据的能力。这两块占了总分的一半以上,复习时务必优先投入。

1.2 从背概念到考理解的转变

我印象很深的一道真题是:“Spark的RDD和DataFrame有什么区别?”如果只回答“一个是弹性分布式数据集,一个是带Schema的分布式表”,基本只能拿一半分。出题人想听到的是:二者在底层存储方式、类型安全、执行计划优化、序列化开销上的差异,以及在实际项目中什么场景下选哪个更合适。

这就是近两年笔试最明显的变化——考点还是那些考点,但提问方式从“是什么”变成“为什么这么设计”“什么时候用哪个”“出现了问题怎么排查”。所以单纯背八股文已经不够了,每个知识点都要能往下追问两层。

2. Hadoop核心机制笔试题:读写流程与小文件治理

2.1 HDFS读写流程的完整链路

HDFS读写流程是选择题和简答题的双料高频点。读流程的关键得分点有:客户端先向NameNode发起请求,NameNode返回数据块所在的DataNode列表,客户端直接与DataNode建立流式读取连接,数据按块传输并做校验。很多人在这一步容易漏掉细节——块所在的DataNode列表是按网络拓扑排序返回的,目的是优先读取同机架的数据,减少跨机架流量。

写流程更容易丢分。完整链路是:客户端向NameNode申请上传,NameNode检查权限和配额后返回可写入的DataNode节点列表;客户端将数据分块写入第一个DataNode,第一个DataNode再复制到第二个,第二个再复制到第三个,形成管道复制;每写一个块,DataNode会向NameNode上报块信息。整个链路里最容易丢分的一个细节是:客户端写入的并不是等所有副本都写完才算成功,而是采用“最小副本数成功即返回”的语义,配合后续的异步复制或副本修复来保证最终一致。把这个点讲出来,面试官会觉得你是真跑过集群的人。

2.2 小文件问题:人人会背、少人能讲透

HDFS小文件问题基本是必考题,答题时很多人的表述停留在“小文件太多会占满NameNode内存”,这种答案可以拿基础分,但拿不到高分。完整的分析应该拆成四层:

  • NameNode层面:每个文件、目录和块都要在内存里维护元数据,一个块大约占150字节左右的元数据开销,百万级小文件就能吃掉GB级内存。
  • MapReduce/Spark层面:小文件会导致InputSplit数量激增,每个Split启动一个Task,Task调度开销比计算开销还大。
  • 数据读取层面:小文件破坏了顺序读的连续性,随机IO次数大增。
  • 下游链路层面:小文件从HDFS同步到Hive、Kafka或数仓其他层时,会产生大量网络连接和写入请求,拖慢整个同步任务。

解决思路也要分阶段答:源头控制(写入时用Hive的merge合并或Spark的coalesce/repartition控制输出文件数)、周期合并(定时任务对小文件目录做合并)、存储层面转换(比如将小文件存成ORC/Parquet格式再合并,因为列式格式本身有较好的压缩和谓词下推能力)。

2.3 NameNode与SecondaryNameNode的关系辨析

这道题出镜率极高,因为它特别能区分“看过文档”和“真懂原理”的人。很多人的答案写“SecondaryNameNode是NameNode的备份”,这个说法是错的。SecondaryNameNode并不是热备节点,它只是定期拉取NameNode的EditLog和FsImage,合并成新的FsImage再返回给NameNode,作用是帮NameNode分担合并压力的“辅助工”,一旦NameNode宕机它并不能直接顶上。

顺带提一句,真正的高可用方案是部署两个NameNode组成Active/Standby,通过共享存储或JournalNode同步元数据变更日志。笔试中如果题目问“如何保证NameNode高可用”,要把FailoverController、ZKFC、JournalNode这几个组件的关系写清楚,并且说明Active节点宕机后Standby节点如何通过JournalNode补齐日志并切换状态。

3. Spark高频题:从算子原理到数据倾斜调优

3.1 RDD的五大属性与Lineage容错机制

Spark原理题中,RDD的五大属性是基础中的基础:分区列表、计算函数、依赖关系、分区器(仅对Key-Value类型)、首选位置。答题时不要干巴巴列点,而要说明每个属性存在的意义。比如首选位置是为了让计算尽量在数据所在节点执行,减少网络传输;依赖关系既决定了Stage划分,又是容错恢复的基础。

Lineage容错也是高频考点。要答出:RDD通过血缘关系记录父RDD到子RDD的转换链,当某个分区数据丢失时,可以根据血缘重新计算该分区。这里有个值得展开的点——宽依赖的容错代价远高于窄依赖,因为窄依赖只需重算父RDD的对应分区,而宽依赖可能导致多个父分区参与计算,所以实际工程里常用检查点(Checkpoint)来切断过长的血缘链。

3.2 宽依赖与窄依赖:Stage划分的判断依据

关于宽窄依赖的选择题通常长这样:“以下哪个算子是宽依赖?groupByKey、map、filter还是union?”答案是groupByKey,因为需要将相同Key的数据分发到同一分区,产生Shuffle。窄依赖则指父RDD的每个分区最多被一个子RDD分区使用,比如map、filter、union。

更进阶的考法是:给你一段执行计划,要求判断划分成了几个Stage。方法是顺着RDD依赖链从后往前看,遇到宽依赖就切一刀。值得注意的是,窄依赖的算子之间可以放在同一个Stage里做流水线执行,这也是Spark比MapReduce快的一个关键原因——减少Shuffle和中间结果落盘。把这两件事关联起来答,得分会高不少。

3.3 数据倾斜:现象、定位与解决方案

数据倾斜是笔试和面试都绕不开的压轴题。最典型的题目是:“某Spark任务一直跑得很慢,最后发现大部分Task很快结束,只有一两个Task卡了很久,你怎么排查?”

完整答题思路分四步:

  • 定位:通过Spark UI查看每个Stage的Task耗时和Shuffle读写量,确认是否存在少数Task处理的数据量远大于中位数的情况。
  • 找因:确认倾斜发生在哪个算子,常见原因有groupBy的Key分布不均、join时关联键大量为空、distinct后的热点Key、两表join时小表Key重复率高。
  • 解决:常规手段包括加随机前缀并二次聚合(对聚合类倾斜)、将大表热点Key与小表拆开处理再union(对join类倾斜)、过滤空值或单独处理空值Key、广播小表避免Shuffle、调整spark.sql.shuffle.partitions增大分区数分散压力。
  • 验证:改完参数后观察前后两个Stage的Task耗时曲线,确认长尾消失,同时对比整任务耗时。

这道题的高分关键不在于罗列方案,而在于体现排查顺序和对方案适用条件的判断。比如加随机前缀只适合聚合场景,不适合join场景,因为join还需要还原原始Key。把每个方案的适用边界说清楚,比背十个方案都管用。

4. Hive和数据仓库必考题:SQL基本功与权限设计

4.1 窗口函数:笔试SQL题的半壁江山

一道Hive SQL题里,如果出现“每个用户最近一笔订单”“各部门薪资排名”“连续登录天数”这类需求,几乎必用窗口函数。高频窗口函数主要有:ROW_NUMBER()、RANK()、DENSE_RANK()、SUM() OVER()、LAG()/LEAD()、FIRST_VALUE()/LAST_VALUE()。

连续登录天数的题目值得单独练——它把窗口函数和日期函数结合得比较深。思路是:先用ROW_NUMBER()按用户分组、登录日期排序,然后用登录日期减去排序号得到分组标记,日期与序号之差相同的记录属于同一连续区间,再按用户和分组标记聚合计数。笔试里出现这道题时,很多人卡在“怎么把连续区间切出来”这一步,实际上只要理解“日期减行号”这个技巧,整个问题就迎刃而解。

4.2 分区与分桶:原理层面的辨析题

Hive分区和分桶的区别也是一道常青题。分区是按业务维度(如日期、省份)把数据切分到不同目录,查询时通过分区裁剪减少扫描量;分桶则是按某个字段的哈希值将数据散列到固定个数的桶文件中,适合抽样查询和Map端Join优化。

容易被忽略的知识点是:分区字段是虚拟列,数据文件中并没有这个字段;而分桶字段必须是真实的普通字段。另外分桶在写入时需要设置分桶数和排序规则,如果数据量不大或查询不涉及桶字段,分桶的收益并不明显。这种“什么场景下收益有限”的边界感,恰恰是阅卷人乐于看到的深度。

4.3 行级与列级权限:数据安全设计题的热门方向

近两年,数据安全类题目越来越多,最典型的一道是:“请设计一个方案,实现同一张表中不同角色只能看到特定行和特定列。”这就是常说的行/列权限设计。

列权限相对简单,通常在查询引擎层做拦截,通过视图或SQL改写实现。比如给低权限角色创建一张只包含部分字段的视图,或使用Ranger/Atlas这类组件在Hive层配置列级别的访问策略。

行权限要复杂一些,核心是数据过滤条件的注入。常见实现方案有几种:

  • 视图方案:为每个权限角色创建带WHERE条件的视图,比如只展示部门ID等于当前用户所属部门的数据。优点是实现简单,缺点是视图过多时管理成本高。
  • SQL改写方案:在统一查询入口拦截SQL,解析后自动追加数据权限过滤条件。优点是应用透明,缺点是SQL解析存在复杂度和性能开销。
  • 标签/元数据方案:给数据行打上权限标签,查询时通过标签匹配用户属性。适合跨部门、跨项目的细粒度控制。

如果笔试题目追问“开源方案怎么选”,可以回答:粗粒度场景用Hive本身的授权机制配合视图;细粒度场景用Apache Ranger,它对HDFS、Hive、HBase都提供了统一的行列级策略控制;如果还需要列级脱敏,Ranger也可以配置Masking策略。把“选型依据”说清楚,而不是只写一个工具名,才是这类题的得分点。

5. 集群部署与资源调优题:策略与参数怎么答

5.1 集群部署策略:从单机到分布式的演进

“给一个从零开始的集群部署方案”算是场景题里的大题了。常见问法有两种:一种是“10台机器怎么规划角色”,另一种是“从单机到集群需要做哪些调整”。

先回答角色规划。中小规模集群(10到20台)的典型部署方式是:3台机器部署NameNode、ResourceManager等Master角色(其中NameNode做Active/Standby HA),剩余机器部署DataNode和NodeManager。如果要跑Hive,还需要单独或复用节点部署MetaStore和HiveServer2;如果要跑实时任务,再加Kafka和Flink集群。角色的关键在于不要让Master角色的负载过重,NameNode和ResourceManager放在同一台机器上时,要注意内存分配,避免互相争抢堆空间。

再回答演进路径。单机伪分布部署(Local模式)只能用于学习和验证;真正上生产前要做三件事:开启NameNode HA、配置资源调度器多队列、调整存储和计算的磁盘布局。很多笔试失分点在“从单机到集群,配置要改什么”这个具体问题上,比如core-site.xml中的默认副本数要从1改成3,这是一个特别明显但经常被忽略的点。

5.2 内存与并行度参数:一句话暴露实战水平

集群参数调整类题目,最能区分背文档和干过活的人。拿Spark Executor内存来说,一个常见问法是:“Executor内存设多大合适?堆内和堆外怎么分?”

标准的大致思路是:先看集群单个节点物理内存和CPU核数,再估算每个Executor需要跑几个Task、每个Task处理多少数据。经验值一般是Executor内存取8G到16G之间,核数取3到5个,避免单个Executor占用过多核导致JVM GC时间上升。堆内内存里要预留20%到30%给RDD存储和Shuffle缓冲,堆外内存(spark.memory.offHeap)用于网络缓冲和本地操作,默认较小,不必过分调大。

Hive/Spark SQL侧的高频参数还包括:spark.sql.shuffle.partitions默认200,数据量大时通常要调大,数据量小的时候调小反而更快,因为Shuffle文件太多会产生大量随机IO;spark.sql.adaptive.enabled开启自适应查询执行后,Spark可以动态合并Shuffle分区,这个参数在笔试里越来越常出现,建议主动提一句。

6. 项目场景题的高分答法:以网约车数仓项目为例

6.1 题目常见问法与回答结构

项目类笔试一般给出一段业务描述,比如“某网约车平台每天产生大量订单和轨迹数据,请基于Hive/Spark设计离线数仓,完成数据清洗、指标分析和可视化展示”。

这类题的答题结构建议按数仓分层来展开:ODS层存放原始日志(订单表、司机表、乘客表、轨迹表),DWD层做清洗和标准化(去重、补全、格式统一),DWS层做主题汇总(按城市、时段、司机维度聚合成宽表),ADS层面向报表输出核心指标(订单量、完单率、平均应答时长、高峰时段运力)。每层都点出存储格式和分区策略,比如ODS层用Parquet格式按日期分区保存原始数据,DWS层按城市和日期双分区。

在分层设计的基础上再补充数据质量方案,比如清洗规则里包含空值处理、经纬度越界剔除、同一订单重复上报去重,从笔试角度这些点都已经踩到得分区了。

6.2 清洗环节的考点:从Spark算子到脏数据处理

网约车项目里,基于Spark的数据清洗是一个独立考点。常见脏数据包括:订单状态缺失、上车点经纬度超出城市范围、司机ID与订单ID关联不上、行程时长负值、同一订单重复记录。

用Spark实现清洗,答题时建议按步骤写清楚算子链:用filter过滤异常值,用dropDuplicates按订单ID去重,用withColumn补全或转换字段格式,用join关联订单表和轨迹表并选择inner或left_outer。注意到的一个高频隐藏考点是:join时如果轨迹表过大,需要考虑数据倾斜,此时可以按订单日期分桶后再join,减少Shuffle压力。

如果题目要求写出Scala或PySpark代码,核心代码块只要体现关键逻辑就可以拿大半分,不必追求完整工程代码。写清楚处理前后的数据量对比,反而更像真实项目里的做法。

6.3 可视化环节的考点:指标口径比图表更重要

关于Flask和ECharts做数据可视化,笔试通常不会考代码细节,而会问“你会展示哪些指标,为什么”。这其实是查指标口径的把关能力。

推荐答案是:先用指标体系分层——全局概览指标(日订单量、GMV、日活司机数)、运营分析指标(完单率、应答率、平均应答时长)、运力调度指标(高峰满载率、区域运力缺口、热力图)。每类指标想清楚业务含义,比炫酷图表重要得多。如果题目追问“某个指标两天之间下降了10%,如何排查”,可以回答从数据质量、业务活动、技术故障三个方向定位,这种回答即便在笔试里也能体现数据思维。

ECharts选型题里,需要根据数据特点选择合适的图表类型:趋势用折线图、地域分布用地图/散点图、司机时段热度用热力图、城市排行用柱状图。把指标和图表类型的匹配逻辑说清楚,比罗列画了几个图更让人印象深。

7. 笔试题里那些容易失分的细节坑

7.1 读题与踩分点:先想清楚再动笔

复盘过不少答卷,发现一个共性问题:很多人在SQL题和场景设计题上不是不会做,而是没读懂题目就往上写。

比如题目说“统计每个用户最近30天的平均消费金额”,有人直接把所有消费记录都算进去,忽略了“最近30天”这个窗口;又如“计算连续3天活跃的用户”,有人没处理用户一天内多次活跃的情况,导致重复计数。我的建议是动笔前先花两分钟把题目拆成三个问题:输入是什么、输出是什么、边界条件是什么。输出列名、排序方式、去重要求往往写在题干最不起眼的地方,却是判分的关键。

7.2 答题格式与阅卷人视角

大数据笔试的阅卷节奏通常很快,一份有清晰结构的答案比一堆口水话更占便宜。一个实用的技巧是:简答题采用“总-分”结构,先一句话给出结论,再分点补充细节。比如数据倾斜题,先写“先通过Spark UI定位长尾任务,再判断倾斜类型,最后选择对应方案”,然后逐点展开。这样即使后面的细节有口误,阅卷人也能从首句就看到完整答题框架。

另外要小心选择题的“绝对化表述”。选项里出现“一定”“必然”“所有”这种词时,大概率是错误选项;出现“可能”“可以按需”“主要用于”这类词时,通常是正确选项。这是出题人惯用的干扰方式,知道这个规律后,遇到不确定的选择题至少能排除一半选项。

7.3 备考顺序与时间分配建议

结合近两年的出题频率,我给一个相对稳妥的备考优先级:SQL窗口函数练习排第一,因为SQL题几乎是笔试必出且最容易拿分;Spark核心原理排第二,尤其是宽窄依赖、数据倾斜、内存管理;Hadoop/HDFS基础排在第三,重点是读写流程、小文件、NameNode HA;Hive数仓理论和权限设计排第四。Kafka和Flink虽然也考,但出现的频率和分值占比明显低于前四类,时间有限时可以放在后面。

刷题时不要只刷笔试题,可以配合真实数据处理练习。把一份真实的日志数据用Spark清洗一遍、统计出指标、再写几个窗口函数,比背一百道题都有效。题是做不完的,但对数据的感觉是练出来的。

回到我自己带人和评卷的体会:笔试真正筛掉的,往往不是技术最差的人,而是“没有梳理清楚自己知识体系”的人。大多数考点都在公开文档和源码里写得很明白,差别在于能不能把它们串成一个闭环。如果你时间紧张,优先把本文提到的几个模块练熟;如果还有余力,就把每个知识点都追问自己两个“为什么”,这比多刷十道题更能建立竞争优势。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询