Spark

尝试回到这个spark问题集。

作者:Tim在路上 链接:https://zhuanlan.zhihu.com/p/679253575 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

基础问题

Q: 你知道Spark中的lineage(血缘)吗?它是什么有什么作用和意义呢? A: Dependencies between RDDs in Spark for Fault Tolerance, Optimization.

Q: 你将如何处理 Spark 中的倾斜数据? A: Identify Skewed Keys. Optimized Join Strategies. Broadcast the smaller table if it fits in memory to avoid shuffling Repartitioning: Be cautious about the choice of the partitioning key to avoid creating new skewness..Hash-based repartitioning can help distribute data more evenly. Salting:

Q: 可以说一下Spark 的 DataFrame API 与 RDD 相比的优点和局限性。 A: DataFrame is Higher Abstraction for SQL-like Operations RDD is the Basic Abstraction of Spark:

描述 Spark 中的不同缓存级别以及何时使用每个级别。解释Spark广播变量的目的和好处。Spark 在其执行模型中如何利用内存管理和存储?

描述 Spark 中窄变换和宽变换之间的区别。

Q: 可以说下 Spark 如何处理数据序列化及其重要性。 A: Parquet is primarily a columnar storage format optimized for analytics, while Avro is a binary serialization format designed for compact data exchange between systems. Arrow is in-memory representation and zero-copy sharing.

您有一个内存无法容纳的大型数据集。您将如何优化 Spark 作业来处理这种情况?

您需要对两个大型数据集执行连接操作。您将采用什么策略来优化连接性能?

您正在 Spark 中处理倾斜的数据分区。您将如何处理数据倾斜并确保最佳处理?

您的 Spark 作业完成时间比预期要长。您将采取哪些步骤来识别和解决性能瓶颈?

您需要在 Spark 中高效处理嵌套的 JSON 数据。您将使用什么方法和技术来处理嵌套结构?

您有一个涉及迭代处理的 Spark 作业。您会考虑哪些优化来减少总体执行时间?

您希望在 Spark 中高效地处理和聚合时间序列数据。您将如何设计 Spark 作业来满足此要求?

您有一个需要自定义分区策略的 Spark 作业。您将如何在您的工作中实施和应用这个自定义分区器?

您有一个资源有限的 Spark 集群。您将如何分配资源并配置集群以获得最佳性能?

您想要在 Spark 中实现增量数据处理管道。您将如何设计和实施管道来有效处理增量更新?

可以解释下Sort-Merge Join是如何工作的?

解释一下Spark 广播连接的工作过程,以及满足什么条件下会使用Spark 广播连接。

提交 Spark 查询时逻辑计划是如何工作的?

进阶问题

当我们在Join两侧给出Join hints时会按照什么顺序执行?

在Spark中使用 UDF 的缺点是什么? 可以解释一下Spark中dynamicAllocation配置的工作原理吗? Spark的配置conf在运行时是否可以修改,如果可以哪些可以修改,或者可以改造实现。

如何解决 Spark 中的慢连接问题?

Spark 是基于 JVM 的,Pyspark 是如何工作的?

Spark中的External Shuffle Service是什么?它的优势是什么?为什么在Spark动态资源分配时需要ESS服务?

你了解push-based shuffle吗?为什么push-based shuffle性能会更加稳定,它的优势是?

为什么UnsafeShuffleWriter无法支持无法支持map端的aggregation?

BypassMergeSortShuffleWriter和HashShuffle有什么区别?

既然是Sort-based Shuffle 那么Shuffle后的数据是否是有序的?

Q: 什么是AQE,它主要解决了什么问题,以及在什么阶段执行。 A: 在传统的Spark执行模型中,执行计划是在查询开始时生成的,然后按照固定的计划执行。然而,数据的特性和分布可能在执行期间发生变化。AQE 允许在查询执行的过程中动态地优化和调整执行计划,以适应实际运行时的数据分布和计算情况。

你知道AQE是如何处理数据倾斜的吗?如果倾斜的Task全部都集中到同一个Executor那么AQE还能处理吗?

什么是DPP,它主要解决的哪类问题?

什么是谓词下推,可以举个例子吗?

高阶问题 Sort-based Shuffle, push- based Shuffle 和 Remote Shuffle Service 分别是什么? 那么应用中应该如何选择具体的Shuffle方式?他们的适用范围是什么? Remote Shuffle Service 和 Push-based Shuffle 他们的优劣分别是什么? 如果你要实现一种新的ShuffleManage应该怎么在Spark实现配置?为什么不保留HashShuffleManage, 而是将其作为SortShuffleManager中的一个Writer实现? ShuffleExternalSorter实现是基于JVM的吗?以及其在排序上有什么优化?为什么UnsafeShuffleWriter分区数的最大值为 (1 « 24) ? Spark 3.3 中的Runtime Filter Joins和 DPP (dynamic partition pruning)有什么区别? 我们知道,AQE 依赖的统计信息来源于 Shuffle Map 阶段输出的中间文件。你觉得,在运行时,AQE 还有其他渠道可以获得同样的统计信息吗? SortShuffleWriter 是如何实现的?假如让你实现一个归并排序的算法,如果要求数据全部写到缓存buffer中,如何实现最终的归并排序那么如果数据量太大存在溢写数据,又如何实现归并排序? 你知道Spark的Tungsten吗?可以大致说下。 我们可以在UDF中使用广播变量吗?如何将字典传递给UDF? Spark 中 Executor 内存是如何管理的?Spark 分区与 Hive 分区有什么区别? 能解释一下 Apache Spark 中 RDD 排序的工作原理吗?它与传统的内存排序有什么不同? 什么是Exchange?它代表什么,在什么情况下引入。

Written on January 1, 2024