Spark概述

Spark是一个通用的大数据分析引擎,具有高性能、易用性和普遍性等特点。

架构

Spark架构如下图所示,基于Spark Core构建了Spark SQL、Spark Streaming、MLlib和Graphx四个主要编程库,分别用于离线ETL(Extract-Transform-Load)、在线数据分析、流计算、机器学习和图计算等场景,详情请参见Apache Spark官网Spark

使用场景

  • 离线ETL

    离线ETL主要应用于数据仓库,对大规模的数据进行抽取(Extract)、转换(Transform)和加载(Load),其特点是数据量大,耗时较长,通常设置为定时任务执行。

  • 在线数据分析(OLAP)

    在线数据分析主要应用于BI(Business Intelligence)。分析人员交互式地提交查询作业,Spark可以快速地返回结果。除了Spark,常见的OLAP引擎包括Presto和Impala等。Spark 3.0的主要特性在EMR中的Spark 2.4版本已支持,更多特性详情请参见Spark SQL Guide

  • 流计算

    流计算主要应用于实时大屏、实时风控、实时推荐和实时报警监控等。流计算主要包括Spark Streaming和Flink引擎,Spark Streaming提供DStream和Structured Streaming两种接口,Structured Streaming和Dataframe用法类似,门槛较低。Flink适合低延迟场景,而Spark Streaming更适合高吞吐的场景,详情请参见Structured Streaming Programming Guide

  • 机器学习

    Spark的MLlib提供了较丰富的机器学习库,包括分类、回归、协同过滤、聚合,同时提供了模型选择、自动调参和交叉验证等工具来提高生产力。MLlib主要支持非深度学习的算法模块,详情请参见Machine Learning Library (MLlib) Guide

  • 图计算

    Spark的GraphX支持图计算的库,支持丰富的图计算的算子,包括属性算子、结构算子、Join算子和邻居聚合等。详情请参见GraphX Programming Guide