Spark 是基于内存计算的分布式大数据处理框架,由加州大学伯克利分校 AMPLab 开发,现已成为 Apache 顶级项目。以下是其核心要点:
核心特点
1. 内存计算:数据可驻留内存,大幅提升迭代计算(如机器学习、图计算)效率,比 Hadoop MapReduce 快数倍至数十倍。
2. 多语言支持:原生支持 Scala、Java、Python、R,提供统一 API。
3. 一站式生态:集成 Spark SQL(结构化数据)、Spark Streaming(流处理)、MLlib(机器学习)、GraphX(图计算),覆盖数据处理全流程。
4. 高兼容性:可读写 HDFS、HBase、Kafka 等数据源,无缝集成 Hadoop 生态。
5. 灵活部署:支持本地模式、集群模式(YARN/Mesos/Kubernetes),适配不同规模场景。
核心概念
1. 弹性分布式数据集(RDD)
- Spark 的基本数据结构,代表分布式存储的不可变数据集合,支持 转换(Transformation) 和 动作(Action) 操作。
- 例: rdd = sc.parallelize([1, 2, 3]) (创建 RDD), rdd.filter(x > 2).collect() (转换+动作)。
2. 分布式计算模型
- Driver Program:协调任务的主程序,负责调度作业(Job)。
- Executor:实际执行任务的进程,分布在集群节点,负责存储和计算。
- DAG(有向无环图):任务执行流程的逻辑图,Spark 自动优化任务调度。
主要组件
- Spark Core:提供内存计算和分布式任务调度的基础能力。
- Spark SQL:支持 SQL 和 DataFrame/Dataset 接口,处理结构化数据,兼容 Hive。
- Spark Streaming:支持实时流数据处理,基于微批(Micro-Batch)或持续处理模型。
- MLlib:内置机器学习算法库,支持分类、回归、聚类等。
- GraphX:图计算组件,支持图遍历、PageRank 等算法。
典型应用场景
- 批量数据处理:替代 MapReduce,处理离线日志、ETL 任务。
- 实时流处理:分析实时日志、传感器数据(如 Kafka 数据源)。
- 交互式分析:通过 Spark SQL 或 Jupyter 进行即席查询(Ad-hoc Query)。
- 机器学习与图计算:构建推荐系统、社交网络分析等。
与 Hadoop 的关系
- 互补而非替代:Spark 依赖 Hadoop 的 HDFS 存储数据,YARN 管理资源,但计算层性能远超 MapReduce。
- 生态整合:Spark 可直接读取 Hive 表数据,或通过 HBase 实现实时数据读写。
快速入门步骤
1. 安装 Spark:下载二进制包,配置环境变量(需提前安装 Java/Scala/Python)。
2. 启动交互式环境:
spark-shell # Scala 环境
pyspark # Python 环境
3. 运行第一个程序:
val data = sc.parallelize(1 to 1000)
val result = data.filter(_ % 2 == 0).count()
println(result) // 输出偶数个数
如需深入某部分(如架构原理、代码示例),可随时告知!