首页 > 其他 > 详细

大数据面试(spark)

时间:2020-04-26 19:51:31      阅读:54      评论:0      收藏:0      [点我收藏+]

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 Application的运行环境(启动SparkContext),SparkContext向资源管理器(可以是Standalone、Mesos或YARN)注册并申请运行Executor资源;

(2)资源管理器分配Executor资源并启动StandaloneExecutorBackend,Executor运行情况将随着心跳发送到资源管理器上;

(3)SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给Task Scheduler。Executor向SparkContext申请Task

(4)Task Scheduler将Task发放给Executor运行同时SparkContext将应用程序代码发放给Executor。

(5)Task在Executor上运行,运行完毕释放所有资源。

大数据面试(spark)

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!