- 什么是spark?
spark是一种快速、通用、可扩展的大数据分析引擎。
官网地址:Apache Spark™ - Unified Engine for large-scale data analytics
Spark的发展史
2009年诞生于加州大学伯克利分校AMPLab,
2010年开源,2013年6月成为Apache孵化项目,
2014年2月成为Apache顶级项目
Spark继承了MapReduce分布式计算的优点并改进了MapReduce的明显缺陷。与MapReduce不同的是,Spark的中间输出结果可以保存在内存中,从而大大减少了读写Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)的次数,因此Spark能更好地适用于数据挖掘与机器学习中迭代次数较多的算法
1.1 spark四大特点
(1)快速
一般情况下,对于迭代次数较多的应用程序,Spark程序在内存中的运行速度是Hadoop MapReduce运行速度的100多倍,在磁盘上的运行速度是Hadoop MapReduce运行速度的10多倍
(2)易于使用
Spark支持使用Scala、Python、Java及R语言快速编写应用。同时Spark提供超过80个高阶算子,使得编写并行应用程序变得容易,并且可以在Scala、Python或R的交互模式下使用Spark。
(3)通用性强
Spark可以与SQL、Streaming及复杂的分析良好结合。Spark还有一系列的高级工具,包括Spark SQL、MLlib(机器学习库)、GraphX(图计算)和Spark Streaming(流计算),并且支持在一个应用中同时使用这些组件
(4) 随处运行
用户可以使用Spark的独立集群模式运行Spark,也可以在EC2(亚马逊弹性计算云)、Hadoop YARN或者Apache Mesos上运行Spark。并且可以从HDFS、Cassandra、HBase、Hive、Tachyon和任何分布式文件系统读取数据
(5)代码简洁
2. Spark的生态圈
Spark Core:Spark的核心,提供底层框架及核心支持。
BlinkDB:一个用于在海量数据上进行交互式SQL查询的大规模并行查询引擎,允许用户通过权衡数据精度缩短查询响应时间,数据的精度将被控制在允许的误差范围内。
Spark SQL:可以执行SQL查询,支持基本的SQL语法和HiveQL语法,可读取的数据源包括Hive、HDFS、关系数据库(如MySQL)等。
Spark Streaming:可以进行实时数据流式计算
MLBase:是Spark生态圈的一部分,专注于机器学习领域,学习门槛较低。
MLBase由4部分组成:MLlib、MLI、ML Optimizer和MLRuntime
Spark GraphX
图计算的应用在很多情况下处理的数据量都是很庞大的。如果用户需要自行编写相关的图计算算法,并且在集群中应用,难度是非常大的。而使用GraphX即可解决这个问题,因为它内置了许多与图相关的算法,如在移动社交关系分析中可使用图计算相关算法进行处理和分析。
SparkR
AMPLab发布的一个R语言开发包,使得R语言编写的程序不只可以在单机运行,也可以作为Spark的作业运行在集群上,极大地提升了R语言的数据处理能力。
3. Spark的应用场景
3.1 Yahoo
Yahoo将Spark用在Audience Expansion中。Audience Expansion是广告中寻找目标用户的一种方法,首先广告者提供一些观看了广告并且购买产品的样本客户,据此进行学习,寻找更多可能转化的用户,对他们定向广告。Yahoo采用的算法是Logistic Regression。同时由于某些SQL负载需要更高的服务质量,又加入了专门跑Shark的大内存集群,用于取代商业BI/OLAP工具,承担报表/仪表盘和交互式/即席查询,同时与桌面BI工具对接。
3.2 腾讯广告
广点通是最早使用Spark的应用之一。腾讯大数据精准推荐借助Spark快速迭代的优势,围绕“数据+算法+系统”这套技术方案,实现了在“数据实时采集、算法实时训练、系统实时预测”的全流程实时并行高维算法,最终成功应用于广点通pCTR投放系统上,支持每天上百亿的请求量。
3.3 淘宝
淘宝技术团队使用了Spark来解决多次迭代的机器学习算法、高计算复杂度的算法等,将Spark运用于淘宝的推荐相关算法上,同时还利用GraphX解决了许多生产问题,包括以下计算场景:基于度分布的中枢节点发现、基于最大连通图的社区发现、基于三角形计数的关系衡量、基于随机游走的用户属性传播等。
3.4 优酷土豆
目前Spark已经广泛使用在优酷土豆的视频推荐,广告业务等方面,相比Hadoop,Spark交互查询响应快,性能比Hadoop提高若干倍。一方面,使用Spark模拟广告投放的计算效率高、延迟小(同Hadoop比延迟至少降低一个数量级)。另一方面,优酷土豆的视频推荐往往涉及机器学习及图计算,而使用Spark解决机器学习、图计算等迭代计算能够大大减少网络传输、数据落地等的次数,极大地提高了计算性能。
4. Spark集群
4.1 软件环境
4.2 搭建单机版集群
下载Spark安装包到Windows本地。
将Spark安装包上传到Linux的/opt目录下。
将Spark安装包解压到/usr/local目录下。
进入到Spark安装包的bin目录下,使用SparkPi来计算Pi的值,其中参数2是指两个并行度,运行结果如下
4.3 搭建单机伪分布式集群
Spark单机伪分布式是在一台机器上既有Master,又有Worker进程。搭建Spark单机伪分布式环境可在Hadoop伪分布式的基础上进行搭建。
搭建Spark单机伪分布式集群的步骤如下。
(1)将Spark安装包解压到/usr/local目录下。
(2)进入到Spark安装包的conf目录下,将spark-env.sh.template复制为spark-env.sh。
(3)打开spark-env.sh文件,在文件末尾添加如下所示的内容。
(4)目录切换到sbin目录下启动集群。
(5)jps查看进程。
(6)使用计算SparkPi来计算Pi的值。
4.4搭建完全分布式集群
集群的拓扑图
4.5 搭建完全分布式集群
搭建Spark完全分布式集群的步骤如下。
(1)将Spark安装包解压至/usr/local目录下。
(2)切换至Spark安装目录的/conf目录下。
(3)配置文件。
(4)在主节点(master节点)中,将配置好的Spark安装目录远程复制至子节点(slave1、slave2节点)的/usr/local目录下。
(5)启动Hadoop集群,并创建/spark-logs目录。
(6)jps查看进程。
(7)切换至Spark安装目录的/sbin目录下,启动Spark集群。
注:Spark监控——http://master:8080
Spark监控——http://master:18080
5. Spark架构
基本组件:
客户端:用户提交作业的客户端。
Driver:运行Application的main()函数并创建SparkContext。
SparkContext:整个应用的上下文,控制应用的生命周期
Cluster Manager:资源管理器,即在集群上获取资源的外部服务,目前主要有Standalone(Spark原生的资源管理器)和YARN(Hadoop集群的资源管理器)。
SparkWorker:集群中任何可以运行应用程序的节点,运行一个或多个Executor进程。
Executor:执行器,在Spark Worker上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executor。
Task:被发送到某个Executor的具体任务。
6. Spark作业运行流程
Standalone模式运行流程
- 本地模式:
2) 集群模式 Spark Standalone:
3) 集群模式 Spark on Yarn (yarn是一个通用资源管理系统和调度平台)
yarn-client
yarn-cluster
7. Spark核心数据集RDD
RDD(Resilient Distributed Datasets弹性分布式数据集),可以简单的把RDD理解成一个提供了许多操作接口的数据集合,和一般数据集不同的是,其实际数据分布存储于一批机器中(内存或磁盘中)。
转换算子和行动算子
Spark RDD转换和操作示例
宽依赖与窄依赖
窄依赖:表现为一个父RDD的分区对应于一个子RDD的分区或者多个父RDD的分区对应于一个子RDD的分区。
宽依赖:表现为存在一个父RDD的一个分区对应一个子RDD的多个分区。
RDD Stage划分
8. MapReduce和Spark的对比
(1)mapreduce基于磁盘,spark基于内存。
(2)部署方式:都可以基于YARN,MapReduce基于YARN实现了MRAppMaster,Spark基于YARN实现了ApplicationMaster。
(3) Spark有灵活的内存管理和策略。
9. 结构化数据和非结构化数据
结构化数据(Structured Data) :结构化数据是用二维表格的形式进行数据的存储,二维表格由多列组成,每一-列的数据具有严格的同质性,所以每一行数据都具有完全相同的结构。关系数据库中的数据都属于结构化数据。
非结构化数据(Unstructured Data) :非结构化数据是相对于结构化数据而言的,有全文文本、图像、声音、影视、超媒体等形式,并以文件存储,这些数据形式就属于非结构化数据。非结构化数据存储在分布式文件系统中。
park监控——http://master:18080