什么是 Spark?

什么是 Spark?

信息时代,很多有先见的人嗅出海量爆炸数据中蕴含的巨大商机,于是设计了很多处理组件去高效处理分析这些数据,为商业决策提供了关键数据支撑。其中Spark就是很关键的组件之一,早先HADOOP中分布式文件系统HDFS和计算中间数据频繁存盘的MapReduce构建了数据分析任务执行引擎,利用一定规模的计算服务器上丰富的CPU,大并发执行分析算子处理海量数据;

随着硬件技术的成熟,内存容量的急剧扩大同时价格不断降低,基于磁盘慢计算的MapReduce逐渐退出了舞台,将数据放在内存计算的Spark迎来了高光,CPU将数据放在内存几十纳秒级的操作完胜几十毫秒级磁盘操作;曾今Spark在官网最显眼的地方贴出Spark相对MapReduce有2个数量级的性能提升,到如今Spark已经不再提及昔日的对手,可见内存计算架构的优势已经深入人心。

Spark 用四个英文单词描述了自己的特点:Simple(简单易用)、Fast(性能卓越)、Scalable(单机or集群,扩容不是事)、Unified(在座谈编程语言排名的都是垃圾,Spark计算接口调用支持Python,SQL,Java,Scala,R;C++和C的请让一让)

Spark根据源数据的数据格式,提供了不同的功能组件分类高效处理;1) 其中最简单对没有结构化的数据使用RDD(弹性数据集)模式计算,支持批处理(先收集数据,后离线处理)和流处理(实时性强,小块数据流式实时处理),分别对应的module是Spark Core和Spark Streaming,但是当前Streaming比较流行的是Flink组件。2)对结构化的源数据,Spark SQL支持按照ANSI SQL的语法对数据进行联机分析处理(OLAP),通过SQL语法树解析为逻辑计划,再转化为spark可以执行的物理计划,最终转化为Spark core可以处理的RDD编程;3)此外提供了图计算Graphx和机器学习场景Mlib,至于探索性数据分析(EDA)笔者并没有在Spark源码下找到对应的module,是否是一个泛的概念,还有待验证。