spark(1)--基础入门
spark笔记
Spark框架概述
Spark是什么
spark是用于大规模数据处理的统一分析引擎.
Spark 借鉴了MapReduce 思想发展而来,保留了其分布式并行计算的优点并改进了其明显的缺陷。让中间数据存储在内存中提
高了运行速度、并提供丰富的操作数据的API提高了开发速度。
Spark可以计算:结构化、半结构化、非结构化等各种类型的数据结构,同时也支持使用Python、Java、Scala、R以及SQL语言去开发应用
程序计算数据。
Spark VS Hadoop(MapReduce)
尽管Spark相对于Hadoop而言具有较大优势,但Spark并不能完全替代Hadoop
- 在计算层面,Spark相比较MR(MapReduce)有巨大的性能优势,但至今仍有许多计算工具基于MR构架,比如非常成熟的Hive
- Spark仅做计算,而Hadoop生态圈不仅有计算(MR)也有存储(HDFS)和资源管理调度(YARN),HDFS和YARN仍是许多大数据
体系的核心架构。
面试题:Hadoop的基于进程的计算和Spark基于线程方式优缺点?
答案:Hadoop中的MR中每个map/reduce task都是一个java进程方式运行,好处在于进程之间是互相独立的,每个task独享进程资源,没
有互相干扰,监控方便,但是问题在于task之间不方便共享数据,执行效率比较低。比如多个map task读取不同数据源文件需要将数据源加
载到每个map task中,造成重复加载和浪费内存。而基于线程的方式计算是为了数据共享和提高执行效率,Spark采用了线程的最小的执行
单位,但缺点是线程之间会有资源竞争。
【扩展阅读】:线程基本概念
线程是CPU的基本调度单位
一个进程一般包含多个线程, 一个进程下的多个线程共享进程的资源
不同进程之间的线程相互不可见
线程不能独立执行
一个线程可以创建和撤销另外一个线程
spark的四大优点
一. 速度快
由于Apache Spark支持内存计算,并且通过DAG(有向无环图)执行引擎支持无环数据流,所以官方宣称其在内存中的运算速度要比
Hadoop的MapReduce快100倍,在硬盘中要快10倍。
Spark处理数据与MapReduce处理数据相比,有如下两个不同点:
- 其一、Spark处理数据时,可以将中间处理结果数据存储到内存中;
- 其二、Spark 提供了非常丰富的算子(API), 可以做到复杂任务在一个Spark 程序中完成.
二. 易于使用
Spark 的版本已经更新到Spark 3.2.0(截止日期2021.10.13),支持了包括Java、Scala、Python 、R和SQL语言在内的多种语言。为了
兼容Spark2.x企业级应用场景,Spark仍然持续更新Spark2版本。
三. 通用性强
在Spark 的基础上,Spark 还提供了包括Spark SQL、Spark Streaming、MLib 及GraphX在内的多个工具库,我们可以在一个应用中无缝
地使用这些工具库。
四. 运行方式
Spark 支持多种运行方式,包括在Hadoop 和Mesos 上,也支持Standalone的独立运行模式,同时也可以运行在云Kubernetes(Spark
2.3开始支持)上。
对于数据源而言,Spark 支持从HDFS、HBase、Cassandra 及Kafka 等多种途径获取数据。
i、文件系统:LocalFS、HDFS、Hive、text、
parquet、orc、json、csv
ii、数据库RDBMs: mysql、Oracle、mssql
iii、NOSQL数据库:HBase、ES、Redis
iv、消息对象:Kafka
Spark 框架模块
整个Spark 框架模块包含:Spark Core、 Spark SQL、 Spark Streaming、 Spark GraphX、 Spark MLlib,而后四项的能力都是建立在核心引擎之上
Spark Core:Spark的核心,Spark核心功能均由Spark Core模块提供,是Spark运行的基础。Spark Core以RDD为数据抽象,提供Python、Java、Scala、R语言的API,可以编程进行海量离线数据批处理计算。
SparkSQL:基于SparkCore之上,提供结构化数据的处理模块。SparkSQL支持以SQL语言对数据进行处理,SparkSQL本身针对离线计算场景。同时基于SparkSQL,Spark提供了StructuredStreaming模块,可以以SparkSQL为基础,进行数据的流式计算。
SparkStreaming:以SparkCore为基础,提供数据的流式计算功能。
MLlib:以SparkCore为基础,进行机器学习计算,内置了大量的机器学习库和API算法等。方便用户以分布式计算的模式进行机器学习计算。
GraphX:以SparkCore为基础,进行图计算,提供了大量的图计算API,方便用于以分布式计算模式进行图计算。
Spark的运行模式- 了解
Spark提供多种运行模式,包括:
本地模式(单机)
本地模式就是以一个独立的进程,通过其内部的多个线程来模拟整个Spark运行时环境
Standalone模式(集群)
Spark中的各个角色以独立进程的形式存在,并组成Spark集群环境
Hadoop YARN模式(集群)
Spark中的各个角色运行在YARN的容器内部,并组成Spark集群环境
- Kubernetes模式(容器集群)
Spark中的各个角色运行在Kubernetes的容器内部,并组成Spark集群环境 - 云服务模式(运行在云平台上)
Spark的架构角色- 理解
YARN主要有4类角色,从2个层面去看:
资源管理层面
集群资源管理者(Master):ResourceManager
单机资源管理者(Worker):NodeManager
任务计算层面
单任务管理者(Master):ApplicationMaster
单任务执行者(Worker):Task(容器内计算框
架的工作角色)
Spark运行角色
注:正常情况下Executor是干活的角色,不过在特殊场景下(Local模式)Driver可以即管理又干活
重要知识点
spark解决的问题
海量数据的计算,可以进行离线批处理以及实时流计算
Spark有哪些模块?
核心SparkCore、SQL计算(SparkSQL)、流计算(SparkStreaming
)、图计算(GraphX)、机器学习(MLlib)
Spark特点有哪些?
速度快、使用简单、通用性强、多种模式运行
Spark的运行模式?
• 本地模式
• 集群模式(StandAlone、YARN、K8S)
• 云模式
Spark的运行角色(对比YARN)?
• Master:集群资源管理(类同ResourceManager)
• Worker:单机资源管理(类同NodeManager)
• Driver:单任务管理者(类同ApplicationMaster)
• Executor:单任务执行者(类同YARN容器内的Task)
环境搭建-Spark on YARN(重点掌握)
引言
按照前面环境部署中所学习的, 如果我们想要一个稳定的生产Spark环境, 那么最优的选择就是构建:HA StandAlone集
群.
不过在企业中, 服务器的资源总是紧张的, 许多企业不管做什么业务,都基本上会有Hadoop集群. 也就是会有YARN集群.
对于企业来说,在已有YARN集群的前提下在单独准备Spark StandAlone集群,对资源的利用就不高. 所以, 在企业中,多
数场景下,会将Spark运行到YARN集群中.
YARN本身是一个资源调度框架, 负责对运行在内部的计算框架进行资源调度管理.
作为典型的计算框架, Spark本身也是直接运行在YARN中, 并接受YARN的调度的.
所以, 对于Spark On YARN, 无需部署Spark集群, 只要找一台服务器, 充当Spark的客户端, 即可提交任务到YARN集群
中运行.
Spark On Yarn的本质
Spark On Yarn的本质?
Master角色由YARN的ResourceManager担任.
Worker角色由YARN的NodeManager担任.
Driver角色运行在YARN容器内或提交任务的客户端进程中
真正干活的Executor运行在YARN提供的容器内
Spark On Yarn需要啥?
1.需要Yarn集群:已经安装了
2.需要Spark客户端工具, 比如spark-submit, 可以将Spark程序提交到YARN中
3.需要被提交的代码程序:,如spark/examples/src/main/python/pi.py此示例程序,或我们后续自己开发的Spark任务
spark部署模式
Spark On YARN是有两种运行模式的,一种是Cluster模式一种是Client模式.
这两种模式的区别就是Driver运行的位置.
Cluster模式即:Driver运行在YARN容器内部, 和ApplicationMaster在同一个容器内,输出写在work日志中
Client模式即:Driver运行在客户端进程中, 比如Driver运行在spark-submit程序的进程中,输出结果写下窗口中
cluster模式:
client模式:
78