Spark特点
- 快速:spark在内存中的运行速度是Hadoop mapreduce 运行速度的100多倍,spark在磁盘中的运行速度是Hadoop mapreduce运行速度的10多倍。spark用内存,Hadoop mapreduce用硬盘。
- 易用:spark支持使用Scala、python、java、R等语言快速编写应用。
- 通用:spark可以与sql语句、实时计算及其他复杂的分析计算进行良好的结合。
- 随处运行
- 代码简洁
spark产生的原因
因为Hadoop中的mapreduce计算出现了问题,所以出现了spark。
- mapreduce计算效率低:mapreduce的中间结果需要保存到磁盘,所以相对于spark存放在内存中的方式,mapreduce的计算效率低。
- 操作灵活性低:MapReduce仅支持Map和Reduce两种操作,spark提供了一系列组件,任何数据都能运行。
- 表达能力有限:MapReduce的计算模型较为固定,只包含Map和Reduce两个阶段,而Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作。
spark生态圈组件
- Spark Core:Spark的核心,提供底层框架及核心技术,如RDD抽象、任务调度、内存管理等。
- BlinkDB:基于Spark的快速、可扩展的大数据查询引擎。
- Spark SQL:用于处理结构化数据的Spark组件,支持SQL查询和DataFrame/Dataset API。
- Spark Streaming:Spark的实时数据处理组件,用于处理流式数据。
- MLBase:MLBase是Spark生态圈中专注于机器学习的一个组件,旨在降低机器学习的门槛,MLlib、MLI、ML Optimizer、MLRuntime。
- GraphX:Spark的图计算组件,支持图数据的处理和计算。
- SparkR:Spark的R语言接口,允许R语言开发者使用Spark进行大数据分析。
Spark的架构
- 客户端:用于用户提交作业的客户端。
- Driver:负责运行应用程序的main函数并创建sparkcontext,应用程序包含Driver功能的代码和分布在集群中多个节点上的Executor代码。
- SparkContext:应用上下文,控制整个生命周期。
- Cluster Manager:资源管理器,即在集群上获取资源的外部服务,目前主要有Stadalone和YARN。
MapReduce的层次结构
- 数据源层:负责数据的存储和访问。
- 计算层:提供基于磁盘的分布式并行批处理计算模型。
- 任务调度与资源管理:负责集群资源的调度和管理,以及作业的调度和监控。
Spark的层次结构
- 数据源层:负责数据的存储和访问,以及提供多种数据源的直接访问接口。
- 计算层:提供Spark的基本功能和API,以及基于这些API构建的多个库(如Spark SQL、MLlib、GraphX和Spark Streaming)。
- 资源管理层:负责集群资源的调度和管理。
- 工具层:提供辅助工具和服务,以支持Spark应用的开发和部署。
Spark三种运行模式
Standalone、YARN、Mesos
Spark核心数据集RDD
弹性分布式数据集是Spark中非常重要的概念
转换操作主要是指将原始数据集加载为RDD数据将一个RDD转换为另一个RDD的操作。
行动操作主要是指将RDD存储至硬盘中或触发转换操作执行的操作。
常用的转换操作
- map(func) : 对RDD中的每个元素都使用func,返回一个新的RDD。
- Filter(func) : 对RDD中的每个元素都使用func,返回使func为true的元素构成的RDD
- flatMap(func) : 和map()类似,但是flatMap()生成的是多个结果。
- union(otherDataset) :接收另一个RDD数据集otherDataset作为参数返回一个新的RDD,包含dataset和给定otherDataset的元素的集合。
- groupByKey(numTasks):作用于键值RDD,可根据相同的键分组。返回一个(K,Seq【v】)类型的数据集,默认情况下,使用8个并行任务进行分组,也可传入一个可选参数numTask,根据数据量设置并行任务数。
- reduceByKey(func,[numTasks]):用一个给定的func作用在groupByKey()产生的(K,Seq【v】)类型的数据集,如求和。和groupByKey()类似,并行任务数量可以通过一个可选的参数numTasks进行配置。
常用的行动操作
- reduce(func): 通过函数func聚集数据集中的所有数据。func函数接收两个参数,返回一个值。
- Collect():返回数据集中所有的元素
- Count(n):返回数据集中所有元素的个数
- first(n) : 返回数据集中的第一个元素
- task(n): 返回前n个元素
- saveAsTextFile(path):接收一个保存路径path作为参数,将数据集的元素以文本(Textfile)的形式保存到本地文件系统,HDFS或任何其他Hadoop支持的文件系统,Spark将会调用每个元素的toString()方法,并将它转换为文件中的一行文本
- Foreach(func): 对数据集中的每个元素都执行函数func。
Spark的核心原理
- 窄依赖指的是子RDD的一个分区只依赖于某个父RDD中的一个分区
- 宽依赖指的是子RDD的每一个分区都依赖于某个父RDD中的一个以上的分区
Scala语言特点
Scala是一种多范式的编程语言,是一种纯粹的面向对象的语言,每个值都是对象
- 面向对象:Scala是一种纯粹的面向对象的语言。
- 函数式编程
- 静态类型
- 可扩展
运行Scala
版权归原作者 So1ok5 所有, 如有侵权,请联系我们删除。