1.Spark概述

  • Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。
  • Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行计算框架,Spark拥有Hadoop MapReduce所具有的优点;
  • 但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
  • Spark是Scala编写,方便快速编程。


2.Spark特性

Speed 速度

Apache Spark是什么 apache spark介绍_Apache Spark是什么

  • Apache Spark™是一个用于大规模数据处理的统一分析引擎。
  • Apache Spark使用最先进的DAG调度器、查询优化器和物理执行引擎,实现了批处理和流数据的高性能。
  • 在逻辑回归的情况下Spark比Hadoop快100倍以上(机器学习和 不断迭代计算下 ) 其他场景一般也会更快但不会达到这么夸张

速度快的本质:

  • 内存计算 (省略了多次磁盘IO读写)
  • DAGScheduler (有向无环图调度器)
  • ……

(磁盘IO是数据读写的瓶颈 与hdfs相比spark将数据存储在内存中 忽略了磁盘IO 而hdfs多次读写磁盘IO因此spark更快)

Ease of Use 易用性

  • 用Java、Scala、Python、R和SQL快速编写应用程序。(开发人员使用而定)
  • Spark提供了80多个高级操作符,可以轻松构建并行应用程序。您可以在Scala、Python、R和SQL shell中交互式地使用它。

Generalith 普遍性

  • 结合SQL、流和复杂的分析。
  • Spark支持一组库,包括SQL和DataFrames、用于机器学习的MLlib、GraphX和Spark流。您可以在同一个应用程序中无缝地组合这些库。------ 一站式开发
  • 基本上开发只需安装spark即可(因为我们要将数据存储在hdfs上,因此需要安装hadoop)

Apache Spark是什么 apache spark介绍_Hadoop_02


Runs Everywhere 多处运行

  • Spark运行在Hadoop、Apache Mesos、Kubernetes、独立或云上。它可以访问不同的数据源。
  • 您可以使用Spark的独立集群模式在EC2、Hadoop纱线、Mesos或Kubernetes上运行Spark。访问HDFS、Alluxio、Apache Cassandra、Apache HBase、Apache Hive和数百个其他数据源中的数据。
  • Apache Spark是什么 apache spark介绍_Apache_03

  • 这里使用Spark 2.3.1版本 hadoop 2.6.5版本
    版本更新兼容是个棘手的问题

Spart 2.3.1对应以下:
Spark可以在Java 8+、Python 2.7+/3.4+和R 3.1+上运行。对于Scala API, Spark 2.3.1使用Scala 2.11。您需要使用一个兼容的Scala版本(2.11.x)。

注意,在Spark 2.2.0中,对Java 7、Python 2.6和2.6.5之前的旧Hadoop版本的支持都被删除了。从2.3.0开始,对Scala 2.10的支持就被取消了。

3.总体技术栈讲解

Apache Spark是什么 apache spark介绍_Apache Spark是什么_04


右上5项为spark 当然有的示例图还有zookeeper…



4.Spark演变历史

Spark 相比 hadoop历史

– 发展尤为迅速

– Hadoop历史2006~2019 13年时间

– Spark2012~2019 7年时间

Apache Spark是什么 apache spark介绍_Apache Spark是什么_05




5.Spark与MapReduce的区别

Apache Spark是什么 apache spark介绍_Apache Spark是什么_06


解析:

  • 切片数量就是map task数量
    buffer in memory(环形内存缓冲区)
    100M 80% 开始溢写 多次溢写产生多个文件
    文件中竖杠代表分区
    合并文件(也有分区)
    拉取到reduce和其他区域
    reduce分片
  • 每个document一定会有id (put post 一个有id 一个没有id也会产生随机id)
  • 根据document的id 求hash 再根据分片数求余 决定这个document放在哪个分片里面

REDIS集群hash计算采用CRC16

Spark 对比 Mapreduce

Apache Spark是什么 apache spark介绍_Apache_07


快不只因为Spark内存计算 还有DAG(DAGShecdule)

Apache Spark是什么 apache spark介绍_Hadoop_08


两者都是分布式计算框架,Spark基于内存,MR基于HDFS。Spark处理数据的能力一般是MR的十倍以上,Spark中除了基于内存计算外,还有DAG有向无环图来切分任务的执行先后顺序。

Spark API
Scala(很好)
Java(不错)
Python(……)

spark源码是用scala书写的 scala与java很相似

6.Spark运行模式

  • Local
    多用于本地测试,如在eclipse,idea中写程序测试等。
  • Standalone
    Standalone是Spark自带的一个资源调度框架,它支持完全分布式。
  • Yarn
    Hadoop生态圈里面的一个资源调度框架,Spark也是可以基于Yarn来计算的。
  • Mesos
    资源调度框架。

要基于Yarn来进行资源调度,必须实现AppalicationMaster接口,Spark实现了这个接口,所以可以基于Yarn。