Spark基础及架构

为什么使用Spark

(1)MapReduce编程模型的局限性

  • 1、繁杂
    只有Map和Reduce两个操作,复杂的逻辑需要大量的样板代码
  • 2、处理效率低:
    Map中间结果写磁盘,Reduce写HDFS,多个Map通过HDFS交换数据
    任务调度与启动开销大
  • 3、不适合迭代处理、交互式处理和流式处理

(2)Spark是类Hadoop MapReduce的通用并行框架

  • 1、Job中间输出结果可以保存在内存,不再需要读写HDFS
  • 2、比MapReduce平均快10倍以上

Spark优势

  • 1、速度快
    基于内存数据处理,比MR快100个数量级以上(逻辑回归算法测试)
    基于硬盘数据处理,比MR快10个数量级以上
  • 2、易用性
    支持Java、Scala、Python、R语言
    交互式shell方便开发测试
  • 3、通用性
    一栈式解决方案:批处理、交互式查询、实时流处理、图计算及机器学习
  • 4、随处运行
    YARN、Mesos、EC2、Kubernetes、Standalone、Local

Spark技术栈

  • 1、Spark Core
    核心组件,分布式计算引擎
  • 2、Spark SQL
    高性能的基于Hadoop的SQL解决方案
  • 3、Spark Streaming
    可以实现高吞吐量、具备容错机制的准实时流处理系统
  • 4、Spark GraphX
    分布式图处理框架
  • 5、Spark MLlib
    构建在Spark上的分布式机器学习库
    在这里插入图片描述

Spark架构设计

运行架构
1、在驱动程序中,通过SparkContext主导应用的执行
2、SparkContext可以连接不同类型的Cluster Manager(Standalone、YARN、Mesos),连接后,获得集群节点上的Executor
3、一个Worker节点默认一个Executor,可通过SPARK_WORKER_INSTANCES调整
4、每个应用获取自己的Executor
5、每个Task处理一个RDD分区
在这里插入图片描述

Spark架构核心组件

在这里插入图片描述

Spark API

  • 1、创建SparkContext
    a)连接Driver与Spark Cluster(Workers)
    b)Spark的主入口
    c)每个JVM仅能有一个活跃的SparkContext
    d)SparkContext.getOrCreate

在这里插入图片描述

  • 2、创建SparkSession
    a)Spark 2.0+应用程序的主入口:包含了SparkContext、SQLContext、HiveContext以及StreamingContext
    b)SparkSession.getOrCreate
    在这里插入图片描述