Apache Spark 内存计算框架简介
1. spark是什么?
Apache Spark™ is a unified analytics engine for large-scale data processing.
spark是针对于大规模数据处理的统一分析引擎
- spark 是在Hadoop基础上的改进,基于map reduce算法实现的分布式计算框架,所以spark 拥有Hadoop MapReduce所具有的优点。
- spark 不同于 MapReduce 的是 spark 的 Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于需要迭代的map reduce的算法,如数据挖掘与机器学习等。
- spark是基于内存计算框架,计算速度非常快,但是它仅仅只是涉及到计算,并没有涉及到数据的存储,后期需要使用spark对接外部的数据源,比如hdfs。
2. spark四大特性
-
特性一: 速度快
spark 比 marpreduce 快的两个主要原因
- spark基于内存
- mapreduce 在计算的时候,每一个 job 的输出结果都会落地到磁盘,后续其他 job 需要依赖前面 job 的输出结果,此时需要进行大量的磁盘IO,性能较低。
- spark 任务后期再计算的时候,job(任务)的输出结果可以保存到内存中,后续其他 job 需要依赖前面 job 的输出结果,可以直接从内存中获取,避免了磁盘IO,性能较高。
- 需注意,对于spark 程序 和 mapreduce 程序都会产生shuffle 阶段,在shuffle 阶段他们产生的数据都会落到磁盘。
- 进程与线程
- mapreduce 任务以进程的方式运行在 yarn 集群中,一个task 就需要一个进程。
- spark任务以线程的方式运行在进程中,进程中可以启动多个线程,一个线程对应一个task。
- 系统开启一个进程与开启一个线程所需要的时间和调度代价是不一样的,开启一个进程所需要的时间远远大于开启一个线程。
-
特性二: 易用性
可以通过 Java/Scala/python/SQL等不同语言,编写spark程序。 -
特性三:通用性
spark框架不是一个简单的框架,可以把spark理解成一个生态系统,它内部包含了很多模块,基于不同的应用场景可以选择不同的模块去使用。
- sparksql:通过 sql 去开发 spark 程序做一些离线分析。
- sparkStreaming:主要应用在实时计算场景
- Mlib:封装了机器学习的算法库
- Graphx:图计算
-
特性四:兼容性
spark有三种运行模式
- standAlone:是spark自带的独立运行模式,整个任务的资源分配由spark集群中的Master负责。
- yarn:可以把spark程序提交到yarn中运行,整个任务的资源分配由 yarn 中的 ResourceManager负责。
- mesos:apache开源的类似于yarn的资源调度平台。
3. spark 集群架构
spark集群架构元素说明
- Driver
执行客户端写好的main方法,构建SparkContent对象,该对象是所有spark程序的执行入口。
- Cluster Manager
给程序提供计算资源的外部服务,在standalone模式中即为Master主节点,监控整个集群,监控worker。在 Yarn 模式中为资源管理器。
- Executor
执行器,是为某个 Application 运行在 worker node 上的一个进程。
- Task
spark 任务是以 task 线程的方式运行在 worker 节点对应的 executor 进程中。
4. Spark 与 Hadoop
- Spark本身并没有提供分布式文件系统,所以Spark的分析大多依赖于Hadoop的分布式文件系统HDFS。
- Hadoop 有两个核心模块,分别是分布式文件存储系统HDFS和分布式计算框架Map Reduce,Hadoop 的Map Reduce 与 Spark都可以进行数据计算,但是Spark的速度更快,性能更好。