Spark概述
目录
一、Spark的产生背景
1)MapReduce的局限性
- 计算性能不是很好,MR的Task都是进程级别的,运行在JVM中,JVM的启动和销毁会消耗比较多资源
- 不适合交互式/多迭代计算,因为中间数据落地次数较多,会产生较多的磁盘IO、序列化、网络IO频繁
- 不适合流式处理
- 编程繁琐,要实现Map、Reduce、Job。
2)各种计算框架各自为战
如果业务场景既有离线处理、又有实时处理,需要搭建使用多套框架,导致学习、维护都比较麻。
因此诞生了像Spark、Flink这样的批流一体框架,一个框架可以处理N多不同的业务场景。
二、什么是Spark
通过Spark的产生背景,应该初步知道了Spark是做大数据的离线和实时处理。再对比与MR的局限性,我们应该猜到Spark编程应该更简洁,计算性能更好,适合交互式/多迭代计算。
看一下官网(http://spark.apache.org/)的介绍:
Apache Spark™ is a unified analytics engine for large-scale data processing.
Spark用于海量数据处理的通用引擎
三、Spark的特点
1) 运算速度快
- In-Memory:数据缓存在内存,相比于MR的落地磁盘,读写速度更快,而且Spark中间数据落地少
- DAG: 使用DAG调度,Spark的两个动作transformation和action操作,只有当遇到action才会真正执行作业
- Thread Model:task是线程级别的,相比于MR进程级别更加轻量级
- 优化:延迟调度,让计算跟着数据走,而不是让数据跟着计算走==>移动计算
2) 使用简单
- 提供了80多个高级API,方便快读编程
- 提供交互式命令行,方便快读测试
- 支持多种语言,例如Java、Scala、Python、R、SQL
- 可以直接访问不同的数据源,例如JSON、CSV、ORC、Parquet、JDBC、Hive
3) 通用性
- one stack to rule them all:一栈式解决方案
- Spark可以用于离线处理、实时处理、机器学习、图计算
4) 部署灵活
- 本身提供了Standlone模式,需要事先启动Spark相关服务
- 也可以运行在Hadoop YARN、Mesos、Kubernets
四、Spark重要版本的发布(待完善)
- 14年2月
- 成为顶级项目
- Spark1.0
- 引入Spark SQL
- Spark1.3
- 新增DataFrame API
- 新增Data Source V1
- Spark1.5
- 引入"钨丝"计划:通过对几个底层框架的优化进一步提高Spark的性能
- Spark1.6
- 新增Dataset API
- Spark2.0 16年
- DataFrame和Dataset的统一
- 引入SparkSession,提供了一个统一的入口(SQLContext和HiveContext)
- Spark2.3.0
- Data Source V2
- 3.0做了哪些更新
- 动态分区修剪(Dynamic Partition Pruning),运行时过滤掉无用数据,提高性能
- 自适应查询执行(Adaptive Query Execution)
- 加速器感知调度(Accelerator-aware Scheduling),将内置支持 GPU 调度