大数据工程师面试题 - Spark 基础调优(一)
原则一:避免创建重复的RDD
通常来说,我们在开发一个Spark作业时,首先是基于某个数据源(比如Hive表或HDFS文件)创建一个初始的RDD;接着对这个RDD执行某个算子操作,然后得到下一个RDD;以此类推,循环往复,直到计算出最终我们需要的结果。在这个过程中,多个RDD会通过不同的算子操作(比如map、reduce等)串起来,这个“RDD串”,就是RDD lineage,也就是“RDD的血缘关系链”。
我们在开发过程中要注意:对于同一份数据,只应该创建一个RDD,不能创建多个RDD来代表同一份数据。
一个简单的例子:
错误的做法:
val rdd1 = sc.textFile("hdfs://192.168.0.1:9000/hello.txt") rdd1.map(...) val rdd2 = sc.textFile("hdfs://192.168.0.1:9000/hello.txt") rdd2.reduce(...)
正确的用法:
val rdd1 = sc.textFile("hdfs://192.168.0.1:9000/hello.txt") rdd1.map(...) rdd1.reduce(...)
原则二:尽可能复用同一个RDD
除了要避免在开发过程中对一份完全相同的数据创建多个RDD之外,在对不同的数据执行算子操作时还要尽可能地复用一个RDD。一个简单的例子:错误的做法:
JavaPairRDD<Long, String> rdd1 = ... JavaRDD<String> rdd2 = rdd1.map(...) rdd1.reduceByKey(...) rdd2.map(...)
正确的做法:
JavaPairRDD<Long, String> rdd1 = ... rdd1.reduceByKey(...) rdd1.map(tuple._2...)
大家好,我是大数据欧老师,就职于互联网某头部大厂,超过 8 年的大数据从业经历。如果你有面试大数据工程师的打算,欢迎找我聊一聊!
#大数据##大数据工程师##大数据知识体系##大数据面试##大数据面经#大数据欧老师 - 面试真题分享 文章被收录于专栏
解决职场真实面试问题,分享同学真实成功案例,欢迎订阅关注!