Spark基础入门教程(一):原理架构

本文是Spark基础入门教程的第一部分,主要介绍Spark的原理、架构和基础API。Spark相较于MapReduce具备更快的速度,支持多种语言,尤其擅长处理流工作负载。Spark包括SparkContext、SparkSession等关键API,RDD作为核心数据结构,提供了数据并行处理的能力。此外,Spark还支持SparkSQL和机器学习库MLlib,以及丰富的生态系统与其他技术如HBase、Kafka等协同工作。
摘要由CSDN通过智能技术生成

Spark是什么?

Spark是用来实现快速而通用的集群计算的平台。

在此之前我们学过了Hadoop中的MapReduce,那么就以这两个为例比较一下:

MapReduce:

仅仅只支持Map和Reduce两种模式

处理效率偏低,

1)具体体现在Map的中间结果是写入到磁盘中,Reduce写HDFS中,多个MapReduce与HDFS交互数据频繁,

认读调度较大。

2)没有办法充分的使用内存

3)Map和Reduce端都需要排序,编写不够灵活

Spark:

Spark支持的语言很多,这里仅仅以Scala(函数式编程)为例

Spark确实速度很快(最多比Hadoop MapReduce快100倍)。Spark还可以执行批量处理,然而它真正擅长的是处理流工作负载.

Spark有自己的页面,因为虽然它可以通过YARN(另一种资源协调者)在Hadoop集群中运行,但是它也有一种独立模式。它可以作为 Hadoop模块来运行,也可以作为独立解决方案来运行。

Spark之所以如此快速,原因在于它在内存中处理一切数据。它可以使用磁盘来处理未全部装入到内存中的数据。

 

安装:

笔者这里下载的版本为:spark-2.3.1-bin-hadoop2.7.tgz

放入文件夹后,我们解压即可。然后配置环境变量


export SPARK_HOME=/home/hadoop/spark-2.3.1-bin-hadoop2.7
#PATH
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$SPARK_HOME/bin

然后配置好之后我们Scoure一下,我们就可以在bin/目录下启动Spark了

我们启动Spark的话需要先启动HDFS ,用来做存储

start -dfs.sh

我们现在可以启动Spark -shell了,启动成功如下:

我们现在看一下红圈中:

Spark中 Web ui端口号为:4040  可以通过主机名和端口访问

其中Sc 是帮我们初始化的一个 SparkContext

驱动器通过SparkContext对象来访问Spark,起名叫sc变量,这里shell可以认为是驱动器

我们可以通过输入Sc查看一下它的类型

scala> sc
res0: org.apache.spark.SparkContext = org.apache.spark.SparkContext@5f3f3d00

一旦有了SparkContext我们就可以创建RDD,这里暂时不详说,后面会有
(master = local[*] app id = local-1541493344996).) 这个代表着我们是本地模式, *是代表进程数用了多少个,
实际上这里应该写两个,一个跑你的任务,一个跑你的driver,但是我这里*代表和你的CPU的核有关

app id是我们启动的应用任务

 

如下图是 Spark的栈 

由图所见,Spark支持Yarn任务调度器和 Other,我们可以打开官网查看,这些是下载了Spark就支持了这些,

实现的部分需要单独部署一套yarn集群 和这一些

由此可见我们知道了,Spark的执行环境分为两个部分  一个是本地,一个是其他(yarn Kubernetes  Mesos)

 

Spark核心是(处理数据,结构是什么样子的):它的核心是数据合区并行

RDD:弹性分布式数据集,可以理解为List,一个RDD可以理解为一个超大的数组,这个数组被劫成一段一段的,因为要做并行化运行,每一段数据数据将来会运行一个进程,最终将运行的数据汇总,又产生了一个新的RDD,保存文件中或者输出到控制台,就是处理掉。

优势:数据不会丢失,是高可靠的

SparkSQL:早期是集成Hive,后来脱离了,自己做了一个SQL Context,这样的话在我们对数据进行统计的时候就不需要写编程代码了,大部分的人也都可以使用Spark了 因为提供的SQL。

Spark和Hadoop的思想是一样的,都是对批量数据进行处理,先准备数据,处理完程序就结束。

所以说又写了一个组件叫做:Spark Streaming,批处理数据和流处理数据:批处理数据不会随着时间的变化而变化,流数据结尾是没有终点的,实时就回来数据,

怎样定义流数据:把流数据切成一段一段的,它的流式数据就是一小段一小段连在一起,就成为了流处理,并不是真实时,

这里讲的都是(2.0和2.0之前的版本)

准,2.0之后Spark 加了一个 Structured Streaming功能,这是一个真实时,采用的式SQL实时来采集数据,造成了它的延迟达到了毫秒级,2.0之前延迟最低只能达到秒级,最短也是一秒得到一次数据,现在是一百毫秒就能得到一次数据。

Spark中还提供了类库做机器学习(MLib(机器学习)、GraphX(图计算),节点之间关系的计算)

以上就是介绍了Spark栈中的东西

那么Spark生态系统,指的是能跟其他东西共同协作,如何Hbase,关系数据库 ,kafka, flume, 非关系数据库,生态系统越丰富,说明它的生命周期越长。

那么这里说一下Spark的劣势: 为什么有同学说,有了Spark就不需要Hadoop了,这是不对了,他们各有各的好处,Spark之所以替换不掉Hadoop是因为,Haddop廉价性,因为它的计算靠磁盘完成的(处理一部分数据把数据放入磁盘而不是内存),而Spark(快速内存计算)处理完是放入到内存中的,虽然速度比Hadoop快了一百倍,但是你是以牺牲了一些东西,机器要求比较高。

 

Spark架构:

1)Driver(具有Spark Context,Spark Session)

2)Worker(具有 Executor(Task))

Driver和Worker如何通讯和资源调度,需要有一个Manger

我们做一个Spark的应用程序,就叫做Application,运行的时候分成两部分 ,一部分是Driver部分,还有一部分是Worker部分 ,

所以我们写的应用代码不是在一个地方执行的,是在两个大类执行的,

Driver代码:你启动应用程序那台机器上执行的,也就是执行在Main方法上的代码,创建Spark Context  Spark session  sql Context,  创建会话的。

Worker代码:有几个Patition,worker就会启动多少个任务,就是Task, 一个Patition会产生一个Task进程

Job:代表一整个的工作,写一个应用程序就是一个Job

Manger:本地模式还是Yarn模式,还是其他模式,是一个集群管理器, 

 

SparkApi

SparkContext

API无非就是使用某个对象内里面提供的方法,在shell中我们可以直接使用Sc变量.方法,SparkContext是一个会话,做Spark任务时的主要入口,SparkContext是一个非常笨重的对象,所以不要在你的应用程序中不要创建多个,只需要一个就好,

SparkSession:是推荐使用的,包含了SparkContext,和SQLContext,Spark Streaming,HiveContext,所以在Spark2.0之后推荐使用。

RDD:大数组,类型只能是Object

DataFrame:认为是一个RDD里面的数据类型是不强调的,数据类型只能是Row类型

DataSet:集合,支持泛型,支持类型的数组,自定义任何的实体类型

共同:他们都支持了SQL

Spark抽象标准: RDD:东西都是在RDD做出来的 DAG:有向无环图,主要描述操作之间的关系,能做任务的优化

RDD:

简单的概念就认为是一个大数组,是一段一段的,叫做partition,存在集群的内存中的,将来支持各种操作

复杂概念:数据转换的接口,RDD可以将引用的数据存储在HDFS上,宽列数据库中,也能存储在内存中,存储在另一个RDD中,实际上RDD可以引用存在任意位置上的数据,RDD实际上没有数据的,实际上是引用

 

RDD操作:首先我们要创建或者读入一个RDD,然后对RDD变换操作,处理完之后对数据进行持久化操作,也可能不做,最终将数据产出,这就是整个RDD的操作。

RDD中Partition:每一段成为一个Partition,每一个Partition都会执行一个任务(Task),分在不同的节点上存储的,建议有更多的Partition,程序在执行的过程中才能更好的并行化,但是别特别多!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值