一文详解Spark与MapReduce的区别【面试高频问题】

一句话说明两个计算框架之间的根本差异:Spark多个作业之间的数据通信是基于内存的,而Hadoop是基于磁盘的

参考答案如下:

  1. MapReduce需要将计算的中间结果写入磁盘,然后还要读取磁盘,从而导致了频繁的磁盘IO;而Spark不需要将计算的中间结果写入磁盘,这得益于Spark的RDD弹性分布式数据集和DAG有向无环图,中间结果能够以RDD的形式存放在内存中,这样大大减少了磁盘IO。
  2. MapReduce是多进程模型,每个task会运行在一个独立的JVM进程中,每次启动都需要重新申请资源,消耗了大量的时间;而Spark是多线程模型,每个executor会单独运行在一个JVM进程中,每个task则是运行在executor中的一个线程。
  3. 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、美团、字节、快手、京东等大厂的面经合集

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务