共计 1621 个字符,预计需要花费 5 分钟才能阅读完成。
锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题 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 更小一点。