[Spark]Chap1 Spark的设计与运行原理

文章目录

  • Chap1 Spark的设计与运行原理
    • 1.1 Spark简介
      • 1.1.1 Spark有如下特点:
      • 1.1.2 相对Hadoop,Spark具有以下优势:
      • 1.1.3 Spark生态系统
    • 1.2 Spark运行架构
      • 1.2.1 基本概念
      • 1.2.2 架构设计

Chap1 Spark的设计与运行原理

1.1 Spark简介

  • 2009年于美国加州贝克利大学开发
  • 基于内存的大数据并行计算框架,用于构建大型 低延迟数据分析应用
  • 2014年可使用Hadoop1/10资源,用1/3时间完成排序任务

1.1.1 Spark有如下特点:

  • 运行速度快:使用DAG(Directed Acyclic Graph)引擎结合循环数据流和内存计算,以提高速度。
  • 容易使用:支持Scala,Java,Python,R
  • 通用性强:提供完成强大的技术栈,包括包括SQL查询、流式计算、机器学习和图算法组件,不用东拼西凑去计算

1.1.2 相对Hadoop,Spark具有以下优势:

  • 表达能力强。Hadoop只有Map和Reduce两个方法,并不适用于所有情况。
  • 基于内存计算避免了高延迟和大IO开销
  • 高效API接口

1.1.3 Spark生态系统

实际应用中,大数据处理主要包括以下3个类型:

延时级别 内容 解决方案
H级别 复杂的批量数据处理 Hadoop
MIN级别 基于历史数据的交互式查询 Impala
MS/S级别 基于实时数据流的数据处理 Storm

但是还面临着如下的问题:

  • 不同场景数据共享问题
  • 不同软件维护问题
  • 集群中资源分配问题

Spark的统一平台解决了这个问题。Spark由以下组件组成:

  • Spark Core:包含Spark的基本功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等。Spark建立在统一的抽象RDD之上,使其可以以基本一致的方式应对不同的大数据处理场景;通常所说的Apache Spark,就是指Spark Core;
  • Spark SQL:允许开发人员直接处理RDD,同时也可查询Hive、HBase等外部数据源。Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员可以轻松地使用SQL命令进行查询,并进行更复杂的数据分析;
  • Spark Streaming:支持高吞吐量、可容错处理的实时流数据处理,其核心思路是将流式计算分解成一系列短小的批处理作业。Spark Streaming支持多种数据输入源,如Kafka、Flume和TCP套接字等;
  • MLlib(机器学习):提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只要具备一定的理论知识就能进行机器学习的工作;
  • GraphX(图计算):是Spark中用于图计算的API,可认为是Pregel在Spark上的重写及优化,Graphx性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。

1.2 Spark运行架构

1.2.1 基本概念

  • RDD:是弹性分布式数据集(Resilient Distributed Dataset)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型;
  • 有向无环图(Directed Acyclic Graph,DAG):反映RDD之间的依赖关系;
  • Executor:是运行在工作节点(Worker Node)上的一个进程,负责运行任务,并为应用程序存储数据;
  • 应用:用户编写的Spark应用程序;
  • 任务:运行在Executor上的工作单元;
  • 作业:一个作业包含多个RDD及作用于相应RDD上的各种操作;
  • 阶段:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者也被称为“任务集”。

1.2.2 架构设计

下面介绍Spark的运行架构

  • Driver Program:每个Spark应用都由一个驱动器程序(Driver Program)法其集群上的各种操作。驱动器程序中包含应用的main函数,并定义了集群上的分布式数据集。
  • Spark Contest:使用Spark Context访问Spark,代表着对计算集群的链接。
  • Executor:执行这些操作需要多个执行器节点。执行器在集群中的节点上,使用多线程来执行Driver Program传来的任务。同时使用BlockManager模块进行缓存以提高效率。

[Spark]Chap1 Spark的设计与运行原理_第1张图片
下面简单介绍一下Spark概念间的关系
    在Spark中,一个应用(Application)由一个任务控制节点(Driver)和若干个作业(Job)构成,一个作业由多个阶段(Stage)构成,一个阶段由多个任务(Task)组成。当执行一个应用时,任务控制节点会向集群管理器(Cluster Manager)申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行任务,运行结束后,执行结果会返回给任务控制节点,或者写到HDFS或者其他数据库中。

[Spark]Chap1 Spark的设计与运行原理_第2张图片

内容整理自子雨大数据之Spark入门教程(Python版)

你可能感兴趣的:(Spark)