大数据面试(spark)

spark

1.scala闭包?

闭包其实是一个函数,函数的返回值依赖于声明在函数外部变量。

2.scala伴生对象?

在同一个scala源文件中,class与object有同样的名字。

object称为伴生对象,class称为伴生类。它们之间可以相互访问private属性。

3.scala伴生对象apply方法?

在伴生对象中定义apply方法,直接用对象名object就可以调用apply方法,也可以实现构造伴生类的功能。

4.scala中var与val?

var可以多次赋值

5.scala柯里化?

将原来接受两个参数的函数变成接受一个参数的函数过程。

新函数返回一个原来以第二个参数作为参数的函数。

6.scala隐式转化?

在object定义隐式转换方法前加implicit def,在用到隐式转化地方用import引入类.方法,自动调用转化后的方法。

7.scala匹配模式?

match  {  case1  case2  }

8.scala与java区别?

1)申明变量不同。

2)返回值,scala不用return。

3)通配符,scala_ ,java*。

4)接口,scala为trait继承使用extends,多继承使用with。java为interface继承使用implements多继承用逗号。

9.spark集群运行模式?

1)单节点运行。

2)集群模式。

3)运行在yarn上面。

10.spark中reducebykey与groupbykey区别?

1)都可以进行聚合操作,reducebykey更快适合大数据集。

11.spark中的宽依赖和窄依赖?

宽依赖:一个父RDD分区对应多个子RDD分区。

窄依赖:一个父RDD分区对一个子RDD分区,多个父RDD分区对一个子RDD分区。

12.spark shuffle与hadoop shuffle区别?

1)spark处理任务输出结果放入内存中。hadoop处理任务结果放入磁盘中,需要大量IO操作。

2)hadoop中MR在groupby前对分区key排序。

13.spark产生数据倾斜的原因以及解决方法?

1)计算数据时数据的分散度不够,导致大量的数据集中到集群一台或几台机器上,而集群其它节点空闲会导致整个计算过程慢。

     数据倾斜只会发生在shuffle过程中。

2)解决办法?

     2.1)提高shuffle操作的并行度。增加shuffle read task的数量,可以让原本分配给一个task的多个key分配给多个task,从而让每个task处理比原来更少的数据。

     2.2)使用随机key进行双重聚合。将原本相同的key通过附加随机前缀的方式,变成多个不同的key,就可以让原本被一个task处理的数据分散到多个task上去做局部聚合,进而解                 决单个task处理数据量过多的问题。接着去除掉随机前缀,再次进行全局聚合,就可以得到最终的结果

     2.3)过滤少数导致倾斜的key。判断少数几个数据量特别多的key对计算结果不是特别重要,那么可以直接过滤掉那少数的几个key。

14.spark shuffle过程?

当rdd依赖中出现宽依赖的时候就会触发shuffle操作,Shuffle 过程本质上都是将 Map 端获得的数据使用分区器进行划分,并将数据发送给对应的 Reducer 的过程。

Shuffle描述着数据从map task输出到reduce task输入的这段过程。shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。因为在分布式情况下,reduce task需要跨节点去拉取其它节点上的map task结果。这一过程将会产生网络资源消耗和内存,磁盘IO的消耗。通常shuffle分为两部分:Map阶段的数据准备和Reduce阶段的数据拷贝处理。一般将在map端的Shuffle称之为Shuffle Write,在Reduce端的Shuffle称之为Shuffle Read.

https://www.cnblogs.com/itboys/p/9226479.html

15.spark 物理执行流程?

1.先把spark程序提交给driver,driver负责运行spark程序的main方法,运行完后生成逻辑执行图,然后把逻辑执行图调用Action。

2.DAGScheduler会生成stage并划分成不同阶段,每个阶段对应一个TaskSet。

3.DAGScheduler请求TaskScheduler调度TaskSet,TaskScheduler会询问集群有多少资源,资源返回给TaskScheduler。

4.TaskScheduler把stage调度到executor中执行taskSet,得到结果再发送给driver。

原文地址:https://www.cnblogs.com/chong-zuo3322/p/12781603.html