Spaek程序执⾏,有时候默认为什么会产⽣很多task,怎么修改默认task执⾏个数?
解析:
www.aboutyun.com/thread-24246-1-1.html 14/57
2019/4/24 spark相关的⾯试题跟答案,带着问题学习效果更佳哟。?)-⾯试区-about云开发
答:1)因为输⼊数据有很多task,尤其是有很多⼩⽂件的时候,有多少个输⼊
block就会有多少个task启动;2)spark中有partition的概念,每个partition都会对应⼀个task,task越多,在处理⼤规模数据的时候,就会越有效率。不过task并
不是越多越好,如果平时测试,或者数据量没有那么⼤,则没有必要task数量太多。3)参数可以通过spark_home/conf/spark-default.conf配置⽂件设置:
spark.sql.shuffle.partitions 50 spark.default.parallelism 10
第⼀个是针对spark sql的task数量
第⼆个是⾮spark sql程序设置⽣效
为什么Spark Application在没有获得⾜够的资源,job就开始执⾏了,可能会导致什么什么问题发⽣?
解析:
答:会导致执⾏该job时候集群资源不⾜,导致执⾏job结束也没有分配⾜够的资源,分配了部分Executor,该job就开始执⾏task,应该是task的调度线程和
Executor资源申请是异步的;如果想等待申请完所有的资源再执⾏job的:需要将spark.scheduler.maxRegisteredResourcesWaitingTime设置的很⼤;
spark.scheduler.minRegisteredResourcesRatio 设置为1,但是应该结合实际考虑
否则很容易出现⻓时间分配不到资源,job⼀直不能运⾏的情况。
解析:
map:对RDD每个元素转换,⽂件中的每⼀⾏数据返回⼀个数组对象
flatMap:对RDD每个元素转换,然后再扁平化
将所有的对象合并为⼀个对象,⽂件中的所有⾏数据仅返回⼀个数组
对象,会抛弃值为null的值
解析:
collect,reduce,take,count,saveAsTextFile等
Spark为什么要持久化,⼀般什么场景下要进⾏persist操作?
解析:
为什么要进⾏持久化?
spark所有复杂⼀点的算法都会有persist⾝影,spark默认数据放在内存,spark很多内容都是放在内存的,⾮常适合⾼速迭代,1000个步骤
只有第⼀个输⼊数据,中间不产⽣临时数据,但分布式系统⻛险很⾼,所以容易出错,就要容错,rdd出错或者分⽚可以根据⾎统算出来,如果没有对⽗rdd进⾏
persist 或者cache的化,就需要重头做。
以下场景会使⽤persist
1)某个步骤计算⾮常耗时,需要进⾏persist持久化
www.aboutyun.com/thread-24246-1-1.html 15/57
2019/4/24 spark相关的⾯试题跟答案,带着问题学习效果更佳哟。?)-⾯试区-about云开发
2)计算链条⾮常⻓,重新恢复要算很多步骤,很好使,persist
3)checkpoint所在的rdd要持久化persist,
lazy级别,框架发现有checnkpoint,checkpoint时单独触发⼀个job,需要重算⼀遍,checkpoint前
要持久化,写个rdd.cache或者rdd.persist,将结果保存起来,再写checkpoint操作,这样执⾏起来会⾮常快,不需要重新计算rdd链条了。checkpoint之前⼀定会
进⾏persist。
4)shuffle之后为什么要persist,shuffle要进性⽹络传输,⻛险很⼤,数据丢失重来,恢复代价很⼤
5)shuffle之前进⾏persist,框架默认将数据持久化到磁盘,这个是框架⾃动做的。