一文详解Spark与MapReduce的区别【面试高频问题】
一句话说明两个计算框架之间的根本差异:Spark多个作业之间的数据通信是基于内存的,而Hadoop是基于磁盘的

参考答案如下:
- MapReduce需要将计算的中间结果写入磁盘,然后还要读取磁盘,从而导致了频繁的磁盘IO;而Spark不需要将计算的中间结果写入磁盘,这得益于Spark的RDD弹性分布式数据集和DAG有向无环图,中间结果能够以RDD的形式存放在内存中,这样大大减少了磁盘IO。
- MapReduce是多进程模型,每个task会运行在一个独立的JVM进程中,每次启动都需要重新申请资源,消耗了大量的时间;而Spark是多线程模型,每个executor会单独运行在一个JVM进程中,每个task则是运行在executor中的一个线程。
- MapReduce在shuffle时需要花费大量时间排序,而spark在shuffle时如果选择基于hash的计算引擎,是不需要排序的,这样就会节省大量时间。
补充题:你是否熟悉Spark实现wordcount官方案例的代码?
一定要能够默写以下代码!!!
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object SparkWordCount {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local").setAppName("WordCount")
val sc = new SparkContext(sparkConf)
try {
val lines: RDD[String] = sc.textFile("datas/*")
val words: RDD[String] = lines.flatMap(_.split(" "))
val wordsMap: RDD[(String, Int)] = words.map(word => (word, 1))
val wordsReduce: RDD[(String, Int)] = wordsMap.reduceByKey(_ + _)
val res: Array[(String, Int)] = wordsReduce.collect()
res.foreach {
case (word, count) =>
println(s"$word: $count")
}
} finally {
sc.stop()
}
}
}
#数据人的面试交流地#大数据开发面试笔记 文章被收录于专栏
包括大数据篇、计算机语言篇、计算机基础篇、算法刷题篇、面试经验篇等五大篇章: 大数据篇包括框架原理、源码解析、调优技巧、大数据场景题、项目实战、数仓理论等模块;计算机语言篇包括Java、Linux、大厂常考SQL面试题等模块;计算机基础篇包括计算机网络、操作系统、数据库、数据结构等模块;算法刷题篇包括大厂高频算法题、刷题速成计划等模块 面试经验篇包括BAT、美团、字节、快手、京东等大厂的面经合集
查看2道真题和解析