大数据相关面试题每日五问(二)
- 常见的窗口排序函数你知道哪些?说一下他们各自作用。
- HDFS如何保证数据的可靠性和高可用性?它的副本机制是如何工作的?
- ES是如何保证数据高可用性的?如果一个节点宕机,系统会如何处理?
- Hive表里的分桶有哪几种形式,分桶与分区的区别?什么时候要去做分桶?
- Spark调优思路?
常见的窗口排序函数你知道哪些?说一下他们各自作用。
常见的窗口排序函数主要包括 ROW_NUMBER()、RANK()、DENSE_RANK()、NTILE() 等,它们常配合窗口函数 OVER(PARTITION BY ... ORDER BY ...)
使用,作用是对分组内的数据进行排序和排名。ROW_NUMBER() 是最常用的,给每一行按顺序分配唯一的序号,不会出现重复;RANK() 会对相同值的记录赋相同名次,跳过后续名次(比如并列第 2,下一名是第 4);DENSE_RANK() 同样对相同值的记录赋相同名次,但不会跳过名次(并列第 2,下一名是第 3);NTILE(n) 是把分组内的记录按顺序平均分成 n 份,为每行分配一个从 1 到 n 的桶编号。它们常用于如 TopN 查询、分组内排序、分位分析等场景,能在保留全部数据的同时进行灵活排名。
HDFS如何保证数据的可靠性和高可用性?它的副本机制是如何工作的?
HDFS 通过副本机制来保证数据的可靠性和高可用性,每个文件被切分成多个块(Block),每个块默认会在集群中存储 3 个副本,分别保存在不同的 DataNode 上,从而避免因单点故障导致数据丢失。当某个副本所在的节点宕机或数据损坏时,NameNode 会感知并在其他健康节点上重新复制该副本,自动修复数据,确保副本数维持在配置值以上;同时,HDFS 的 NameNode 虽然是管理元数据的核心,但通过配置 主备 NameNode(HA 高可用架构),结合 Zookeeper 实现故障自动切换,避免了单点故障风险。整体上,HDFS 通过副本冗余、故障感知、自愈机制和主备架构,保障了系统的稳定性与数据安全。
ES是如何保证数据高可用性的?如果一个节点宕机,系统会如何处理?
Elasticsearch 通过主分片和副本分片机制来实现数据的高可用性。每个索引的数据会被划分为多个主分片(primary shard),并为每个主分片配置一个或多个副本分片(replica shard),这些分片分布在不同的节点上。当一个节点宕机时,集群中的 Master 节点会立即检测到,并将其上的主分片的副本分片提升为新的主分片,继续对外提供读写服务,同时将缺失的副本在其他节点上重新分配和恢复,确保数据不丢失、服务不中断。此外,Elasticsearch 的分布式架构可以自动进行分片重分配、数据均衡和故障转移,从而实现系统的自我修复和持续可用。
Hive表里的分桶有哪几种形式,分桶与分区的区别?什么时候要去做分桶?
Hive 中的分桶是通过对某一列进行哈希计算,再将数据平均分配到固定数量的桶中,常见形式是在建表时使用 CLUSTERED BY (列名) INTO N BUCKETS
来定义分桶。分桶和分区的主要区别在于:分区是将数据按目录层级物理划分,适用于大范围数据的筛选,提升查询效率;而分桶是在分区或全表内部的进一步划分,提高了数据的分布均匀性和采样、Join 的效率。通常在以下场景下需要使用分桶:一是当需要对大表做 桶映射 Join(bucket map join),提升 Join 性能;二是在使用 抽样查询(tablesample) 时保证样本均匀性;三是为了优化数据倾斜问题或提升并行度。简而言之,分区适用于大粒度的数据划分,分桶适用于细粒度的数据优化。
Spark调优思路?
Spark 调优的整体思路可以从 资源配置、并行度控制、Shuffle 优化、缓存策略和代码逻辑 五个方面入手。首先是资源配置,要合理设置 executor
的数量、内存(executor-memory
)和 CPU 核数(executor-cores
),避免资源浪费或不足;其次是并行度控制,通过设置 spark.sql.shuffle.partitions
或 RDD 的 repartition
来调整任务并行度,防止过多或过少的分区导致性能问题;在 Shuffle 优化 方面,要尽量减少 shuffle 操作,比如用 map-side join
或 broadcast join
替代大表 shuffle;对于 缓存策略,使用 persist
或 cache
缓存重用的中间结果,减少重复计算;最后,优化 代码逻辑,如避免冗余转换、过滤尽量提前、少用宽依赖操作等,提升 DAG 执行效率。调优过程中还要结合 Spark UI 分析瓶颈,定位 Stage 执行慢的具体原因,做到有的放矢。
#数据人的面试交流地#
努力找实习中,整理一些大数据相关面试题和大家分享,共同学习进步,有建议或批评欢迎留言!