0


Spark概述

1.什么是Spark

    Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎 。现在形成一个高速发展应用广泛的生态系统。

   Spark 主要有三个特点 :

首先,高级 API 剥离了对集群本身的关注,Spark 应用开发者可以专注于应用所要做的计算本身。

其次,Spark 很快,支持交互式计算和复杂算法。

最后,Spark 是一个通用引擎,可用它来完成各种各样的运算,包括 SQL 查询、文本处理、机器学习等.

2.Spark与Hadoop MapReduce的对比

   在有迭代计算的领域,Spark 的计算速度远远超过 MapReduce,并且迭代次数越多,Spark 的优势越明显。这是因为 Spark 很好地利用了目前服务器内存越来越大这一优点,通过减少磁盘 I/O 来达到性能提升。

   Spark在简单的Map及Reduce操作之外,还支持 SQL 查询、流式查询及复杂查询,比如开箱即用的机器学习算法。同时,用户可以在同一个工作流中无缝地搭配这些能力,应用十分灵活。Spark 核心部分的代码为 63 个 Scala 文件,非常的轻量级。并且允许 Java、Scala、Python 开发者在自己熟悉的语言环境下进行工作,通过建立在 Java、Scala、Python、SQL(应对交互式查询)的标准 API 以方便各行各业使用,同时还包括大量开箱即用的机器学习库。它自带 80 多个高等级操作符,允许在 Shell中进行交互式查询。

   Spark 可以独立运行,除了可以运行在当下的 YARN 集群管理外,还可以读取已有的任何 Hadoop 数据。它可以运行在任何 Hadoop 数据源上,比如 HBase、HDFS 等。有了这个特性,让那些想从 Hadoop 应用迁移到 Spark 上的用户方便了很多。     

   MapReduce 更 加 适 合 处 理 离 线 数 据( 当 然, 在 YARN 之 后,Hadoop 也可以借助其他工具进行流式计算)。Spark 很好地支持实时的流计算,依赖Spark Streaming 对数据进行实时处理。Spark Streaming 具备功能强大的 API,允许用户快速开发流应用程序。而且不像其他的流解决方案,比如 Storm,Spark Streaming 无须额外的代码和配置,就可以做大量的恢复和交付工作。

3.什么是结构化数据,什么是非结构化数据

结构化数据,可以从名称中看出,是高度组织和整齐格式化的数据。它是可以放入表格和电子表格中的数据类型。它可能不是人们最容易找到的数据类型,但与非结构化数据相比,无疑是两者中人们更容易使用的数据类型。另一方面,计算机可以轻松地搜索它。结构化数据也被成为定量数据,是能够用数据或统一的结构加以表示的信息,如数字、符号。在项目中,保存和管理这些的数据一般为关系数据库,当使用结构化查询语言或SQL时,计算机程序很容易搜索这些术语。结构化数据具有的明确的关系使得这些数据运用起来十分方便,不过在商业上的可挖掘价值方面就比较差。

非结构化数据库是指其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成的数据库,用它不仅可以处理结构化数据(如数字、符号等信息)而且更适合处理非结构化数据(全文文本、图像、声音、影视、超媒体等信息)。

4.Spark作业运行流程

1.Standalone运作模式

standalone指的是单节点模式,并不是单机模式YARN运作模式

(1)当spark集群启动以后,worker节点会有一个心跳机制和master保持通信;

(2)SparkContext连接到master以后会向master申请资源,而master会根据worker心跳来分配worker的资源,并启动worker的executor进程;

(3)SparkContext将程序代码解析成dag结构,并提交给DagScheduler;

(4)dag会在DagScheduler中分解成很多stage,每个stage包含着多个task;

(5)stage会被提交给TaskScheduler,而TaskScheduler会将task分配到worker,提交给executor进程,executor进程会创建线程池去执行task,并且向SparkContext报告执行情况,直到task完成;

(6)所有task完成以后,SparkContext向Master注销并释放资源;

2.YARN运作模式

(1)YARN模式又分为YARN-Client(客户端模式),YARN-Cluster(集群模式)两种模式

(2)YARN-Client(客户端模式)

值得注意的是,在SparkContext启动过程中,初始化DAGShedular调度器, 初始化YarnScheduler和YarnClientShedularBackend,和启动DriverEndpoint和Client过程,都是在客户端Client过程中进行的。

在spark-submit 脚本提交应用程序可以通过参数列表中--master yarn-client 设置为Yarn-Client模式, YARN-Client模式中,Driver在客户端本地运行,这种模式可以使得Spark Application和客户端进行交互, 因为Driver在客户端本地运行, 使得Spark Application 和 客户端进行交互, 可以通过WebUI访问Driver的状态。

(3)YARN-Cluster(集群模式)

在YARN-Cluster运行模式中,当用户向YARN中提交的一个应用程序后,YARN将分为两个阶段运行在该应用程序,第一个阶段是把Spark的Driver作为一个Application Master在YARN集群中先启动,第二个阶段是由Application Master创建应用程序,然后为它向Resource Manager申请资源,并启动Executor运行任务急,监控运行过程。

在YARN-Cluster运行模式下,客户端只负责提交应用程序,这个过程包括启动Application Master命令,提交给Application Mater的程序和需要在Executor中运行的程序等。而关于SparkContext的初始化则是由ResourceManager在收到Client的请求后,在集群中选择一个NodeManager,为该应用程序分配Container,启动Application Master,其中Application Master对SparkContext进行初始化,这是YARN两种运行模式下最直观的区别。而在YARN-Client运行模式下,ResourceManager虽然在收到请求后也会在集群中选择一个NodeManager,并分配Container,并在这个Container中启动Application Master,但是这个Application Master并不运行Spark Context,只是与其建立联系,进行资源的分配。

(4)ARN-Client 与 YARN-Cluster对比

理解YARN-Client和YARN-Cluster的区别, 主要要了解Application Master, 在YARN中,每个Application 实例都有一个Application Master进程, 它是Application启动的第一个容器。它负责和Resource Manager打交道并请求资源,获取资源之后告诉NodeManager 为其启动Container. 所以YARN-Cluster 和 YARN-Client的区别其实就是Application Master进程的区别。

YARN-Client 模式:Application Master仅仅向YARN请求Executor, Client会和请求的Container的通信来调度它们工作,Client是不能离开的。

YARN-Cluster模式:Driver 运行在Application Master中, 它负责向YARN申请资源,并监督作业的运行情况, 当用户提交了作业之后,就可以关于关闭Client,作业会继续在YARN上运行, 因而YARN-cluster模式不适合进行交互式类型的作业。

5.RDD

(1) RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD是spark core的底层核心

(2)RDD的特点:
弹性
容错的弹性:数据丢失可以自动恢复;
存储的弹性:内存与磁盘的自动切换;
计算的弹性:计算出错重试机制;
分片的弹性:可根据需要重新分片。
分布式:数据存储在集群不同节点上/计算分布式。
数据集: RDD封装了计算逻辑,并不保存数据。
数据抽象: RDD是一个抽象类,需要子类具体实现。
不可变: RDD封装了计算逻辑,是不可以改变的,想要改变,只能产生新的RDD,在新的RDD里面封装计算逻辑。
可分区、并行计算。

6.Spark核心原理

(1)任务划分和调度:Spark将作业划分为多个任务,并将这些任务分配给集群中的不同节点进行执行。Spark使用任务调度器来管理任务的执行,以实现并行计算。

(2)Stage:Stage以RDD宽依赖(也就是shuffle)为界,shuffle前后的RDD属于不同的Stage,Stage的数量等于shuffle操作的数量+1

(3)Task:一个Stage包含一个或者多个Task,一个Stage包含的Task的数量等于这个Stage最后一个RDD的partition的数量。Task中包含了这个计算任务的计算逻辑以及数据位置等信息,Task是Executor执行任务的最小单位


本文转载自: https://blog.csdn.net/2301_78216223/article/details/136451773
版权归原作者 2301_78216223 所有, 如有侵权,请联系我们删除。

“Spark概述”的评论:

还没有评论