Spark面试常见问题

根据个人面试经历总结:

 

1、简单说一下hadoop和spark的shuffle相同和差异?

联系:

 Apache Spark 的 Shuffle 过程与 Apache Hadoop 的 Shuffle 过程有着诸多类似,一些概念可直接套用,例如,Shuffle 过程中,提供数据的一端,被称作 Map 端,Map 端每个生成数据的任务称为 Mapper,对应的,接收数据的一端,被称作 Reduce 端,Reduce 端每个拉取数据的任务称为 Reducer,Shuffle 过程本质上都是将 Map 端获得的数据使用分区器进行划分,并将数据发送给对应的 Reducer 的过程。

主要的区别:

一个落盘,一个不落盘,spark就是为了解决mr落盘导致效率低下的问题而产生的,原理还是mr的原理,只是shuffle放在内存中计算了,所以效率提高很多。


2、Spark有哪些算子,列举几个你熟悉的?

转换(transformation)算子 :常见的有map 、flatMap、filter、groupByKey、reduceByKey、union

flatMap与map区别在于map为“映射”,而flatMap“先映射,后扁平化”,map对每一次(func)都产生一个元素,返回一个对象,而flatMap多一步就是将所有对象合并为一个对象

行动(action)算子:reduce、collect、count、foreach

3、groupByKey与reduceByKey的区别

reduceByKey将结果发送给reducer之前在本地进行merge,这样数据量会大幅度减小,从而减小传输,保证reduce端能够更快的进行结果计算。所以reduceByKey更适合作用在较大的数据集上


4、spark中的RDD是什么,有哪些特性?
RDD弹性分布式数据集、分区记录集合;特性有:只读、分布式、弹性、基于内存

5、谈谈spark中的宽窄依赖? spark rdd 如何区分宽依赖和窄依赖?

6、spark中的数据倾斜的现象、原因、后果?


7、如何解决spark中的数据倾斜问题?

 1.首先从源头选择可以split的数据源,从源头避免倾斜

  2.shuffle过程中,增加并行度,减少shuffle 在map-side进行数据合并,避免reduce fetch数据倾斜

  3.sample采样将倾斜的数据,特殊处理,这个方法可以适用于所有的数据倾斜问题

通过sample采样,得到倾斜的key,然后进行特殊处理,将倾斜的key通过加盐的方式,增大并行处理,之后将结果再合并,进而减少单个task的压力

  4.另外,就是我们尽量使用spark-sql,spark-sql里面优化器提供很多基本CRO和CBO的优化策略,不仅帮我们从源头帮我们去除无关的数据减少计算数据量,其次在计算过程中会根据我们的table 的数据量,自动帮我们计算合适task partition数量,和选择合适join策略,从而提升计算性能,也避免shuffle 数据倾斜

8、spark on yarn中executor如何管理内存分配?

Spark的Excutor的Container内存有两大部分组成:堆外内存和Excutor内存。
其中
堆外内存
由spark.yarn.executor.memoryOverhead参数设置。  主要用于JVM自身的开销。默认:MAX(executorMemory*0.10,384MB)
这里384 的含义为,JVM自身开销,最小的需求是384MB
Excutor内存
由spark.executor.memory参数设置,分为两部分。
Execution:shuffle、排序、聚合等用于计算的内存
Storage:用于集群中缓冲和传播内部数据的内存(cache、广播变量)

具体见这篇文章https://blog.csdn.net/zhuiqiuuuu/article/details/86539385
9、Spark driver的功能是什么?

driver驱动器

一个Spark作业运行时包括一个Driver进程,也是作业的主进程,具有main函数,并且有SparkContext的实例,是程序的人口点;

功能:负责向集群申请资源,向master注册信息,负责了作业的调度,负责作业的解析、生成Stage并调度Task到Executor(执行器)上。包括DAGScheduler,TaskScheduler。

 10、repartition与coalesce的作用于区别

coalesce(numPartitions,shuffle=false)

repartition(numPartitions)   //repartition 其实是 coalesce 中参数shuffle = true 的情况

 coalesce用于减小分区,repartition用于增大分区

11、spark on yarn client模式于cluster模式区别

 当在YARN上运行Spark作业,每个Spark executor作为一个YARN容器(container)运行。Spark可以使得多个Tasks在同一个容器(container)里面运行。

从广义上讲yarn-cluster适用于生产环境;而yarn-client适用于交互和调试,也就是希望快速地看到application的输出。

从深层次的含义讲,yarn-cluster和yarn-client模式的区别其实就是Application Master进程的区别,yarn-cluster模式下,driver运行在AM(Application Master)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行。然而yarn-cluster模式不适合运行交互类型的作业。而yarn-client模式下,Application Master仅仅向YARN请求executor,client会和请求的container通信来调度他们工作,也就是说Client不能离

 

posted @ 2020-03-16 20:43  再见傅里叶  阅读(1171)  评论(1编辑  收藏  举报