1、Spark是什么
1.1 定义
Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎。
1.2 Spark与MapReduce对比
MapReduce架构回顾
-
MapReduce的主要缺点:
-
1- MapReduce是基于进程进行数据处理,进程相对线程来说,在创建和销毁的过程比较消耗资源,并且速度比较慢
-
2- MapReduce运行的时候,中间有大量的磁盘IO过程。也就是磁盘数据到内存,内存到磁盘反复的读写过程
-
3- MapReduce只提供了非常低级(底层)的编程API,如果想要开发比较复杂的程序,那么就需要编写大量的代码。
-
-
Spark相对MapReduce的优点:
-
1- Spark底层是基于线程来执行任务
-
2- 引入了新的数据结构——RDD(弹性分布式数据集),能够让Spark程序主要基于内存进行运行。内存的读写数据相对磁盘来说,要快很多
-
3- Spark提供了更加丰富的(顶层)编程API,能够非常轻松的实现功能开发
-
1.3 线程和进程对比
-
线程的创建和销毁,比进程会更加的快速,以及更加的节省资源
-
进程很难共享内存中的数据;而同个进程中的线程可以共享内存中的数据
进程(Process)和线程(Thread)是操作系统中用于执行程序的两个基本概念,它们之间有几个重要的区别: 资源分配: 进程是程序在执行时分配资源的基本单位,每个进程拥有独立的内存空间、文件描述符、堆栈等资源。 线程是进程内的执行单元,共享同一进程的资源,包括内存空间、文件描述符等。不同线程之间可以共享全局变量等数据。 并发性: 进程之间是相互独立的,每个进程都有自己的执行流程,进程之间的通信需要通过特定的机制,如进程间通信(Inter-Process Communication,IPC)。 线程是在同一个进程内部运行的,它们共享相同的地址空间,可以直接访问进程的资源,因此线程之间的通信更加方便和高效。 切换开销: 由于进程拥有独立的资源空间,进程切换的开销较大,包括保存和恢复进程的上下文、更新页表等操作。 线程共享相同的资源空间,因此线程切换的开销较小,通常只需要保存和恢复线程的上下文即可。 并发性控制: 进程之间的并发性控制相对简单,由操作系统负责管理进程的调度和资源分配。 线程之间的并发性控制更加复杂,需要程序员显式地使用同步机制(如互斥锁、信号量等)来保证线程之间的数据一致性和访问的互斥性。 总的来说,进程是操作系统中资源分配的基本单位,而线程是操作系统中执行调度的基本单位。进程之间相互独立,线程之间共享同一进程的资源,因此线程之间的通信和同步更加方便和高效
2、Spark的发展
3、Spark特点
快速记忆: speed, easy use , general , runs everywhere
-
高效性
-
计算速度快
-
提供了一个全新的数据结构RDD(弹性分布式数据集)。整个计算操作,基于内存计算。当内存不足的时候,可以放置到磁盘上。整个流程是基于DAG(有向无环图)执行方案。
-
Task线程完成计算任务执行
-
-
-
易用性
-
支持多种语言开发 (Python,SQL,Java,Scala,R),降低了学习难度
-
-
通用性
-
在 Spark 的基础上,Spark 还提供了包括Spark SQL、Spark Streaming、MLlib 及GraphX在内的多个工具库(模块),我们可以在一个应用中无缝地使用这些工具库。
-
-
兼容性(任何地方运行)
-
支持三方工具接入
-
存储工具
-
hdfs
-
kafka
-
hbase
-
-
资源调度
-
yarn
-
Kubernetes(K8s容器)
-
standalone(spark自带的)
-
-
高可用
-
zookeeper
-
-
-
支持多种操作系统
-
Linux
-
windows
-
Mac
-
-
4、Spark框架模块
-
Spark Core API:实现了 Spark 的基本功能。包含RDD、任务调度、内存管理、错误恢复、与存储系统交互等模块。数据结构RDD。
-
Spark SQL:我们可以使用 SQL处理结构化数据。数据结构:Dataset/DataFrame = RDD + Schema。
-
Structured Streaming:基于Spark SQL进行流式/实时的处理组件,主要处理结构化数据。
-
Streaming(Spark Streaming):提供的对实时数据进行流式计算的组件,底层依然是离线计算,只不过时间粒度很小,攒批。
-
MLlib:提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等。
-
GraphX:Spark中用于图计算的API,性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。