黑猴子的家:Spark 简介

1、官网

http://spark.apache.org

黑猴子的家:Spark 简介_第1张图片

2、Spark概念

Apache Spark是一个开源簇运算框架,最初是由加州大学柏克莱分校AMPLab所开发。相对于Hadoop的MapReduce会在运行完工作后将中介数据存放到磁盘中,Spark使用了内存内运算技术,能在数据尚未写入硬盘时即在内存内分析运算。Spark在内存内运行程序的运算速度能做到比Hadoop MapReduce的运算速度快上100倍,即便是运行程序于硬盘时,Spark也能快上10倍速度。Spark允许用户将数据加载至簇内存,并多次对其进行查询,非常适合用于[机器学习]。

使用Spark需要搭配簇管理员和分布式存储系统。Spark支持独立模式(本地Spark簇)、Hadoop YARN或Apache Mesos的簇管理。 在分布式存储方面,Spark可以和HDFS、 Cassandra、OpenStack Swift和Amazon S3等接口搭载。 Spark也支持伪分布式(pseudo-distributed)本地模式,不过通常只用于开发或测试时以本机文件系统取代分布式存储系统。在这样的情况下,Spark仅在一台机器上使用每个CPU核心运行程序。

3、Spark发展历程

Spark在2009年由Matei Zaharia在加州大学柏克莱分校AMPLab开创
2010年通过BSD许可协议开源发布。
2013年6月,该项目被捐赠给Apache软件基金会并切换许可协议至Apache2.0。
2014年2月,Spark成为Apache的顶级项目。
2014年11月,Databricks团队使用Spark 刷新数据排序世界记录。
2014年5月底Spark1.0.0发布。
2014年9月Spark1.1.0发布
2014年12月Spark1.2.0发布
2016年1月4号Spark1.6.0发布
2016年6月26号Spark2.0发布
时至今日的2.2.0版本
Spark作为Hadoop生态中重要的一员,其发展速度堪称恐怖,不过其作为一个完整的技术栈,在技术和环境的双重刺激下,得到如此多的关注也是有依据的。核心在于内存计算模型代替Hadoop生态的MapReduce离线计算模型,用更加丰富Transformation和Action算子来替代map,reduce两种算子。

4、Spark基本组件

黑猴子的家:Spark 简介_第2张图片

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 R
R 语言 在数据分析领域内应用十分广泛,但以前只能在单机环境上使用,Spark R 的出现使得R 摆脱单机运行的命运,将大量的数据工程师可以以非常小的成本进行分布式环境下的数据分析。
Spark R 是一个R 语言包,它提供了轻量级的方式使得可以在R语言中使用Apache Spark。在Spark 1.4 中,Spark R 实现了分布式的data frame,支持类似查询、过滤以及聚合操作(类似于R中的data frames:dplyr),但是这个可以操作大规模的数据集

集群管理器:Spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计 算。为了实现这样的要求,同时获得最大灵活性,Spark 支持在各种集群管理器(cluster manager)上运行,包括 Hadoop YARN、Apache Mesos,以及 Spark 自带的一个简易调度 器,叫作独立调度器。

5、Spark中的基本概念

Master: Spark集群的主节点,负责资源的调度,管理。

Worker:Spark集群中的工作节点,能够运行executor进程,运行作业代码的节点

Application:开发的Spark应用程序。

aplication Jar: 把写好的spark工程,打包成一个jar包,其中包括了所有的第三方jar依赖包。

SparkContext:SparkApp的入口,负责资源的调度,任务的分发。

RDD: (Resillient Distributed Dataset)弹性式分布式数据集,是SparkAPP的核心操作对象,也是最底层的数据抽象,一个RDD会被分为多个Partition(分区),每个分区分布在集群的不同节点上。

Local模式: Spark应用的本地模式,测试环境,不需要搭建集群环境就能够使用。

Standalone:原生的Master/Worker模式来运行APP。

Yarn:Yarn集群模式,通过Yran集群来进行SparkAPP的运行。

Driver Program:运行程序中main方法的进程,就是driver,也叫driver进程

Cluster Manager:集群管理器,就是为每个spark application,在集群中调度和分配资源的组件,比如Spark Standalone、YARN、Mesos等

Deploy Mode:部署模式,无论是基于哪种集群管理器,spark作业部署或者运行模式,都分为两种,client和cluster,client模式下driver运行在提交spark作业的机器上;cluster模式下,运行在spark集群中
Executor: 集群管理器为application分配的进程,运行在worker节点上,负责执行作业的任务,并将数据保存在内存或磁盘中,每个application都有自己的executor

Job:每个spark application,根据你执行了多少次action操作,就会有多少个job

Stage:每个job都会划分为多个stage(阶段),每个stage都会有对应的一批task,分配到executor上去执行

Task:driver发送到executor上执行的计算单元,每个task负责在一个阶段(stage),处理一小片数据,计算出对应的结果

6、Spark 与 Hadoop

说起Hadoop,可能第一个想到的就是MapReduce,MapReduce是Hadoop的核心,但不是全部,Hadoop早已经不是某个离线批处理框架了,而是代表了整个Hadoop生态系统,从页首的图可以看到Spark只是整个Hadoop生态系统的一部分。Spark仅仅能够代替Hadoop的MapReduce框架做内存计算。无论是交互式查询还是实时流处理数据均来源与Hadoop生态的组件:hbase,hive,Hdfs,Kafka...所以说Spark与Hadoop是密不可分的。

7、Spark特点


与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。计算的中间结果是存在于内存中的。

黑猴子的家:Spark 简介_第3张图片

易用

Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。


黑猴子的家:Spark 简介_第4张图片

通用

Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(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集群的工具。


黑猴子的家:Spark 简介_第5张图片

8、Spark的用户和用途

我们大致把Spark的用例分为两类:数据科学应用和数据处理应用。也就对应的有两种人群:数据科学家和工程师。

数据科学任务

主要是数据分析领域,数据科学家要负责分析数据并建模,具备 SQL、统计、预测建模(机器学习)等方面的经验,以及一定的使用 Python、 Matlab 或 R 语言进行编程的能力。

数据处理应用

工程师定义为使用 Spark 开发 生产环境中的数据处理应用的软件开发者,通过对接Spark的API实现对处理的处理和转换等任务。

9、Spark核心概念

每个Spark应用都由一个驱动器程序(driver program)来发起集群上的各种 并行操作。驱动器程序包含应用的 main 函数,并且定义了集群上的分布式数据集,还对这 些分布式数据集应用了相关操作。

驱动器程序通过一个 SparkContext 对象来访问 Spark。这个对象代表对计算集群的一个连 接。shell 启动时已经自动创建了一个 SparkContext 对象,是一个叫作 sc 的变量。

驱动器程序一般要管理多个执行器(executor)节点。


黑猴子的家:Spark 简介_第6张图片

10、大数据生态发展图

黑猴子的家:Spark 简介_第7张图片

11、大数据在企业中的应用

黑猴子的家:Spark 简介_第8张图片

你可能感兴趣的:(黑猴子的家:Spark 简介)