关于spark的一些内容

1.什么是spark?

Spark是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台,是一个计算引擎,用于大规模数据的计算,支持多种编程语言。具有快速、易用、通用、随处运行、代码简洁的特点。

批处理/流处理:spark可以使用 Python、SQL、Scala、Java 或 R,通过批量处理和实时流式处理的方式统一处理数据。

SQL 分析:为仪表板和临时报告执行快速、分布式的 ANSI SQL 查询。比大多数数据仓库运行得更快。

大规模数据科学:对 PB 级数进行探索性数据分析 (EDA),而无需进行下采样。

机器学习:在笔记本电脑上训练机器学习算法,并使用相同的代码扩展到数千台机器的容错集群。

生态:Spark 整合了多种框架,能够将这些框架扩展到数千台机器。这些框架包括:

数据科学和机器学习:scikit-learn,pandas,TensorFlow,PyTorch,mlflow,R

SQL 分析和 BI:Superset,Power BI,Looker,redash,tableau,dbt

存储和基础设施:Elasticsearch,MongoDB,Kafka,delta lake,kubernetes,Airflow,Parquet,SQL Server,cassandra,orc

现在spark已经形成一个丰富的生态圈,其中SparkSQL、Spark Streaming、GraphX、MLlib为spark生态圈的重要组件,Spark是基于内存计算的大数据并行计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。

2.mapreduce与spark的区别?

(1)spark处理数据是基于内存的,而MapReduce是基于磁盘处理数据的。

MapReduce是将中间结果保存到磁盘中,减少了内存占用,牺牲了计算性能。

Spark是将计算的中间结果保存到内存中,可以反复利用,提高了处理数据的性能

spark继承了mapreduce分布式计算的优点并改进了mapreduce的明显缺陷,spark的中间输出结果可以保存在内存中,从而大大减少了读写hadoop分布式文件系统的次数。

3.什么是结构化数据与非结构化数据?

结构化的数据也称作为行数据,是由二维表格的形式进行数据的存储,严格地遵循数据格式与长度规范,是可以放入表格和电子表格中的数据类型主要通过关系型数据库进行存储和管理。

结构化数据也被称为定量数据,是能够用数据或统一的结构加以表示的信息,如数字、符号。在项目中,保存和管理这些的数据一般为关系数据库,当使用结构化查询语言或SQL时,计算机程序很容易搜索这些术语。

非结构化数据非结构化数据本质上是结构化数据之外的一切数据。没有固定结构的数据,当无法用数字或统一的结构来描述和处理现实的问题,描述和存储这些问题就可能用全文文本、图像、声音、影视、超媒体等形式,并以文件存储,这些数据形式就属于非数据化结构。

4.spark的三种模式?

Spark支持三种分布式部署方式,分别是standalone、spark on mesos和 spark on YARN。

satndalone:即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。

spark on mesos:spark on mesos 有粗粒度(coarse-grained)和细粒度(fine-grained)两种运行模式,细粒度模式在spark2.0后开始弃用。

1)   粗粒度模式(Coarse-grained Mode):每个应用程序的运行环境由一个Dirver和若干个Executor组成,其中,每个Executor占用若干资源,内部可运行多个Task(对应多少个“slot”)。应用程序的各个任务正式运行之前,需要将运行环境中的资源全部申请好,且运行过程中要一直占用这些资源,即使不用,最后程序运行结束后,回收这些资源。举个例子,比如你提交应用程序时,指定使用5个executor运行你的应用程序,每个executor占用5GB内存和5个CPU,每个executor内部设置了5个slot,则Mesos需要先为executor分配资源并启动它们,之后开始调度任务。另外,在程序运行过程中,mesos的master和slave并不知道executor内部各个task的运行情况,executor直接将任务状态通过内部的通信机制汇报给Driver,从一定程度上可以认为,每个应用程序利用mesos搭建了一个虚拟集群自己使用。

2)   细粒度模式(Fine-grained Mode):鉴于粗粒度模式会造成大量资源浪费,Spark On Mesos还提供了另外一种调度模式:细粒度模式,这种模式类似于现在的云计算,思想是按需分配。与粗粒度模式一样,应用程序启动时,先会启动executor,但每个executor占用资源仅仅是自己运行所需的资源,不需要考虑将来要运行的任务,之后,mesos会为每个executor动态分配资源,每分配一些,便可以运行一个新任务,单个Task运行完之后可以马上释放对应的资源。每个Task会汇报状态给Mesos slave和Mesos Master,便于更加细粒度管理和容错,这种调度模式类似于MapReduce调度模式,每个Task完全独立,优点是便于资源控制和隔离,但缺点也很明显,短作业运行延迟大。

Spark On YARN:这是一种很有前景的部署模式。但限于YARN自身的发展,目前仅支持粗粒度模式(Coarse-grained Mode)。这是由于YARN上的Container资源是不可以动态伸缩的,一旦Container启动之后,可使用的资源不能再发生变化,不过这个已经在YARN计划中了。

spark on yarn 的支持两种模式:

1) yarn-cluster:适用于生产环境;

2) yarn-client:适用于交互、调试,希望立即看到app的输出

yarn-cluster和yarn-client的区别在于yarn appMaster,每个yarn app实例有一个appMaster进程,是为app启动的第一个container;负责从ResourceManager请求资源,获取到资源后,告诉NodeManager为其启动container。yarn-cluster和yarn-client模式内部实现还是有很大的区别。如果你需要用于生产环境,那么请选择yarn-cluster;而如果你仅仅是Debug程序,可以选择yarn-client。

5.spark的运用场景

spark满足挖掘分析与交互式实时查询的计算需求,因此一经推出便受到开源社区的广泛关注和好评,目前spark一经发展成为大数据处理领域非常受欢迎的开源项目,国内外大多数大型企业对spark的应用十分广泛,例如腾讯、雅虎、阿里巴巴等。

spark的主要应用场景:(1)推荐系统,实时推荐 (2)交互式实时查询

6.spark运行架构和原理

1)客户端:用户提交作业的客户端。

2)Driver:负责运行应用程序(Application)的main函数并创建SparkContext,应用程序包含Driver功能的代码和分布在集群中多个节点上的Executor代码。

3)SparkContext:应用上下文、控制整个生命周期。

4)ClusterManager:资源管理器,即在集群上获取资源的外部服务,目前主要有standalone和YARN。

·Standalone是spark原生的资源管理器,由Mater进程负责资源的分配,也可以理解为使用Standalone时ClusterManager是Mater进程所在节点。

·YARN是Hadoop集群的资源管理器,若使用YARN作为Spark程序运行的资源管理器,则由ResourseManager负责资源的分配。

5)SparkWorker:集群中任何可以运行应用程序的节点,运行一个或多个Executor进程。

6)Executor:运行在SparkWorker上的任务(Task)执行器,Executor启动线程池运行Task,并负责将数据存在内存或磁盘上,每个应用程序都会申请各自的Executor以处理任务。

7)Task:被发送到某个Executor的具体任务。

7.spark的核心数据集RDD

关于RDD参考官网中的概述:

从高一点的层次上看,每个Spark应用程序都由一个驱动程序组成,该驱动程序运行用户的主要功能,并在集群上执行各种并行操作。Spark提供的主要抽象概念是弹性分布式数据集(RDD),它是被切分后分布在集群中可以被平行操作的各个节点之间的数据元素的集合。RDD是通过从Hadoop文件系统中的文件(或任何其他Hadoop支持的文件系统)或驱动程序中的现有Scala集合开始并转换来创建的。用户还可以要求Spark在内存中存储一个RDD,允许它在并行操作中被有效地重用。最后,RDDS可以从节点故障中自动恢复。

Spark中的第二个抽象概念是可用于并行操作的共享变量。默认情况下,当Spark在不同的节点上并行运行函数作为一组任务时,它将函数中使用的每个变量的副本传送到每个任务。有时候,一个变量需要跨任务共享,或者在任务和驱动程序之间共享。Spark支持两种类型的共享变量:广播变量和累加器,广播变量可以在所有节点上的内存中缓存一个值,累加器是仅“添加”的变量,如计数器和求和。

本指南展示Spark支持的语言中的每一个特性。如果启动Spark的交互式shell——Scala shell的bin/spark-shell或Python的bin/pyspark,则很容易跟随。

8.spark的核心原理

1)宽依赖和窄依赖:

·窄依赖:窄依赖就是指父RDD的每个分区只被一个子RDD分区使用,子RDD分区通常只对应常数个父RDD分区,如下图所示【其中每个小方块代表一个RDD Partition】

·宽依赖就是指父RDD的每个分区都有可能被多个子RDD分区使用,子RDD分区通常对应父RDD所有分区,如下图所示【其中每个小方块代表一个RDD Partition】

2)Spark Stage划分依据主要是基于Shuffle。

Stage个数:1+shuffle依赖的数量(resultStage+shuffleMapStage):反向推导,每进行一次宽依赖(也就是每进行一个shuffle)前面的RDD就被分到一个Stage里。

3)Task的定义:一个Stage内只会存在同一种Task,Task数量与Stage的Partition数量保持一致(运行的Task数量可能会大于Partition数量)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值