当前位置:网站首页 > R语言数据分析 > 正文

spark 面试题(spark面试题面试题)



1  问题分析

本题主要是想考察面试者对基础知识的掌握程度。

2  核心答案讲解

RDD是 弹式分布数据集,是Spark的基本数据结构,它是一个的对象集合,每个数据集被划分为,其可以在集群的不同节点上计算

特性:

(1)RDD是由一系列的partition组成的

(2)RDD之间具有依赖关系

(3)RDD作用在partition上

(4)Partition作用在具有(k,v)格式的数据集

(5)Parition对外提供最佳计算位置,利于数据本地化的处理

3 问题扩展

(1)RDD实际上不存储数据(partition其实也不存储数据)

(2)什么是K,V格式的RDD?

如果RDD里面存储的数据都是二元组对象,那么这个RDD我们就叫做K,V格式的RDD。

(3)哪里体现RDD的弹性(容错)?

Parttion数量,可多可少,体现了RDD的弹性。

RDD之间具有依赖关系,可以基于上一个RDD重新计算出RDD。

(4)哪里体现RDD的分布式?

RDD由Partition组成,partition是分布在不同节点上的

4  结合项目中使用

清楚掌握RDD特性,便于后期代码开发使用。

1     问题分析

本题主要考察的是面试者对于大数据Spark阶段的原理的掌握,考察对Spark整体架构的实现。

2    核心答案讲解

有多种机制,如Spark的容错机制、Shuffle机制等,都是属于Spark的核心机制。分布式数据集的容错性有两种方式:数据检查点和记录数据的更新

对大规模数据来说,数据检查点操作成本很高。Spark通常选择记录更新的方式,即记录单个块上执行的单个操作,然后将创建RDD的一系列变换序列(每个RDD都包含了它是如何由其他RDD变换过来的,以及如何重建某一块数据的信息。因此RDD的容错机制又称“血统(Lineage)”容错)记录下来,以便恢复丢失的分区。

Spark 容错机制:(又称“血统(Lineage)),DD之间的算子操作会形成DAG图,RDD之间的依赖关系会形成Lineage。要理解Lineage机制,首先要明确两种依赖的概念:

父分区可以被多个子分区所用 ,即多对多的关系。

父分区最多被一个子分区所用 ,即一对一或者多对一的关系。

当出现某个节点计算错误的时候,会顺着RDD的操作顺序往回走。一旦是Narrow Dependencies错误,则重新计算父RDD分区即可,因为其不依赖其他节点 ;而如果Shuffle Dependencies错误,重算代价较高,因为一旦重新计算其依赖的父RDD分区,会造成冗余计算。这时候就需要人为的添加检查点,来提高容错机制的执行效率。

3    问题扩展

什么情况下需要加CheckPoint?

DAG中的Lineage过长,如果重算开销太大。故在特定几个Shuffle Dependencies上做CheckPoint是有价值的。Checkpoint会产生磁盘开销,因为它就是将数据持久化到磁盘中,所以做检查点的RDD最好是已经在内存中缓存了。

在整个工作机制中,不仅仅有容错机制的存在,还有Shuffle机制、I/O机制、调度机制等。

4   结合项目中使用

在我们去执行Spark程序的时候,当有成千的计算需要去执行的时候,适当的使用CheckPoint机制,会很大程度提升我们的效率。

1   问题分析

通常在向 Spark传递函数时,比如使用 map() 函数或者用 filter() 传条件时,可以使用驱动器程序中定义的变量,但集群中运行的每个任务都会得到这些变量的一份新副本,更新这些副本的值不会影响驱动器中的对应变量。

如果我们想实现所有分片处理时更新共享变量的功能,那累加器可以实现我们想要的效果。

向所有工作节点发送一个较大的只读值,以供一个或多个Spark操作使用。

比如,如果你的应用需要向所有节点发送一个较大的只读查询表,甚至是机器学习算法中的一个很大的特征向量,广播变量用起来都很顺手, 在多个并行操作中使用同一个变量,但 Spark会为每个任务分别发送。

2    核心答案讲解

在默认情况下,当Spark在集群的多个不同节点的多个任务上并行运行一个函数时,它会把函数中涉及到的每个变量,在每个任务上都生成一个副本。但,有时候需要在多个任务之间共享变量,或者在任务(Task)和任务控制节点(Driver Program)之间共享变量。

为了满足这种需求,Spark提供了两种类型的变量:

累加器,支持在所有不同节点之间进行累加计算(比如计数或者求和)只写变量

广播变量,用来把变量在所有节点的内存之间进行共享,在每个机器上缓存一个只读的变量,而不是为机器上的每个任务都生成一个副本。

3  问题扩展

自定义累加器的实现过程?

4    结合项目中使用


到此这篇spark 面试题(spark面试题面试题)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • druid怎么读(fluid怎么读)2025-01-26 10:45:08
  • termux启动kali(termux启动kali桌面)2025-01-26 10:45:08
  • airpods自动断开连接怎么办(为什么airpods会自动断开连接 又自动连接)2025-01-26 10:45:08
  • swagger2使用教程(swagger2配置)2025-01-26 10:45:08
  • entrants翻译(Entrants翻译成英语)2025-01-26 10:45:08
  • redis-cli连接(redis-cli连接多个redis)2025-01-26 10:45:08
  • resnet一作(resnet top1)2025-01-26 10:45:08
  • hipstamatic官网(hip store)2025-01-26 10:45:08
  • docker 启动权限(docker 用户权限)2025-01-26 10:45:08
  • gridview自适应宽度(gridview自动调整列宽)2025-01-26 10:45:08
  • 全屏图片