1.什么是Spark?
Spark是一个开源的大数据处理和分析引擎。
Spark最初由美国加州大学伯克利分校的AMP实验室于2009年开发,基于内存计算,适用于构建大型、低延迟的数据分析应用程序。Spark支持多种编程语言,如Java、Scala、Python和R,并提供了高级别的API,用于在分布式环境中进行大规模数据处理和分析。Spark的核心组件包括Spark Core、Spark SQL、Spark Streaming、MLlib等,它能够处理结构化数据、实时数据,并支持机器学习算法。Spark以其高性能、易用性和灵活性而闻名,能够在内存中保留数据,避免磁盘I/O的开销,从而提高计算速度和吞吐量。此外,Spark可以与Hadoop分布式文件系统(HDFS)等数据源集成,支持批处理、迭代算法、交互式查询和流处理等多种计算模式。
2.了解Spark的特点
速度快
速度快 由于ApacheSpark支持内存计算,并且通过DAG(有向无环图)执行引擎支持无环数据流,所以官方宣称其在内存中的运算速度要比Hadoop的MapReduce快100倍,在硬盘中要快10倍 Spark处理数据与MapReduce处理数据相比,有如下两个不同点: Spark处理数据时,可以将中间处理结果数据存储到内存中 Spark Job调度以DAG方式,并且每个任务Task执行以线程方式,并不是MapReduce以进程方式执行
通用性强
在Spark的基础上,Spark还提供了包括Spark SQL、Spark Streaming、MLib及GraphX在内的多个工具库,我们可以在一个应用中无缝的使用这些工具库
易于使用
Spark的版本已经更新到了Spark3.1.2(截止日期2021.06.01),支持了包括Java、Scala、Python、R和SQL语言在内的多种语言。为了兼容Spark2.x企业级应用场景,Spark仍然持续更新Spark2版本
运行方式
Spark支持多种运行方式,包括在Hadoop和Mesos上,也支持Standalone的独立运行模式,同时也可以运行在云Kubernets(Spark2.3开始支持)
搭建spark集群
搭建Spark集群有多种模式,包括Local模式、Standalone模式、YARN模式以及Spark on Hive模式。以下是不同模式下的搭建步骤:
- Local模式。首先下载Spark的jar包,然后解压并运行Spark程序。这种模式适合本地测试和调试。
- Standalone模式。需要下载Spark的jar包,上传并解压,配置环境变量,修改配置文件(例如spark-defaults.conf和spark-env.sh),将Spark安装包分发到其他节点,启动集群,并在Web界面查看Spark UI。
- YARN模式。需要开启HDFS和YARN服务,修改Hadoop配置文件(例如yarn-site.xml),分发Spark Jar包到HDFS,并测试Spark程序。
- Spark on Hive模式。需要文件复制、驱动程序拷贝和重启集群。
此外,在搭建Spark集群之前,应先搭建好Hadoop集群,因为Spark依赖于HDFS作为存储系统。在生产环境中,Spark通常与Hive、Kafka等其他组件一起使用,以提高数据处理和分析的效率
spark作业运行流程
Spark作业的运行流程主要包括以下几个步骤:
- 作业提交。用户通过Spark客户端(如Pyspark或Spark shell)提交一个Spark应用程序到集群。客户端负责将应用程序的代码、依赖关系以及配置参数打包成一个JAR包或Python文件,并提交给Spark集群。
- 创建SparkContext。在集群上的某个节点上,Spark驱动程序(Driver)的main方法被执行,创建了一个SparkContext对象。这个对象是应用程序与集群进行通信的主要入口点。
- 创建RDD。SparkContext负责创建RDD(弹性分布式数据集)对象,并计算RDD之间的依赖关系,形成一个有向无环图(DAG)。
- 划分Stage。DAGScheduler根据RDD之间的宽窄依赖关系,将DAG划分为多个Stage。每个Stage包含一个或多个Task,这些Task会被提交给TaskScheduler。
- 资源分配。TaskScheduler接收DAGScheduler提交的TaskSet,并为每个Task申请资源,然后将Task发送到集群中的Worker节点。
- 执行Task。Worker节点上的Executor启动并执行Task。Executor负责将Task转换为具体的计算任务,并在本地或集群上运行这些任务。
- 结果收集与驱动程序。Executor执行完Task后,将结果发送回Driver。Driver负责收集这些结果,并可能将它们发送到外部存储系统,如HDFS或Hive。
Spark作业的运行流程依赖于Spark的组件,包括SparkContext、DAGScheduler、TaskScheduler、Executor和Driver,它们共同协作以高效地处理和管理大规模数据。
Spark 核心数据结构:RDD
rdd 弹性分布式数据集 是spark框架自己封装的数据类型,用来管理内存数据
数据集:
rdd数据的格式 类似Python中hive中的该结构叫数组
rdd提供算子(方法) 方便开发人员进行调用计算数据
在pysaprk中本质是定义一个rdd类型用来管理和计算内存数据
分布式 : rdd可以时使用多台机器的内存资源完成计算
弹性: 可以通过分区将数据分成多份 每份数据对应一个task线程处理
python 也有自己的数据类型 使用的是单机资源管理数据
数据类型可以通过封装类的形式进行定义,所有list,dict在Python中本质是一个类