什么是spark?
spark是一个用来实现快速,通用的集群计算平台,它基于Hadoop的MapReduce分布式框架优化并改进缺陷而形成的。
在速度方面,Spark扩展了广泛使用的MapReduce计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理。在处理大规模数据集事,速度是非常重要的。速度就以为这我们可以进行交互式的数据操作,否则我们每次操作就需要等待数分钟甚至数小时。Spark的一个主要特征就是能够在内存中计算,因而更快。不过即便是必须在磁盘上进行复杂计算,也比MapReduce更加高效。
Spark所提供的接口非常丰富。除了提供基与Python,Java、Scala和SQL的简单易用的API以及内建的丰富程序库以外,spark还能和其他大数据工具密切配合使用。
spark适用于各种各样原先需要多种不同的分布式平台的场景,包括批处理,迭代算法,交互式查询,流处理。通过在一个统一的框架下支持这些不同的计算,spark使我们可以简单而低耗地把各种处理流程整合在一起。
总的来说,Spark使用各种各样原先需要多种不同的分布式平台的场景,包括批处理、迭代算法、交互式查询、流处理。通过在一个统一的框架下支持这些不同的计算,Spark使我们可以简单而低耗地把各种处理流程整合在一起。。而这样的组合,在实际的数据分析过程中很有意义。不仅如此,Spark的这种特性还大大减轻了原先需要对各种平台分别管理的负担。
Spark发展史
Spark 是由一个强大而活跃的开源社区开发和维护的,社区中的开发者们来自许许多多不 同的机构。如果你或者你所在的机构是第一次尝试使用
Spark,也许你会对 Spark 这个项 目的历史感兴趣。Spark 是于 2009 年作为一个研究项目在加州大学伯克利分校 RAD 实验
室(AMPLab 的前身)诞生。实验室中的一些研究人员曾经用过 Hadoop MapReduce。他 们发现 MapReduce
在迭代计算和交互计算的任务上表现得效率低下。因此,Spark 从一开
始就是为交互式查询和迭代算法设计的,同时还支持内存式存储和高效的容错机制。 2009 年,关于 Spark 的研究论文在学术会议上发表,同年
Spark 项目正式诞生。其后不久, 相比于 MapReduce,Spark 在某些任务上已经获得了 10 ~ 20 倍的性能提升。
2011 年,AMPLab 开始基于 Spark 开发更高层的组件,比如 Shark(Spark 上的 Hive)1 和 Spark
Streaming。这些组件和其他一些组件一起被称为伯克利数据分析工具栈(BDAS,
https://amplab.cs.berkeley.edu/software/)。 Spark 最早在 2010 年 3 月开源,并且在
2013 年 6 月交给了 Apache 基金会,现在已经成了 Apache 开源基金会的顶级项目。
spark生态圈
Spark和MapReduce对比?
Spark与Hadoop区别
hadoopspark类型基础平台,包含计算,存储,调度纯计算工具(分布式)场景海量数据批处理(磁盘迭代计算)海量数据的批处理(内存迭代计算,交互式计算),海量数据流计算,机器学习,图计算价格对机器要求低,便宜对内存有要求,相对较贵编程范式MapReduce,API较为底层,算法适应性差RDD组成DAG有向无环图,API较为顶层,方便使用数据存储结构MapReduce中间计算结果在HDFS磁盘上,延迟大RDD中间运算结果在内存中,延迟小
spark 将数据存储在内存中进行计算;MapReduce 将数据存储在磁盘上。
由于内存访问速度更快,spark 在处理迭代计算和交互式查询等工作负载时通常比 MapReduce 更高效。
Spark 基于内存的计算:
Spark中我们有一种优化策略:移动计算、不移动数据。旨在减少数据传输的开销,提高计算效率。其核心思想是将计算任务尽可能的放在数据所在的节点上执行,而不是将数据传输到计算节点。具体来说,包括下面两个方面:
1. 数据本地性:
Spark 会尽量将计算任务分配到存储有数据的节点上,以利用数据的本地性。这样可以减少数据传输的开销。通过在数据所在节点上执行计算任务,可以避免将数据传输到其他节点,从而提高计算性能。
2. 任务调度:
Spark 不会移动实际的数据。数据仍然保留在存储节点上,只有计算任务被分发到存储数据的节点上执行。
一、内存计算
MapReduce基于磁盘的计算:
数据读取:
输入数据从磁盘读取到内存中进行处理。也就是说,每次需要处理数据时,都需要从磁盘读取相应的数据块到内存中进行计算操作。
中间结果存储:
MapReduce 框架会将 Map 和 Reduce 阶段的中间结果存储在磁盘上。在 Map 阶段,将 Map 任务的输出写入磁盘中的临时文件。在 Reduce 阶段,Reduce 任务会从磁盘上读取中间结果,并根据键值对进行合并和排序。
数据持久性:
将数据存储在持久化的磁盘介质上,及时在节点故障或计算过程中断的情况下,数据也能够持久保存。这样可以确保数据的可靠性和容错性。
二、执行速度
Spark 的内存计算特性 和 基于DAG有向无环图 的执行模型,通常比 MapReduce 更快。Spark可以在内存中保留数据和计算结果,并通过多个任务合并为更少的阶段来减少磁盘的读写开销。
三、API 和编程模型
Spark提供了丰富的API,包括 scala、Java、Python等。开发起来更加灵活、表达能力更强。而 MapReduce 使用 Java 编程语言来编写 Map 和 Reduce 函数,需要手动编写更多的代码来实现处理逻辑。
四、扩展性
Spark 有更好的扩展性,可以方便的与其他数据处理框架和工具集成。如:Spark Streaming用于流处理、Spark SQL 用于查询和结构化数据处理、Spark MLlib用于机器学习等。
五、容错性
Spark提供了弹性式分布数据集RDD,具有自动容错和数据恢复机制。能够在节点故障时重新计算
丢失的数据。
MapReduce 需要在每个任务的开始和结束时将数据写入磁盘,因此在故障情况下需要重新启动整个计算。
什么是容错性?
容错性是指系统在面对故障、错误或者异常情况时能够保持正常运行,并能够从故障中恢复或继续进行操作的能力。数据在处理中,由于数据规模庞大、且分布在多个计算节点上,节点故障可能导致任务中断或数据丢失
Spark框架
Spark是一个快速、通用的大数据处理框架,它提供了高效的数据处理和分析能力。以下是Spark框架的一些重要特点和组件:
高性能:Spark使用内存计算技术,将数据存储在内存中进行处理,因此比传统的磁盘存储方式更快速。同时,Spark还支持并行计算,可以将任务分解为多个子任务并行执行,提高了处理速度。
弹性分布式数据集(RDD):RDD是Spark的核心数据抽象,它是一个可分区、可并行计算的数据集合。RDD可以在内存中缓存数据,并支持容错机制,可以在节点故障时自动恢复数据。
Spark SQL:Spark SQL是Spark提供的用于处理结构化数据的模块。它支持SQL查询、DataFrame和DataSet API,可以方便地进行数据分析和处理。
Spark Streaming:Spark Streaming是Spark提供的流式数据处理模块。它可以实时接收和处理数据流,并支持常见的流式处理操作,如窗口操作、滑动窗口等。
MLlib:MLlib是Spark提供的机器学习库,包含了常见的机器学习算法和工具,可以用于构建和训练机器学习模型。
GraphX:GraphX是Spark提供的图计算库,用于处理大规模图数据。它提供了图的构建、遍历和计算等功能,可以用于社交网络分析、推荐系统等领域。
Spark应用程序:Spark提供了丰富的API和开发工具,可以使用Java、Scala、Python等多种编程语言进行开发。同时,Spark还支持与Hadoop生态系统的集成,可以与HDFS、Hive、HBase等组件无缝配合使用。
数据结构
1.什么是结构化数据?
结构化数据是高度组织和整齐格式化的数据,是一种可以放入表格和电子表格中的数据类型。不仅仅人们更容易搜索和使用它,计算机也能够更加轻松的搜索它。
典型的结构化数据包括:信用卡号码、日期、财务金额、电话号码、地址、产品名称等。
有行有列
2.什么是非结构化数据?
非结构化数据本质上是结构化数据之外的一切数据。非结构化数据不是那么容易组织或格式化的。收集,处理和分析非结构化数据也是一项重大挑战。非结构化数据与结构化数据是计算机信息化系统中的两种数据形式,非结构化数据是指那些结构不规则、不完整、没有预定义数据模型、不方便用二维逻辑表现的数据,常见形式为文档、文本、图片、音频、视频、报表、XML、HTML等。
典型的非结构化数据包括:
1.文本文件:文字处理、电子表格、演示文稿、电子邮件、日志。
2.电子邮件:电子邮件由于其元数据而具有一些内部结构,我们有时将其称为半结构化。但是,消息字段是非结构化的,传统的分析工具无法解析它。
3.社交媒体:来自新浪微博、微信、QQ、Facebook,Twitter,LinkedIn等平台的数据。
4.网站: YouTube,Instagram,照片共享网站。
5.移动数据:短信、位置等。
6.通讯:聊天、即时消息、电话录音、协作软件等。
7.媒体:MP3、数码照片、音频文件、视频文件。
8.业务应用程序:MS Office文档、生产力应用程序。
9卫星图像:天气数据、地形、军事活动。
10.科学数据:石油和天然气勘探、空间勘探、地震图像、大气数据。
11.数字监控:监控照片和视频。
12.传感器数据:交通、天气、海洋传感器。
3. 结构化数据与非结构化数据有何区别
除了存储在关系数据库和存储非关系数据库之外的明显区别之外,最大的区别在于分析结构化数据与非结构化数据的便利性。
spark运行结构
Spark框架的核心是一个计算引擎,整体来说,它采用了标准的master-slave的结构
图所示:展示了一个Spark执行时的基本架构,图中的Driver表示master,负责管理整个集群中的作业任务调度。图中的Executor则是slave,负责实际执行任务。
Spark运行架构由三个主要组件组成:Driver节点、Cluster Manager和Executor节点。
Driver节点是应用程序的入口点,它负责解析用户的应用程序代码,并将任务划分成一系列的任务(stage),以及在集群上为任务安排调度。Driver节点负责管理各个任务之间的依赖关系,并将它们转换成一个可执行的物理执行计划(DAG)
Cluster Manager负责在集群中为应用程序分配资源。它可以是Standalone,YARN或Mesos等。
Executor节点负责在工作节点上执行任务。每个Executor都运行在自己的JVM进程中,并且为应用程序分配了一定数量的内存和CPU资源。Executor在运行过程中负责接收和执行任务。
spark架构主要由以下组件构成:
- Application: 建立在 Spark上的用户程序,包括 Driver代码和运行在集群各节点 Executor中的代码
- Driver program: 驱动程序, Application中的main函数并创建 SparkContext
- Cluster Manager : 在集群(Standalone、Mesos、YARN)上获取资源的外部服务
- Worker Node: 集群中任何可以运行 Application代码的节点
- Executor : 某个 Application运行在 worker节点上的一个进程
- Task: 被送到某个 Executor上的工作单元
- Job : 包含多个 Task 组成的并行计算,往往由 Spark Action算子 触发生成,一个 Application中往往会产生多个 Job
- Stage: 每个Job会被拆分成多组 Task,作为一个 TaskSet,其名称为 Stage
- 在驱动程序中,通过SparkContext主导应用的执行
- SparkContext可以连接不同类型的Cluster Manager(Standalone、YARN、Mesos),连接后,获得集群节点上的Executor
- 一个Worker节点默认一个Executor,可通过SPARK_WORKER_INSTANCES调整
- 每个应用获取自己的Executor
- 每个Task处理一个RDD分区
spark运行的三种模式
①Local(也称单节点模式):常用于开发和学习
./spark-shell - -master local[n] ,n代表线程数
②Standalone(集群模式)(应用较少)
独立模式,类似MapReduce 1.0所采取的模式,完全由内部实现容错性和资
源管理
③Spark on Yarn(两种模式集群模式) :Yarn Client 与 Yarn Cluster
3.1 Yarn Client:
Yarn Client:适用于交互与调试(应用较多)
交互:提供一个终端进行个调试->反馈一个结果(实时)
让Spark运行在一个通用的资源管理系统之上,这样可以与其他计算框架共享
资源
3.2 Yarn Cluster
Yarn Cluster:(集群)适用于生产环境(公司应用较多)
有哪些信息要输出要反馈都是输出到log日志文件中,只能查看log(后知后觉)
spark运行流程
Standalone****模式运行流程
yarn-cluster运行流程
yarn-client运行流程
后续内容持续更新中......关注我看我这一世如何夺回属于我的一切!
版权归原作者 百味666 所有, 如有侵权,请联系我们删除。