超全的Spark简介

简介: 超全的Spark简介

Spark是什么?

简单的说Apache Spark是一个开源的、强大的分布式查询和处理引擎,它提供MapReduce的灵活性和可扩展性,但速度明显要快上很多;拿数据存储在内存中的时候来说,它比Apache Hadoop 快100倍,访问磁盘时也要快上10倍。


Spark生态系统

image.jpeg

  • Spark Core:Spark Core包含Spark的基本功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等。Spark建立在统一的抽象RDD之上,使其可以以基本一致的方式应对不同的大数据处理场景;通常所说的Apache Spark,就是指Spark Core;


  • Spark SQL:兼容HIVE数据,提供比Hive更快的查询速度(10~100x)的分布式SQL引擎,开发者可以轻松地使用SQL命令进行查询,并进行更复杂的数据分析;


  • Spark Streaming:流式计算分解成一系列小的批处理作业利用spark轻量级低时延的框架来支持流数据处理,目前已经支持Kafka,Flume等;


  • MLilb:提供基于Spark的机器学习算法库,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只要具备一定的理论知识就能进行机器学习的工作;


  • GraphX:提供图形计算框架,与Pregel/GraphLab兼容。


Spark的特点


  • 运行速度快:Spark使用先进的DAG(Directed Acyclic Graph,有向无环图)执行引擎,以支持循环数据流与内存计算,基于内存的执行速度可比Hadoop MapReduce快上百倍,基于磁盘的执行速度也能快十倍;


  • 容易使用:Spark支持使用Scala、Java、Python和R语言进行编程,简洁的API设计有助于用户轻松构建并行程序,并且可以通过Spark Shell进行交互式编程;


  • 通用性:Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件,这些组件可以无缝整合在同一个应用中,足以应对复杂的计算;


  • 运行模式多样:Spark可运行于独立的集群模式中,或者运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、Cassandra、HBase、Hive等多种数据源。


Spark术语


  • Application:基于spark的用户程序,包含了一个driver program 和集群中多个 executor;


  • Driver Program:运行application的main()函数并自动创建SparkContext。通常SparkContext 代表driver program;


  • Executor:为某个Application运行在worker node 上的一个进程。该进程负责运行task并负责将数据存储在内存或者硬盘上,每个application 都有自己独立的 executors;


  • Cluster Mannager:在集群上获得资源的外部服务(spark standalon,mesos,yarm);


  • Worker Node:集群中任何可运行application 代码的节点;


  • RDD:spark 的基本运算单元,通过scala集合转化,读取数据集生成或者由其他RDD经过算子操作得到;


  • Job:可以被拆分成task并行计算的单元,一般为spark action 触发的一次执行作业;


  • Stage:每个job会被拆分成很多组task,每组任务被称为stage,也可称TaskSet,该属于经常在日志中看到;


  • task:被送到executor上执行的工作单元。


Spark执行过程

2.jpeg

SparkContext(SC)

解读Spark执行过程之前,我们需要先了解一下SparkContext是什么。


SparkContext:SparkContext是spark功能的主要入口。其代表与spark集群的连接,能够用来在集群上创建RDD、累加器、广播变量。每个JVM里只能存在一个处于激活状态的SparkContext,在创建新的SparkContext之前必须调用stop()来关闭之前的SparkContext。在SparkContext的初始化过程中,Spark会分别创建DAGScheduler作业和TaskScheduler任务调度两级调度模块。


更直白的可以说SparkContext是Spark的入口,相当于应用程序的main函数。目前在一个JVM进程中可以创建多个SparkContext,但是只能有一个激活状态的。


Spark执行


任何Spark应用程序在执行的时候都会分离主节点上的单个驱动程序(Driver Program)(程序中可以有多个作业),然后将执行进程分配给多个工作节点(Worker Node),驱动进程会确定任务进程的数量和组成,这些任务进程是根据为指定作业生成的图形分配给执行节点的。


Spark详细执行流程


  1. 当一个Spark应用被提交时,首先需要为这个应用构建起基本的运行环境,即由任务控制节点(Driver)创建一个SparkContext,由SparkContext负责和资源管理器(Cluster Manager)的通信以及进行资源的申请、任务的分配和监控等。SparkContext会向资源管理器注册并申请运行Executor的资源;
  2. 资源管理器为Executor分配资源,并启动Executor进程,Executor运行情况将随着“心跳”发送到资源管理器上;
  3. SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAG调度器(DAGScheduler)进行解析,将DAG图分解成多个“阶段”(每个阶段都是一个任务集),并且计算出各个阶段之间的依赖关系,然后把一个个“任务集”提交给底层的任务调度器(TaskScheduler)进行处理;Executor向SparkContext申请任务,任务调度器将任务分发给Executor运行,同时,SparkContext将应用程序代码发放给Executor;
  4. 任务在Executor上运行,把执行结果反馈给任务调度器,然后反馈给DAG调度器,运行完毕后写入数据并释放所有资源。


3.jpg

PySpark是什么?


Apache Spark是用 Scala编程语言 编写的。为了用Spark支持Python,Apache Spark社区发布了一个工具PySpark。使用PySpark,我们也可以使用Python编程语言中的 RDD 。正是由于一个名为 Py4j 的库,他们才能实现这一目标。


目前,70%数据科学家和分析专家都使用Python,能够将Python和Spark相结合,也给该类人群带来了福音。


相关文章
|
7月前
|
SQL 机器学习/深度学习 分布式计算
Spark【基础知识 01】【简介】(部分图片来源于网络)
【2月更文挑战第12天】Spark【基础知识 01】【简介】(部分图片来源于网络)
77 2
|
分布式计算 资源调度 Hadoop
Spark简介
Spark简介
164 0
|
7月前
|
消息中间件 分布式计算 大数据
【大数据技术Hadoop+Spark】Flume、Kafka的简介及安装(图文解释 超详细)
【大数据技术Hadoop+Spark】Flume、Kafka的简介及安装(图文解释 超详细)
352 0
|
2月前
|
存储 缓存 分布式计算
大数据-83 Spark 集群 RDD编程简介 RDD特点 Spark编程模型介绍
大数据-83 Spark 集群 RDD编程简介 RDD特点 Spark编程模型介绍
41 4
|
7月前
|
分布式计算 Spark
Spark【Spark学习大纲】简介+生态+RDD+安装+使用(xmind分享)
【2月更文挑战第14天】Spark【Spark学习大纲】简介+生态+RDD+安装+使用(xmind分享)
89 1
|
7月前
|
机器学习/深度学习 分布式计算 算法
Spark MLlib简介与机器学习流程
Spark MLlib简介与机器学习流程
|
7月前
|
分布式计算 监控 数据处理
实时数据处理概述与Spark Streaming简介
实时数据处理概述与Spark Streaming简介
|
7月前
|
SQL JSON 分布式计算
Spark SQL简介与基本用法
Spark SQL简介与基本用法
|
7月前
|
SQL 分布式计算 数据处理
Apache Spark简介与历史发展
Apache Spark简介与历史发展
|
7月前
|
SQL 分布式计算 数据处理
[AIGC] Apache Spark 简介
[AIGC] Apache Spark 简介