大数据面试之Spark

喜夏-厌秋 提交于 2020-02-28 08:59:55

谈谈对spark的理解

https://www.cnblogs.com/gaoxing/p/4916785.html

Spark的优势

  1. 运行速度快:相对于Hadoop而言,Spark基于内存的运算要快100倍以上,基于硬盘也要快10倍以上。Spark实现了高效的DAG执行引擎,可以节约内存来高效处理数据流。
  2. 简单,易用:Spark支持Java、Python和Scala的API,还有超过80种的高级算法,用户可以快速构建不同的应用。
  3. 通用:一站式的解决方案,Spark可以用于批处理、交互式查询(Spark SQL),实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理可以在同一个应用中无缝使用。
  4. 兼容性:Spark可以方便的与其他开源产品进行融合。如,Spark可以使用Hadoop的YARN和Mesos作为它的资源管理和调度器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。

Spark的工作流程

  1. client提交任务到master
  2. master将任务放入到队列中,获取appid,返回给client
  3. Driver端创建sc实例,等待资源分配
  4. 一旦有了资源,启动executor并反向和driver进行注册
  5. driver端开始运行代码,对到action算子就生成DAG有向无环图
  6. 将生成好的DAG有向无环图提交给DAGScheduler
  7. 从最后一个rdd开始遍历,如果是窄依赖就在当前阶段上RDD+1,如果是宽依赖就在stage上+1
  8. 找到所有的rstage后,遍历所有的stage,根据不同的stage创建不同的task,将这些task组成一个taskSet提交到TaskScheduler中
  9. taskScheduler是一个接口,使用Standalone模式,使用SchedulerBackEnd组件将任务提交到集群
  10. executor是一个线程池,task任务放入线程池中运行,将task任务用taskRunner包装运行

SparkStreaming和kafka对接

   两种方式Receiver和Direct(直连)

Receiver:拉取固定时间间隔的数据(放到Executor内存中),
              使用kafka高级API,
              自动维护偏移量,
              简单,数据达到固定时间才会进行处理,效率低且容易丢失数据

Direct(直连):相对于Executor直接连接到kafka的分区上(内部使用迭代实现),
              使用kafka底层的API,
              需要手动维护偏移量,
              效率高,不会丢失数据

Spark优化

https://my.oschina.net/134596/blog/3037246

Scala版wordcount

object WordCount {
  //本地单机运行
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    conf.setMaster("local")
    conf.setAppName("wc")
    val sc = new SparkContext(conf)
    val rdd1: RDD[String] = sc.textFile("wordcount.txt")
    val rdd2: RDD[String] = rdd1.flatMap(_.split(" "))
    val rdd3: RDD[(String, Int)] = rdd2.map((_,1))
    val rdd5: RDD[(String, Int)] = rdd3.reduceByKey(_+_)
    rdd5.foreach(println)
  }
}

SparkStreaming执行流程

SparkStreaming是将流式计算分解成一系列短小的批处理作业。这里的批处理引擎是Spark,也就是把SparkStreaming的输入数据按照batch size分成一段一段的数据,每一段数据都转换成DStream,然后将SparkStreaming中对DStream的Transforming操作转变为针对Spark中对RDD的Transformation操作,将操作变成中间结果保存在内存中。

Spark on yarn的工作流程

https://blog.csdn.net/weixin_40319752/article/details/81433062

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!