欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spark学习一:Spark概述

程序员文章站 2024-01-01 15:21:46
1.1 什么是Spark ​ Apache Spark 是专为大规模数据处理而设计的 快速通用 的计算引擎。 ​ 一站式管理大数据的所有场景(批处理,流处理,sql) ​ spark不涉及到数据的存储,只做数据的计算 ​ Spark是UC Berkeley AMP lab (加州大学伯克利分校的AM ......

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学习一: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学习一:Spark概述

易用

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

Spark学习一:Spark概述

通用

spark提供了统一的解决方案。spark可以用于批处理(spark core)、交互式查询(spark sql)、实时流处理(spark streaming)、机器学习(spark mllib)和图计算(graphx)。这些不同类型的处理都可以在同一个应用中无缝使用。spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。

Spark学习一:Spark概述

兼容性

spark可以非常方便地与其他的开源产品进行融合。比如,spark可以使用hadoop的yarn和apache mesos作为它的资源管理和调度器,并且可以处理所有hadoop支持的数据,包括hdfs、hbase和cassandra等。这对于已经部署hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用spark的强大处理能力。spark也可以不依赖于第三方的资源管理和调度器,它实现了standalone作为其内置的资源管理和调度框架,这样进一步降低了spark的使用门槛,使得所有人都可以非常容易地部署和使用spark。此外,spark还提供了在ec2上部署standalone的spark集群的工具。

Spark学习一:Spark概述

1.3 spark的用户和用途

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

数据科学任务

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

数据处理应用

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

1.4 spark技术栈

spark技术栈:hdfs,hadoop,hive,mr,storm,sparkcore,sparksql,sparkstreaming

Spark学习一:Spark概述

mesos相当于yarn 资源调度框架

tachyon基于内存:内存文件系统

hdfs存储层(基于磁盘存储 block存储策略)

mesos资源调度/任务调度层

spark sql : 延迟应该在毫秒级别

spark core:批处理 延迟度非常高

spark streaming :流式处理 延迟5s左右

blinkdb:支持精确度查询的数据库

Spark学习一:Spark概述

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作业-磁盘

具体不同点

  1. spark相比于mr处理数据是可以基于内存来处理数据的
  2. spark与hadoop mr不同的是,任务的中间结果可以保存到内存中,大大地提高了计算性能.
  3. spark中有dag有向无环图来切分任务的执行先后顺序
  4. spark存储数据可以指定副本个数(持久化存储),mr默认3个。
  5. spark中做了很多已有的算子的封装,提供了各种场景的算子,而mr中只有map和reduce 相当于spark中的map和reducebykey两个算子
  6. spark是粗粒度资源申请,application执行快
  7. spark中shuffle map端自动聚合功能,mr手动设置
  8. spark中shuffle bypass机制有自己灵活的实现

Spark学习一:Spark概述

mr

Spark学习一:Spark概述

spark

Spark学习一: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概述

上一篇:

下一篇: