Skip to content

Spark 分布式计算

核心概念

Spark 是基于内存的分布式计算框架,比 MapReduce 快 10-100 倍。

对比项SparkMapReduce
计算模式内存计算,迭代快磁盘中间结果,迭代慢
编程模型RDD/DataFrame/SQLMap + Reduce 两阶段
延迟低(毫秒~秒级)高(分钟级)
适用场景迭代计算、机器学习、实时处理批量离线处理

核心组件

组件功能
Spark CoreRDD 底层抽象,任务调度
Spark SQL结构化数据处理,兼容 Hive
Spark Streaming实时流处理(微批模式)
MLlib机器学习算法库
GraphX图计算

RDD 与 DataFrame

python
from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("example") \
    .master("local[*]") \
    .getOrCreate()

# DataFrame 方式(推荐)
df = spark.read.parquet("hdfs://path/data.parquet")
df.filter(df["age"] > 20) \
  .groupBy("city") \
  .count() \
  .show()

# Spark SQL
df.createOrReplaceTempView("users")
spark.sql("SELECT city, COUNT(*) FROM users WHERE age > 20 GROUP BY city").show()

运行模式

模式说明
local本地单机调试
standaloneSpark 自带集群
YARN运行在 Hadoop YARN 上
K8sKubernetes 部署

常用算子

类型算子说明
转换map、filter、flatMap懒执行,不触发计算
转换groupByKey、reduceByKey分组聚合
转换join、union多数据集操作
行动collect、count、show触发实际计算
行动saveAsTextFile、write输出结果

常见坑点

  • shuffle 开销大:groupByKey 会全量 shuffle,优先用 reduceByKey
  • 数据倾斜:某 key 数据量远超其他,导致部分 Task 极慢
  • 内存溢出:数据量超内存时调大 executor-memory 或增加分区数
  • collect 风险:大数据集 collect() 会把所有数据拉到 Driver,容易 OOM

基于 VitePress 构建