大数据相关面试题每日五问(二)

  1. 常见的窗口排序函数你知道哪些?说一下他们各自作用。
  2. HDFS如何保证数据的可靠性和高可用性?它的副本机制是如何工作的?
  3. ES是如何保证数据高可用性的?如果一个节点宕机,系统会如何处理?
  4. Hive表里的分桶有哪几种形式,分桶与分区的区别?什么时候要去做分桶?
  5. 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 joinbroadcast join 替代大表 shuffle;对于 缓存策略,使用 persistcache 缓存重用的中间结果,减少重复计算;最后,优化 代码逻辑,如避免冗余转换、过滤尽量提前、少用宽依赖操作等,提升 DAG 执行效率。调优过程中还要结合 Spark UI 分析瓶颈,定位 Stage 执行慢的具体原因,做到有的放矢。

#牛客AI配图神器#

#数据人的面试交流地#
大数据相关面试题合集 文章被收录于专栏

努力找实习中,整理一些大数据相关面试题和大家分享,共同学习进步,有建议或批评欢迎留言!

全部评论

相关推荐

06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-30 11:32
点赞 评论 收藏
分享
评论
2
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务