天天看点

流批一体的Spark,是如何做到复杂、大量、快速的数据计算呢?

作者:积极的像风一样自由

2020年,阿里巴巴实时计算团队提出“流批一体”的理念,使用同一套 API、同一套开发范式来实现大数据的流计算和批计算,进而保证处理过程与结果的一致性。

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。

一、Spark和Hadoop、MapReduce、Flink的关系

流批一体的Spark,是如何做到复杂、大量、快速的数据计算呢?

Spark和Hadoop的关系:Spark可以与Hadoop进行高度的集成,完美配合使用。Hadoop的HDFS、Hive、HBase负责存储,Spark负责复杂、大量和快速的数据计算。

Spark 和 MapReduce 的关系:Spark和MapReduce都是可以处理海量数据,但是在处理方式和处理速度上存在着差异。

spark处理数据是基于内存的,而MapReduce是基于磁盘处理数据的。Spark默认存储级别为MEMORY_ONLY,I/O少,速度快,是MapReuce的上百倍。

MapReduce只支持Java编程语言,但是Spark支持Java,Scala,Python和R等多种编程语言。

MapReduce主要用于处理结构化数据,Spark支持处理各种数据类型,包括结构化数据,半结构化数据和非结构化数据。

SPARK和Flink的关系:Spark和Flink都属于流批一体的分布式计算引擎。Flink属于流处理框架,通过流来模拟批,Spark属于批处理框架,通过批来模拟流。其分别属于Lambda架构和Dataflow架构。

二、Spark干货要点

Spark 架构的四大组件: Spark SQL(离线批处理); Spark Streaming(实时流处理); Spark MLlib(机器学习),机器学习的算法库; Spark GraphX(图计算),图计算的算法库。

流批一体的Spark,是如何做到复杂、大量、快速的数据计算呢?

Spark支持哪些数据源: Json,文本文件、 RDD、 Hive 数据、 HBase 数据。

Spark RDD:RDD(Resilient Distributed Dataset,弹性分布式数据集),是Spark 中最基本的数据抽象。

RDD是只读的,想要修改 RDD,只能生成一个新的 RDD; RDD逻辑上是分区的,通过compute函数得到每个分区的数据;血统机制,RDDS之间维系血缘以来关系;RDDS的弹性,指的是默认存储在内存里,如果内存不足会刷写到磁盘。

RDD数据来源,从 HDFS 读取,从其他兼容系统读取,从并行集合生成,从已有的 RDD 生成新的 RDD。

Spark的两大算子:Transformation 算子和 Action 算子,都是基于 RDD 实现的。Spark Action 算子(行动算子)真正触发 Spark 应用,数据可以写出到 HDFS、数据库、硬盘,但不包含 CPU。

Spark的宽窄依赖:Spark宽依赖,指的是一对多关系(一个RDD可通过一个或多个RDD进行转换生成), 通过aggregateByKey 、reduceByKey、Join、Group等函数得到; Spark窄依赖:指的是一对一关系(一个RDD通过一个RDD转换生成), 通过map、filter函数得到。

流批一体的Spark,是如何做到复杂、大量、快速的数据计算呢?

Spark 在 YARN 平台中运行,一个 Container 中可以运行多个 Spark 任务。

Spark 2.0 引入了 Spark Session 的概念,作为用户统一切入点。

图片来自网络,如有侵权,请联系我删除,谢谢!

继续阅读