共计 1707 个字符,预计需要花费 5 分钟才能阅读完成。
锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题 app、小程序现已上线,官网地址:https://www.demosoftware.cn。已收录了每日更新的面试题的所有内容,还蕴含特色的解锁屏幕温习面试题、每日编程题目邮件推送等性能。让你在面试中后人一步! 接下来的是今日的面试题:
1.rdd 有几种操作类型?
1)transformation,rdd 由一种转为另一种 rdd
2)action
3)cronroller,crontroller 是管制算子,cache,persist,对性能和效率的有很好的反对
三种类型,不要答复只有 2 种操作
2.collect 性能是什么,其底层是怎么实现的?
答:driver 通过 collect 把集群中各个节点的内容收集过去汇总成后果,collect 返回后果是 Array 类型的,collect 把各个节点上的数据抓过去,抓过去数据是 Array 型,collect 对 Array 抓过去的后果进行合并,合并后 Array 中只有一个元素,是 tuple 类型(KV 类型的)的。
3.Spark 程序执行,有时候默认为什么会产生很多 task,怎么批改默认 task 执行个数?
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 程序设置失效
4. 为什么 Spark Application 在没有取得足够的资源,job 就开始执行了,可能会导致什么问题产生?
答:会导致执行该 job 时候集群资源有余,导致执行 job 完结也没有调配足够的资源,调配了局部 Executor,该 job 就开始执行 task,应该是 task 的调度线程和 Executor 资源申请是异步的;如果想期待申请完所有的资源再执行 job 的须要将 spark.scheduler.maxRegisteredResourcesWaitingTime 设置的很大;
spark.scheduler.minRegisteredResourcesRatio 设置为 1,然而应该结合实际思考否则很容易呈现长时间调配不到资源,job 始终不能运行的状况。
5.Spark 为什么要长久化,个别什么场景下要进行 persist 操作?为什么要进行长久化?
spark 所有简单一点的算法都会有 persist 身影,spark 默认数据放在内存,spark 很多内容都是放在内存的,非常适合高速迭代,1000 个步骤
只有第一个输出数据,两头不产生长期数据,但分布式系统危险很高,所以容易出错,就要容错,rdd 出错或者分片能够依据血统算进去,如果没有对父 rdd 进行 persist 或者 cache 的化,就须要重头做。以下场景会应用 persist
1)某个步骤计算十分耗时,须要进行 persist 长久化
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,框架默认将数据长久化到磁盘,这个是框架主动做的。