2、spark概述
2.1 什么是spark
-
Apache Spark™ is a unified analytics engine for large-scale data processing.
-
apache的spark是一个针对于大规模数据处理的统一分析引擎
spark是基于内存的计算框架,计算速度非常快,但是这里仅仅只涉及到数据的计算,并没有涉及到数据的存储。
后期需要进行数据的计算,这里就可以对接不同的外部数据源(比如hdfs)
2.2 为什么要学习spark
-
就是由于spark的处理速度比mapreduce要快很多,后期很受企业青睐。
####3、spark的四大特性
3.1、速度快
-
spark比mapreduce在内存中快100倍,比mapreduce在磁盘中快10倍
-
spark比mapreduce快很多的主要的2个原因:
(1)mapreduce在处理任务的时候,每一个job的输出结果都会落地到磁盘,后续有其他的job需要依赖于前面job的输出结果,这个时候只能够从磁盘中加载得到,需要大量的磁盘io操作;
spark在处理任务的时候,每一个job的输出结果可以保存在内存中,后续有其他的job需要依赖于前面job的输出结果,这个时候就可以直接从内存获取得到,大大减少磁盘io操作,最后性能肯定是大大的提升。
例如:hivesql---> select name,age from (select * from user where age >30);
job2<-------------------job1
map 0% reduce 0%
map 10% reduce 0%
(2) mapreduce任务是以进程的方式运行在yarn集群中。比如说一个mapreduce任务中有100个MapTask,
后期要处理这100个MapTask就需要开启100个进程;
spark任务是以线程的方式运行在spark集群中进程里面,比如说一个spark任务有100个MapTask,
这个时候可以极端一点,只需要启动一个进程,在一个进程中运行100个线程中就可以,进程的启动与线程的启动代价肯定是不一样,一个进程的启动需要的调度时间和资源远远大于一个线程。
3.2、易用性
-
可以快速写一个spark应用程序,通过java、scala、python、R、sql等不同的语言进行代码开发。
3.3、通用性
-
spark框架不再是一个简单的框架,它发展成一个生态系统
-
就包括了sparksql、sparkStreaming、Mlib、Graphx不同的子项目
-
后期按照公司当前的业务需求就可以灵活的使用到这些不同的子项目
-
一站式解决所有应用场景
-
离线
-
实时
-
机器学习算法库
-
图计算、图挖掘
-
-
3.4、兼容性
-
spark任务就是一个计算程序,哪里可以给当前这个任务提供计算资源,我们就可以把这个任务提交到哪里去运行。
-
standAlone
-
它是spark集群自带的模式,整个任务的资源分配由Master老大去负责
-
-
yarn
-
可以把spark程序提交到yarn中运行,整个任务的资源分配由ResourceManager负责
-
-
mesos
-
-
MapReduce的缺点:
(1)计算过程较慢,不适应交互式计算,不适应迭代计算;
(2)不是所有的计算都由map和reduce两个阶段构成。
Spark解决了以上问题:
(1)内存存储中间结果;
(2)提供了更好的API --> 函数式。
Spark和Hadoop的异同:
Hadoop | Spark | |
类型 | 基础平台, 包含计算, 存储, 调度 | 分布式计算工具 |
场景 | 大规模数据集上的批处理 | 迭代计算, 交互式计算, 流计算 |
延迟 | 大 | 小 |
易用性 | API 较为底层, 算法适应性差 | API 较为顶层, 方便使用 |
价格 | 对机器要求低, 便宜 | 对内存有要求, 相对较贵 |
小结:
-
Spark 提供了 批处理(RDDs), 结构化查询(DataFrame), 流计算(SparkStreaming), 机器学习(MLlib), 图计算(GraphX) 等组件
-
这些组件均是依托于通用的计算引擎 RDDs 而构建出的, 所以
spark-core
的 RDDs 是整个 Spark 的基础
Spark 集群结构:
Spark 自身是没有集群管理工具的, 但是如果想要管理数以千计台机器的集群, 没有一个集群管理工具还不太现实, 所以 Spark 可以借助外部的集群工具来进行管理
整个流程就是使用 Spark 的 Client 提交任务, 找到集群管理工具申请资源, 后将计算任务分发到集群中运行:
名词解释:(对照上图)
-
Driver
该进程调用 Spark 程序的 main 方法, 并且启动 SparkContext
-
Cluster Manager
该进程负责和外部集群工具打交道, 申请或释放集群资源
-
Worker
该进程是一个守护进程, 负责启动和管理 Executor
-
Executor
该进程是一个JVM虚拟机, 负责运行 Spark Task
运行一个 Spark 程序大致经历如下几个步骤
-
启动 Drive, 创建 SparkContext
-
Client 提交程序给 Drive, Drive 向 Cluster Manager 申请集群资源
-
资源申请完毕, 在 Worker 中启动 Executor
-
Driver 将程序转化为 Tasks, 分发给 Executor 执行
问题一: Spark 程序可以运行在什么地方?
|
Spark 可以将任务运行在两种模式下:
-
单机, 使用线程模拟并行来运行程序
-
集群, 使用集群管理器来和不同类型的集群交互, 将任务运行在集群中
Spark 可以使用的集群管理工具有:
-
Spark Standalone
-
Hadoop Yarn
-
Apache Mesos
-
Kubernetes
问题二: Driver 和 Worker 什么时候被启动?
-
-
Standalone 集群中, 分为两个角色: Master 和 Slave, 而 Slave 就是 Worker, 所以在 Standalone 集群中, 启动之初就会创建固定数量的 Worker
-
Driver 的启动分为两种模式: Client 和 Cluster. 在 Client 模式下, Driver 运行在 Client 端, 在 Client 启动的时候被启动. 在 Cluster 模式下, Driver 运行在某个 Worker 中, 随着应用的提交而启动
-
在 Yarn 集群模式下, 也依然分为 Client 模式和 Cluster 模式, 较新的版本中已经逐渐在废弃 Client 模式了, 所以上图所示为 Cluster 模式
-
如果要在 Yarn 中运行 Spark 程序, 首先会和 RM 交互, 开启 ApplicationMaster, 其中运行了 Driver, Driver创建基础环境后, 会由 RM 提供对应的容器, 运行 Executor, Executor会反向向 Driver 反向注册自己, 并申请 Tasks 执行
-
在后续的 Spark 任务调度部分, 会更详细介绍
-
-
Master
负责总控, 调度, 管理和协调 Worker, 保留资源状况等 -
Slave
对应 Worker 节点, 用于启动 Executor 执行 Tasks, 定期向 Master汇报 -
Driver
运行在 Client 或者 Slave(Worker) 中, 默认运行在 Slave(Worker) 中
==========================================
Spark入门
一、 课程目标
目标1:熟悉Spark相关概念
目标2:搭建一个Spark集群
目标3:编写简单的Spark应用程序
二、 Spark概述
2.1什么是Spark(官网:http://spark.apache.org)
Spark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLlib等子项目,Spark是基于内存计算的大数据并行计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。Spark得到了众多大数据公司的支持,这些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里、
腾讯、京东、携程、优酷土豆。当前百度的Spark已应用于凤巢、大搜索、直达号、百度大数据等业务;阿里利用GraphX构建了大规模的图计算和图挖掘系统,实现了很多生产系统的推荐算法;腾讯Spark集群达到8000台的规模,是当前已知的世界上最大的Spark集群。
2.2为什么要学Spark
Spark是一个开源的类似于Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Spark中的Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。
Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生态系统,以弥补MapReduce的不足。
2.3 Spark特点
2.3.1 快
与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。
2.3.2 易用
Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。
2.3.3 通用
Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。
2.3.4 兼容性
Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具。