大数据面试题以及知识点总结(不断更新)

对经常出现的面试题进行整理并根据自己以及对网上资料的整理

目录

kafka如果创建大量的topic,对kafak会有什么影响?

谈谈你对spark Shuffle的理解? 描述一下大表与大表join时的Shuffle机制或者过程?

spark内存管理

hive分区表中,单值分区和范围分区的区别

数仓采用了什么模型?为什么?

spark任务切分,怎么判断有没有执行shuffle

拉链表出错怎么办

建模的流程

空值key加随机数是一种数据倾斜解决方案,如果有单个key是热点值呢?又如果有多个key是热点值呢?用参数和代码分别怎么解决?

行存和和列存的区别?

拉链表有什么缺点?拉链表有哪些字段必须要有的?

数据和业务是怎么协作的?比如说数据对业务做一些反馈和支持?

Map端的环形缓冲区为什么设置成环形的

spark job提交流程

你们团队使用的是Spark3,那么Spark3相比spark2做的区别是什么?

数据仓库在数据处理过程出现小文件问题怎么解决

kafka优化?

orc,rc,parquet列式存储有什么区别,底层存储的内存是否是连续的?

Spark 任务是如何执行的,有哪些执行策略?

如何衡量 Spark 程序的性能,有哪些优化方法可以提高 Spark 程序的性能

Spark 中如何处理异常,如何避免程序中的各种故障?

如何优化 Spark 中的 I/O 操作,以便提高程序的效率?

Spark 中的 RDD 和 Dataframe 有什么区别,它们分别适用于哪些场景?


kafka如果创建大量的topic,对kafak会有什么影响?

Kafka可以支持创建大量的topic,但是如果创建了过多的topic,会对Kafka集群的性能和稳定性产生影响。主要表现在以下几个方面:

    1. 内存占用:每个topic都需要占用一定的内存空间,如果创建了过多的topic,会导致内存占用过高,从而影响Kafka的性能。

2. 磁盘空间:每个topic都需要占用一定的磁盘空间,如果创建了过多的topic,会导致磁盘空间不足,从而影响Kafka的稳定性。

3. 元数据管理:Kafka需要维护每个topic的元数据信息,如果创建了过多的topic,会导致元数据管理变得复杂,从而影响Kafka的性能和稳定性。

因此,在创建topic时,需要根据实际需求进行规划和设计,避免创建过多的topic。同时,建议使用合适的分区数和副本数来提高Kafka的性能和可靠性。

谈谈你对spark Shuffle的理解? 描述一下大表与大表join时的Shuffle机制或者过程?

Spark Shuffle是指在Spark中进行数据重分区的过程。在Spark中,Shuffle是一种非常耗费资源的操作,因为它需要将数据从各个节点上收集起来,然后进行重分区操作,最后再将数据发送回各个节点上进行计算。 在大表与大表join时,Spark会将两个表的数据按照join条件进行分区,然后将相同分区的数据发送到同一台机器上进行join操作,这个过程就是Shuffle。具体的过程如下:

  1. 首先,Spark会将两个表按照join条件进行分区,每个分区内的数据都是相同的。
  2. 接着,Spark会将相同分区的数据发送到同一台机器上进行join操作。如果两个表的分区数量不同,那么Spark会将少的一方进行重分区,使得两个表的分区数量相同。
  3. 在进行join操作时,Spark会将相同key的数据放到同一个组中,然后对每个组进行join操作。这个过程需要进行大量的数据传输和计算,因此非常耗费资源。
  4. 最后,Spark会将join的结果进行合并,并将结果发送回各个节点上。

总之,Spark Shuffle是一种非常耗费资源的操作,因此在进行大表join时,需要尽可能地减少Shuffle的次数和数据量,以提高计算效率。

spark内存管理

Spark 的内存管理主要分为两部分:JVM 堆内存管理和 Spark 内存管理。

  1. JVM 堆内存管理 :
    1. JVM 堆内存管理主要是由 Java 虚拟机来完成的,它包括了新生代和老年代两个部分。
    2. 在 Spark 中,JVM 堆内存主要用来存储 Java 对象和运行时数据结构,如线程栈、方法区等。
  2. Spark 内存管理:
    1. Spark 内存管理主要是由 Spark 自己来完成的,它包括了堆内存和堆外内存两个部分。
    2. 堆内存:Spark 内存管理器会将 JVM 堆内存划分为多个不同的内存池,如存储内存池(storage memory pool)、执行内存池(execution memory pool)等。其中,存储内存池主要用来存储缓存数据和持久化数据,而执行内存池主要用来存储计算过程中的中间结果和数据结构。
    3. 堆外内存:Spark 内存管理器还可以使用堆外内存来存储一些大对象,如序列化后的数据、广播变量等。堆外内存的好处是可以减少 GC 的频率,提高程序的性能。

在 Spark 中,内存管理器会根据任务的需求来动态地分配和释放内存,以保证程序的运行效率和稳定性。同时,内存管理器还会根据内存使用情况来触发 GC 操作,以及根据内存使用率来控制任务的并发度,以避免内存溢出和性能下降的问题。 需要注意的是,Spark 内存管理器的默认配置并不一定适合所有的应用场景,因此在实际使用中,需要根据任务的需求来调整内存管理器的配置,以获得更好的性能和稳定性。

hive分区表中,单值分区和范围分区的区别

在Hive中,分区表是指将数据按照一定规则分成多个部分存储的表。分区表可以提高查询效率,减少数据扫描量,提高查询性能。在分区表中,单值分区和范围分区是两种常见的分区方式。

        单值分区:

        单值分区是指按照某个字段的值进行分区,每个分区只包含该字段值相同的数据。例如,按照年份对订单表进行分区,每个分区只包含该年份的订单数据。单值分区的优点是查询效率高,缺点是分区数量较多,容易导致元数据过大。

        范围分区:

        范围分区是指按照某个字段的值范围进行分区,每个分区包含该字段值在一定范围内的数据。例如,按照价格区间对商品表进行分区,每个分区包含价格在该区间内的商品数据。范围分区的优点是分区数量较少,元数据较小,缺点是查询效率相对较低。

总之,单值分区适用于分区字段值离散的场景,范围分区适用于分区字段值连续的场景。在实际使用中,需要根据数据特点和查询需求来选择合适的分区方式。

数仓采用了什么模型?为什么?

这里直接讨论三个模型的优缺点,自行讨论

在数据仓库设计中,有多种不同的数据模型可供选择。常见的数据模型有星型模型、雪花模型、多维模型等,它们各有优缺点,适用于不同的场景。

星型模型:

星型模型是最常见的数据仓库模型之一,它将事实表和维度表之间建立起了一对多的关系,事实表是中心表,维度表围绕着事实表建立。星型模型的优点是结构简单,易于理解和维护,查询性能高,适用于数据量较小、查询频繁的场景。缺点是不够灵活,难以应对复杂的查询需求。

雪花模型:

雪花模型在星型模型的基础上,将维度表进一步拆分成多个维度表,形成了多级维度结构。雪花模型的优点是能够更好地处理复杂的查询需求,适用于数据量较大、查询复杂的场景。缺点是结构复杂,维护成本高,查询性能相对较低。

多维模型:

多维模型是一种基于OLAP(联机分析处理)的数据仓库模型,它将数据以多维度的形式进行组织和存储。多维模型的优点是能够更好地支持复杂的多维分析和数据挖掘,适用于数据量较大、查询复杂的场景。缺点是结构复杂,建模和维护成本高,查询性能相对较低。

总之,不同的数据仓库模型各有优缺点,需要根据业务需求和数据特点来选择合适的模型。在实际应用中,通常会根据具体情况采用不同的模型进行组合和优化,以达到最佳的性能和效果。

spark任务切分,怎么判断有没有执行shuffle

Spark任务的切分和判断是否执行shuffle是Spark调度和执行过程中的两个重要环节。

  1. Spark任务的切分:

Spark任务的切分是指将一个大的任务拆分成多个小任务,以便并行执行。Spark的任务切分是基于RDD(弹性分布式数据集)的,每个RDD都可以被切分成多个分区,每个分区可以在不同的节点上并行执行。Spark的任务切分过程中,会根据RDD的依赖关系进行划分,将DAG(有向无环图)上的节点划分为不同的阶段(stage),每个阶段包含一组可以并行执行的任务。Spark会根据数据的分布情况和集群资源的状况,动态地决定每个阶段的任务切分和调度方式,以达到最优的性能和效率。

      2. 判断是否执行shuffle:

Spark中的shuffle是指将数据按照某个字段进行重新分区和排序的过程。由于shuffle需要进行网络传输和磁盘读写等操作,因此会带来较大的性能开销。因此,需要尽量避免不必要的shuffle操作,以提高任务执行效率。在Spark任务中,可以通过以下几种方式来判断是否执行shuffle操作:

  • 操作类型:一些操作(如map、filter、union等)不会导致shuffle,而一些操作(如groupByKey、reduceByKey、join等)会导致shuffle。
  • 是否调用了shuffle操作:通过查看代码中是否调用了shuffle操作,可以判断是否会执行shuffle。
  • 数据分区:如果数据已经按照某个字段进
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值