版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
官方网址:http://spark.apache.org/、https://databricks.com/spark/about
目录
Spark文章系列的划分
本次我准备分为如下7个部分来进行讲解Spark,总的来说分为Spark 基础环境、Spark 离线分析和Spark实时分析三个大的方面,如下图所示
第一方面、Spark基础环境
- 主要讲述Spark框架安装部署及开发运行,如何在本地模式和集群模式运行,使用spark-shell及IDEA开发应用程序,测试及打包提交运行集群。
第二方面、Spark 离线分析
- Spark 核心基础:SparkCore模块,主要讲解Spark框架核心数据结构RDD及重要函数使用,如何链式编程处理分析数据;
- Spark 交互式分析:SparkSQL模块,针对结构化数据处理分析,将数据封装在DataFrame 和Dataset,调用API或者使用SQL分析数据;
- 离线综合案例:以DMP广告点击业务数据,对数据进行ETL解析和广告相关指标报表统计, 集成Oozie和Hue调度执行应用,以及使用Livy使用Rest方式提交应用;
第三方面、Spark 实时分析
- Spark 流式分析:SparkStreaming模块,针对流式数据,采用微批处理Batch方式实时处理数据数据,可以无状态、有状态及窗口操作分析;
- Spark 新型流式分析:StructuredStreaming模块,结构化流式处理框架,可以认为是使用SparkSQL编程方式处理流式的数据,更加灵活方便;
- 实时综合案例:以仿双十一实时订单大屏为例,模拟实时产生订单数据发送Kafka,实时消费统计订单指标,保存结果至内存数据库Redis,以供前端大屏展示;将消费Kafka数据偏移量存储Zookeeper中,考虑实时应用的停止升级及测试环境的压力测试和性能优化。
Spark框架概述
Spark 是加州大学伯克利分校AMP实验室( Algorithms Machines and People Lab) 开发的通用大数据出来框架。Spark生态栈也称为BDAS, 是伯克利AMP实验室所开发的, 力图在算法( Algorithms)、机器( Machines)和人( Person)三种之间通过大规模集成来展现大数据应用的一个开源平台。AMP实验室运用大数据、云计算等各种资源以及各种灵活的技术方案, 对海量数据进行分析并转化为有用的信息, 让人们更好地了解世界。
Spark的发展历史, 经历过几大重要阶段, 如下图所示:
Spark 是一种快速、通用、可扩展的大数据分析引擎,2009 年诞生于加州大学伯克利分校AMPLab,2010 年开源, 2013年6月成为Apache孵化项目,2014年2月成为 Apache 顶级项目, 用 Scala进行编写项目框架。
Spark是什么
Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎。
官方定义:
Spark 最早源于一篇论文 Resilient Distributed Datasets: A Fault-Tolerant Abstraction for
In-Memory Cluster Computing,该论文是由加州大学柏克莱分校的 Matei Zaharia 等人发表的。论文中提出了一种弹性分布式数据集(即 RDD)的概念,原文开头对其的解释是:
翻译过来就是:RDD 是一种分布式内存抽象,其使得程序员能够在大规模集群中做内存运算,并且有一定的容错方式。而这也是整个 Spark 的核心数据结构,Spark 整个平台都围绕着RDD进行。
Spark 四大特点
Spark 使用Scala语言进行实现,它是一种面向对、函数式编程语言,能够像操作本地集合一样轻松的操作分布式数据集。Spark具有运行速度快、易用性好、通用性强和随处运行等特点。
速度快
由于Apache Spark支持内存计算,并且通过DAG(有向无环图)执行引擎支持无环数据流, 所以官方宣称其在内存中的运算速度要比Hadoop的MapReduce快100倍,在硬盘中要快10倍。
Spark处理数据与MapReduce处理数据相比,有如下两个不同点:
- 其一、Spark处理数据时,可以将中间处理结果数据存储到内存中;
- 其二、Spark Job调度以DAG方式,并且每个任务Task执行以线程(Thread)方式,并不是像MapReduce以进程(Process)方式执行。
2014 年的如此Benchmark测试中,Spark 秒杀Hadoop,在使用十分之一计算资源的情况下, 相同数据的排序上,Spark 比Map Reduce快3倍!
易于使用
Spark 的版本已经更新到 Spark 2.4.5(截止日期2020.05.01),支持了包括 Java、Scala、Python 、R和SQL语言在内的多种语言。
通用性强
在 Spark 的基础上,Spark 还提供了包括Spark SQL、Spark Streaming、MLib 及GraphX在内的多个工具库,我们可以在一个应用中无缝地使用这些工具库。其中,Spark SQL 提供了结构化的数据处理方式,Spark Streaming 主要针对流式处理任务(也是本书的重点),MLlib提供了很多有用的机器学习算法库,GraphX提供图形和图形并行化计算。
运行方式
Spark 支持多种运行方式,包括在 Hadoop 和 Mesos 上,也支持 Standalone的独立运行模式,同时也可以运行在云Kubernetes(Spark 2.3开始支持)上。
对于数据源而言,Spark 支持从HDFS、HBase、Cassandra 及 Kafka 等多种途径获取数据。
Spark 框架模块
整个Spark 框架模块包含:Spark Core、 Spark SQL、 Spark Streaming、 Spark GraphX、Spark MLlib,而后四项的能力都是建立在核心引擎之上 。
Spark Core
实现了 Spark 的基本功能,包含RDD、任务调度、内存管理、错误恢复、与存储系统交互等模块。数据结构:RDD
官网:http://spark.apache.org/
Spark SQL
Spark 用来操作结构化数据的程序包。通过 Spark SQL,可以使用 SQL操作数据。数据结构: Dataset/DataFrame = RDD + Schema
官网:http://spark.apache.org/sql/
Spark Streaming
Spark 提供的对实时数据进行流式计算的组件。提供了用来操作数据流的 API。 数据结构: DStream = Seq[RDD]
官网:http://spark.apache.org/streaming/
Spark MLlib
提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。 数据结构:RDD或者DataFrame
官网:http://spark.apache.org/mllib/
Spark GraphX
Spark中用于图计算的API,性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。数据结构:RDD或者DataFrame
官网:http://spark.apache.org/graphx/
Structured Streaming
Structured Streaming结构化流处理模块,将流式结构化数据封装到DataFrame中进行分析。
Structured Streaming是建立在SparkSQL引擎之上的可伸缩和高容错的流式处理引擎,可以像操作静态数据的批量计算一样来执行流式计算。当流式数据不断的到达的过程中Spark SQL的引擎会连续不断的执行计算并更新最终结果。
官网:http://spark.apache.org/docs/2.4.5/structured-streaming-programming-guide.html
Spark 运行模式
Spark 框架编写的应用程序可以运行在本地模式(Local Mode)、集群模式(Cluster Mode) 和云服务(Cloud),方便开发测试和生产部署。
第一、本地模式:Local Mode
将Spark 应用程序中任务Task运行在一个本地JVM Process进程中,通常开发测试使用。
第二、集群模式:Cluster Mode
将Spark应用程序运行在集群上,比如Hadoop YARN集群,Spark 自身集群Standalone及Apache Mesos集群,网址:http://spark.apache.org/docs/2.4.3/
- Hadoop YARN集群模式(生产环境使用):运行在 yarn 集群之上,由 yarn 负责资源管理,Spark 负责任务调度和计算,好处:计算资源按需伸缩,集群利用率高,共享底层存储,避免数据跨集群迁移。
- Spark Standalone集群模式(开发测试及生成环境使用):类似Hadoop YARN架构,典型的Mater/Slaves模式,使用Zookeeper搭建高可用,避免Master是有单点故障的。
- Apache Mesos集群模式(国内使用较少):运行在 mesos 资源管理器框架之上,由 mesos 负责资源管理,Spark 负责任务调度和计算。
第三、云服务:Kubernetes 模式
中小公司未来会更多的使用云服务,Spark 2.3开始支持将Spark 开发应用运行到K8s上。
结束
Spark相关的介绍就到这里就结束了,下一篇文章会带大家快速入门一下。