Spark学习一:Spark概述
1.1 什么是spark
apache spark 是专为大规模数据处理而设计的快速通用的计算引擎。
一站式管理大数据的所有场景(批处理,流处理,sql)
spark不涉及到数据的存储,只做数据的计算
spark是uc berkeley amp lab (加州大学伯克利分校的amp实验室)所开源的类hadoop mapreduce的通用并行计算框架,spark拥有hadoop mapreduce所具有的优点;
但不同于mapreduce的是job中间输出结果可以保存在内存中,从而不再需要读写hdfs,因此spark能更好地适用于数据挖掘与机器学习等需要迭代的mapreduce的算法。
注意:spark框架不能替代hadoop,只能替代mr,spark的存在完善了hadoop的生态系统.
spark是scala编写,方便快速编程。
学习spark的三个网站
1)
2)
3)
官网:
- apache spark™ is a fast and general engine for large-scale data processing.
- apache spark is an open source cluster computing system that aims to make data analytics fast
- both fast to run and fast to write
目前,spark生态系统已经发展成为一个包含多个子项目的集合,其中包含sparksql、spark streaming、graphx、mlib、sparkr等子项目,spark是基于内存计算的大数据并行计算框架。除了扩展了广泛使用的
mapreduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理。spark 适用于各种各样原先需要多种不同的分布式平台的场景,包括批处理、迭代算法、交互式查询、流处理。通过在一个统一的框架下支持这些不同的计算,spark 使我们可以简单而低耗地把各种处理流程整合在一起。而这样的组合,在实际的数据分析 过程中是很有意义的。不仅如此,spark 的这种特性还大大减轻了原先需要对各种平台分别管理的负担。
大一统的软件栈,各个组件关系密切并且可以相互调用,这种设计有几个好处:1、软件栈中所有的程序库和高级组件 都可以从下层的改进中获益。2、运行整个软件栈的代价变小了。不需要运 行 5 到 10 套独立的软件系统了,一个机构只需要运行一套软件系统即可。系统的部署、维护、测试、支持等大大缩减。3、能够构建出无缝整合不同处理模型的应用。
spark的内置项目如下:
- spark core:实现了 spark 的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。spark core 中还包含了对弹性分布式数据集(resilient distributed dataset,简称rdd)的 api 定义。
- spark sql:是 spark 用来操作结构化数据的程序包。通过 spark sql,我们可以使用 sql 或者 apache hive 版本的 sql 方言(hql)来查询数据。spark sql 支持多种数据源,比如 hive 表、parquet 以及 json 等。
- spark streaming:是 spark 提供的对实时数据进行流式计算的组件。提供了用来操作数据流的 api,并且与 spark core 中的 rdd api 高度对应。
- spark mllib:提供常见的机器学习(ml)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能。
- 集群管理器:spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计 算。为了实现这样的要求,同时获得最大灵活性,spark 支持在各种集群管理器(cluster manager)上运行,包括 hadoop yarn、apache mesos,以及 spark 自带的一个简易调度器,叫作独立调度器。
1.2 spark特点
快
与hadoop的mapreduce相比,spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。spark实现了高效的dag执行引擎,可以通过基于内存来高效处理数据流。计算的中间结果是存在于内存中的。
易用
spark支持java、python和scala的api,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且spark支持交互式的python和scala的shell,可以非常方便地在这些shell中使用spark集群来验证解决问题的方法。
通用
spark提供了统一的解决方案。spark可以用于批处理(spark core)、交互式查询(spark sql)、实时流处理(spark streaming)、机器学习(spark mllib)和图计算(graphx)。这些不同类型的处理都可以在同一个应用中无缝使用。spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。
兼容性
spark可以非常方便地与其他的开源产品进行融合。比如,spark可以使用hadoop的yarn和apache mesos作为它的资源管理和调度器,并且可以处理所有hadoop支持的数据,包括hdfs、hbase和cassandra等。这对于已经部署hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用spark的强大处理能力。spark也可以不依赖于第三方的资源管理和调度器,它实现了standalone作为其内置的资源管理和调度框架,这样进一步降低了spark的使用门槛,使得所有人都可以非常容易地部署和使用spark。此外,spark还提供了在ec2上部署standalone的spark集群的工具。
1.3 spark的用户和用途
我们大致把spark的用例分为两类:数据科学应用和数据处理应用。也就对应的有两种人群:数据科学家和工程师。
数据科学任务
主要是数据分析领域,数据科学家要负责分析数据并建模,具备 sql、统计、预测建模(机器学习)等方面的经验,以及一定的使用 python、 matlab 或 r 语言进行编程的能力。
数据处理应用
工程师定义为使用 spark 开发 生产环境中的数据处理应用的软件开发者,通过对接spark的api实现对处理的处理和转换等任务。
1.4 spark技术栈
spark技术栈:hdfs,hadoop,hive,mr,storm,sparkcore,sparksql,sparkstreaming
mesos相当于yarn 资源调度框架
tachyon基于内存:内存文件系统
hdfs存储层(基于磁盘存储 block存储策略)
mesos资源调度/任务调度层
spark sql : 延迟应该在毫秒级别
spark core:批处理 延迟度非常高
spark streaming :流式处理 延迟5s左右
blinkdb:支持精确度查询的数据库
sparkcore处理批数据
sparksql使用sql处理分布式数据
sparkstreaming处理流式数据
一站式管理大数据的所有场景(批处理,流处理,sql)
- spark core:实现了 spark 的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。spark core 中还包含了对弹性分布式数据集(resilient distributed dataset,简称rdd)的 api 定义。
- spark sql:是 spark 用来操作结构化数据的程序包。通过 spark sql,我们可以使用 sql 或者 apache hive 版本的 sql 方言(hql)来查询数据。spark sql 支持多种数据源,比 如 hive 表、parquet 以及 json 等。
- spark streaming:是 spark 提供的对实时数据进行流式计算的组件。提供了用来操作数据流的 api,并且与 spark core 中的 rdd api 高度对应。
- spark mllib:提供常见的机器学习(ml)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能。
- 集群管理器:spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计 算。为了实现这样的要求,同时获得最大灵活性,spark 支持在各种集群管理器(cluster manager)上运行,包括 hadoop yarn、apache mesos,以及 spark 自带的一个简易调度器,叫作独立调度器。
1.5 spark演变历史
spark 相比 hadoop历史
- 发展尤为迅速
- hadoop历史2006~2017 11年时间
- spark2012~2017 5年时间
spark是美国加州大学伯克利分校的amp实验室(主要创始人lester和matei)开发的通用的大
数据处理框架
• 2009伯克利大学开始编写最初的源代码
• 2010年才开放的源码
• 2012年2月发布了0.6.0版本
• 2013年6月进入了apache孵化器项目
• 2013年年中spark的主要成员成立的databricks公司
• 2014年2月成为了apache的*项目( 8个月的时间)
• 2014年5月底spark1.0.0发布
• 2014年9月spark1.1.0发布
• 2014年12月spark1.2.0发布
• 2015年3月spark1.3.0发布
• 2015年6月spark1.4.0发布
• 2015年9月spark1.5.0发布
• 2016年1月spark1.6.0发布
• 2016年5月spark2.0.0预览版发布
• 2016年7月spark2.0.0正式版发布
• 2016年12月spark2.1.0正式版发布
• 2017年7月spark2.2发布
1.6 spark与mapreduce的区别
都是分布式计算框架,spark基于内存,mr基于hdfs。spark处理数据的能力一般是mr的十倍以上,spark中除了基于内存计算外,还有dag有向无环图来切分任务的执行先后顺序。
spark不涉及到数据的存储,只做数据的计算
spark与hadoop mr不同的是,任务的中间结果可以保存到内存中,大大地提高了计算性能.
基于内存存储
-
mr作业之间如果有依赖关系的话,每个作业都是从磁盘获取数据,处理完成之后数据落盘。
如:磁盘-mr作业-磁盘-mr作业-磁盘
-
spark作业之间如果有依赖关系的话,spark程序处理完成之后可以将数据先存于内存中,不落盘,下一个spark程序就可以直接从内存中获取数据然后进行处理
如:磁盘-spark作业-内存-spark作业-内存-spark作业-磁盘
具体不同点
- spark相比于mr处理数据是可以基于内存来处理数据的
- spark与hadoop mr不同的是,任务的中间结果可以保存到内存中,大大地提高了计算性能.
- spark中有dag有向无环图来切分任务的执行先后顺序
- spark存储数据可以指定副本个数(持久化存储),mr默认3个。
- spark中做了很多已有的算子的封装,提供了各种场景的算子,而mr中只有map和reduce 相当于spark中的map和reducebykey两个算子
- spark是粗粒度资源申请,application执行快
- spark中shuffle map端自动聚合功能,mr手动设置
- spark中shuffle bypass机制有自己灵活的实现
mr
spark
1.7 spark api
api就是用这些语言进行编码的时候使用的方法
应用可以通过使用spark提供的库获得spark集群的计算能力,这些库都是scala编写的,但是spark提供了面向各种语言的api,例如scala、 python java等, 所以可以使用以上语言进行spark应用开发。
spark的api主要由两个抽象部件组成: sparkcontext和rdd ,应用程序通过这两个部件和spark进行交互,连接到
spark-集群并使用相关资源。
sparkcontext
是定义在spark库中的一个类,作为spark库的入口。 包含应用程序main ()方法的driver program通过sparkcontext对象访问spark,因为sparkcontext对象表示与spark集群的一 个连接。每个spark应用都有且只有一个激活的sparkcontext类实例,如若需要新的实例,必须先让当前实例失活。(在shell中sparkcontext已经自动创建好,就是sc)
rdd基础概念
- 弹性分布式数据集(resilient distributed dataset)
-
并行分布在整个集群中
把指定路径下的文本文件加载到ines这个rdd中,这个lines就是一个rdd, 代表是就是整个文本文件 -
rdd是spark分发数据和计算的基础抽象类
例如: lines.count()
在.count(的函数操作是在rdd数据集上的,而不是对某一具体分片 -
一个rdd是一个不可改变的分布式集合对象
就lines来说,如果我们对其所代表的源文件进行了增删改操作,则相当于生成了一个新的rdd,来存放修改后的数据集 - spark中所有的计算都是通过rdd的创建、转换,操作完成的
-
一个rdd内部由许多partitions (分片)组成
partitions:
每个分片包括一部分数据, 分片可在集群不同节点上计算
分片是spark并行处理的单元,spark顺序的,并行的处理分片
1.8 spark运行模式(部署模式)
-
local
在本地eclipse、idea中写spark代码运行程序,一般用于测试
-
standalone
spark自带的资源调度框架(可以抛开hdfs,抛开yarn去运行),支持完全分布式集群搭建。spark可以运行在standalone集群上
-
yarn
hadoop生态圈里面的一个资源调度框架,spark也是可以基于yarn来计算的。
要基于yarn来进行资源调度,必须实现appalicationmaster接口,spark实现了这个接口,所以可以基于yarn。
-
mesos
运行在 mesos 资源管理器框架之上,由 mesos 负责资源管理,spark 负责任务调度和计算,(很少用)
总结
推荐阅读
-
Spark学习一:Spark概述
-
JSP学习笔记(一)-----概述
-
Spark与深度学习框架——H2O、deeplearning4j、SparkNet 框架算法脚本scalajava
-
PyCharm搭建Spark开发环境实现第一个pyspark程序
-
spark dataframe 将一列展开,把该列所有值都变成新列的方法
-
Hadoop学习(9)-spark的安装与简单使用
-
PyCharm搭建Spark开发环境实现第一个pyspark程序
-
Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)
-
spark 机器学习基础 数据类型
-
Spark(一): 基本架构及原理