锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题app、小程序现已上线,官网地址:https://www.demosoftware.cn。已收录了每日更新的面试题的所有内容,还蕴含特色的解锁屏幕温习面试题、每日编程题目邮件推送等性能。让你在面试中后人一步!接下来的是今日的面试题:
1.spark中task有几种类型?
Spark中的Task有2种类型:
1)result task类型,最初一个task;
2)shuffleMapTask类型,除了最初一个task都是此类型;
2.rangePartioner分区器特点?**
rangePartioner尽量保障每个分区中数据量的平均,而且分区与分区之间是有序的,一个分区中的元素必定都是比另一个分区内的元素小或者大;然而分区内的元素是不能保障程序的。简略的说就是将肯定范畴内的数映射到某一个分区内。RangePartitioner作用:将肯定范畴内的数映射到某一个分区内,在实现中,分界的算法尤为重要。算法对应的函数是rangeBounds。
3.手撕代码-如何应用Spark解决TopN问题?**
能够做一个简略的wordcount文件
def wordcount(): Unit ={
val conf = new SparkConf().setAppName("wordcount").setMaster("local[*]")
val sc = new SparkContext(conf)
sc.setLogLevel("ERROR")
val rdd1 = sc.textFile("song.txt")
val sortWord = rdd1.flatMap(_.split(" "))
.map(x => (x,1))
.reduceByKey((v1,v2) => v1 + v2)
.filter(x => x._1 != "")
.sortBy(x => x._2,false,1)
.top(2)
.foreach(println)
sc.stop()}
4.窄依赖父RDD的partition和子RDD的parition是不是都是一对一的关系?**
不肯定,除了一对一的窄依赖,还蕴含一对固定个数的窄依赖(就是对父RDD的依赖的Partition的数量不会随着RDD数量规模的扭转而扭转),比方join操作的每个partiion仅仅和已知的partition进行join,这个join操作是窄依赖,依赖固定数量的父rdd,因为是确定的partition关系。
5.Spark中的shuffle和Hadoop的Shuffle区别和分割剖析?
6.spark.default.parallelism这个参数有什么意义,理论生产中如何设置?**
1)参数用于设置每个stage的默认task数量。这个参数极为重要,如果不设置可能会间接影响你的Spark作业性能;
2)很多人都不会设置这个参数,会使得集群十分低效,你的cpu,内存再多,如果task始终为1,那也是节约,spark官网倡议task个数为CPU的核数*executor的个数的2~3倍。
7.spark.storage.memoryFraction参数的含意,理论生产中如何调优?
1)用于设置RDD长久化数据在Executor内存中能占的比例,默认是0.6,,默认Executor 60%的内存,能够用来保留长久化的RDD数据。依据你抉择的不同的长久化策略,如果内存不够时,可能数据就不会长久化,或者数据会写入磁盘;
2)如果长久化操作比拟多,能够进步spark.storage.memoryFraction参数,使得更多的长久化数据保留在内存中,进步数据的读取性能,如果shuffle的操作比拟多,有很多的数据读写操作到JVM中,那么应该调小一点,节约出更多的内存给JVM,防止过多的JVM gc产生。在web ui中察看如果发现gc工夫很长,能够设置spark.storage.memoryFraction更小一点。