Spark基础及架构
为什么使用Spark
(1)MapReduce编程模型的局限性
- 1、繁杂
只有Map和Reduce两个操作,复杂的逻辑需要大量的样板代码 - 2、处理效率低:
Map中间结果写磁盘,Reduce写HDFS,多个Map通过HDFS交换数据
任务调度与启动开销大 - 3、不适合迭代处理、交互式处理和流式处理
(2)Spark是类Hadoop MapReduce的通用并行框架
- 1、Job中间输出结果可以保存在内存,不再需要读写HDFS
- 2、比MapReduce平均快10倍以上
Spark优势
- 1、速度快
基于内存数据处理,比MR快100个数量级以上(逻辑回归算法测试)
基于硬盘数据处理,比MR快10个数量级以上 - 2、易用性
支持Java、Scala、Python、R语言
交互式shell方便开发测试 - 3、通用性
一栈式解决方案:批处理、交互式查询、实时流处理、图计算及机器学习 - 4、随处运行
YARN、Mesos、EC2、Kubernetes、Standalone、Local
Spark技术栈
- 1、Spark Core
核心组件,分布式计算引擎 - 2、Spark SQL
高性能的基于Hadoop的SQL解决方案 - 3、Spark Streaming
可以实现高吞吐量、具备容错机制的准实时流处理系统 - 4、Spark GraphX
分布式图处理框架 - 5、Spark MLlib
构建在Spark上的分布式机器学习库
Spark架构设计
运行架构
1、在驱动程序中,通过SparkContext主导应用的执行
2、SparkContext可以连接不同类型的Cluster Manager(Standalone、YARN、Mesos),连接后,获得集群节点上的Executor
3、一个Worker节点默认一个Executor,可通过SPARK_WORKER_INSTANCES调整
4、每个应用获取自己的Executor
5、每个Task处理一个RDD分区
Spark架构核心组件
Spark API
- 1、创建SparkContext
a)连接Driver与Spark Cluster(Workers)
b)Spark的主入口
c)每个JVM仅能有一个活跃的SparkContext
d)SparkContext.getOrCreate
- 2、创建SparkSession
a)Spark 2.0+应用程序的主入口:包含了SparkContext、SQLContext、HiveContext以及StreamingContext
b)SparkSession.getOrCreate