spark的介绍

目录

1、发展历程

2、Spark能做什么?

3、spark有哪些部分组成?

4、各大计算引擎的对比

5、spark的应用

6、spark运行有五种模式【重点】

7、Spark分布式计算的步骤


1、发展历程

DataBricks官网:https://databricks.com/spark/about

spark的诞生其实是因为MR计算引擎太慢了。

MR计算是基于磁盘的,Spark计算是基于内存的。

spark的发展历程:

2009年,Spark诞生于伯克利AMPLab,伯克利大学的研究性项目。

2014年2月成为Apache顶级项目,同年5月发布Spark 1.0正式版本

2018年Spark2.4.0发布,成为全球最大的开源项目,目前是Apache中的顶级项目之一。

2020年6月Spark发布3.0.0正式版,目前学习的就是3.x

定义:基于内存式计算的分布式的统一化的数据分析引擎。

分析引擎:hive 、spark、presto、impala 等。所谓的引擎,狭义理解就是sql。

2、Spark能做什么?

实现离线数据批处理:类似于MapReduce、Pandas,写代码做处理:代码类的离线数据处理 。

实现交互式即时数据查询:类似于Hive、Presto、Impala,使 用SQL做即席查询分析:SQL类的离线数据处理

实现实时数据处理:类似于Storm、Flink实现分布式的实时计算:代码类实时计算或者SQL类的实时计算

实现机器学习的开发:代替传统一些机器学习工具

3、spark有哪些部分组成?

Hadoop的组成部分:common、MapReduce、Hdfs、Yarn

Spark Core:Spark最核心的模块,可以基于多种语言实现代码类的离线开发 【类似于MR】

Spark SQL:类似于Hive,基于SQL进行开发,SQL会转换为SparkCore离线程序 【类似Hive】

Spark Streaming:基于SparkCore之上构建了准实时的计算模块 【淘汰了】

Struct Streaming:基于SparkSQL之上构建了结构化实时计算模块 【替代了Spark Streaming】

Spark ML lib:机器学习算法库,提供各种机器学习算法工具,可以基于SparkCore或者SparkSQL实现开发。

开发语言:Python、SQL、Scala、Java、R【Spark的源码是通过Scala语言开发的

一个软件是什么语言写的,跟什么语言可以操作这个软件是两回事儿。

Scala 语言是基于java实现的,底层也需要虚拟机。

4、各大计算引擎的对比

Impala:集成Hive实现数据分析,优点是性能最好,缺点数据接口比较少,只支持Hive和Hbase数据源 。 是一个基于CDH的一个软件,Impala 能写sql,它写出来的sql,叫 Impala SQL (大部分跟我们普通的sql没啥区别) ,操作hive或者hbase 速度非常快!

Presto:集成Hive实现数据分析,优点性能适中,支持数据源非常广泛,与大数据接口兼容性比较差 。Presto也可以写sql,只是写的sql叫做 Presto SQL (大部分跟我们普通的sql没啥区别) ,特点:可以跨数据源。比如mysql的表可以和oracle中的一个表关联查询。

SparkSQL:集成Hive实现数据分析,优点功能非常全面、开发接口多,学习成本低,缺点实时计算不够完善。实时计算交给了Flink。

简单粗暴的理解:Impala和Presto 都可以进行大数据分析,但是数据量达到一定级别,就不太行,还得是SparkSQL。

5、spark的应用

spark可以做数仓,数仓中也可以分层。

离线场景:实现离线数据仓库中的数据清洗、数据分析、即席查询等应用

实时场景:实现实时数据流数据处理,相对而言功能和性能不是特别的完善,工作中建议使用Flink替代。

即席查询:即席查询类似于即兴发挥。普通查询类似于带着稿子发言。不管是普通查询还是即席查询,写的sql语句都是一样的,只是一个sql语句是固定的,写死的,类似于存储过程。用户自己随即查询的sql语句就是即席查询。

6、spark运行有五种模式【重点】

本地模式:Local:一般用于做测试,验证代码逻辑,不是分布式运行,只会启动1个进程来运行所有任务。

集群模式:Cluster:一般用于生产环境,用于实现PySpark程序的分布式的运行

Standalone:Spark自带的分布式资源平台,功能类似于YARN

YARN:Spark on YARN,将Spark程序提交给YARN来运行,工作中主要使用的模式

Mesos:类似于YARN,国外见得多,国内基本见不到

K8s:基于分布式容器的资源管理平台,运维层面的工具。

解释:Spark是一个分布式的分析引擎,所以它部署的时候是分布式的,有用主节点,从节点这些内容。Standalone使用的是Spark自带的分布式资源平台,但是假如一个公司已经有Yarn分析平台了,就没必要再搭建spark分析平台,浪费资源。

学习过程中:本地模式 --> Standalone --> YARN ,将来spark在yarn上跑。

7、Spark分布式计算的步骤

Spark的计算流程:

内存:存储数据的,内存的读写速度快,内存会清空

磁盘:存储数据的,读写速度慢,不会清空

RDD: 弹性分布式数据集

举例说明:

比如现在有一个list列表,中间要求每一个数的平方,使用python 如何写?

RDD:  弹性分布式数据集
举例说明:
比如现在有一个list列表,中间要求每一个数的平方,使用python 如何写?
第一步:读取数据
python_list: List[int] = [1,2,3,4,5,6]
第二步:进行转换
def compute(list1): 
rs_list = [] 
for i in list1: 
rs_list.append(i**2) 
    return rs_list 
rs_list = compute(list1)
第三步:打印到控制台。
整个流程是一个串行的过程。

以下是Spark的计算过程:假如你想使用多台电脑同时计算这个数据集,可以使用spark

1、Spark读取数据会将数据拆分成多份,每一份叫做一个分区,整体叫做一个RDD,一个RDD对应着多个分区

spark_rdd:RDD[int] = [1,2,3,4,5,6]
这个数据集会被三台电脑读取:
part0:bigdata01:1 2
part1:bigdata02:3 4
part2:bigdata03:5 6

2、利用算子进行数据的计算
# map用于取出RDD中每个元素,对每个元素调用一次 lambda表达式
rs_rdd = spark_rdd.map(lambda x: x**2)

底层原理:
part0:node1:1 2 => Task0 => part0:node1:1 4
part1:node2:3 4 => Task1 => part1:node2:9 16
part2:node3:5 6 => Task2 => part2:node3:25 36

3、保存数据
实现:将每个Task计算的结果进行输出保存 part0:
part0:  node1:1 2 => Task0 => part0:node1:1 4 -> part-00000
part1:node2:3 4 => Task1 => part1:node2:9 16 ->part-00001
part2:node3:5 6 => Task2 => part2:node3:25 36 ->part-00002

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值