跳到主要内容

Spark

问题

什么是 Spark?它比 Hive 快在哪里?

答案

Spark 核心概念

Spark 是基于内存计算的分布式处理引擎,比 MapReduce 快 10~100 倍。

Spark vs Hive

对比SparkHive (MapReduce)
计算模型内存计算磁盘 MapReduce
速度快 10~100x
APIRDD/DataFrame/SQL纯 SQL
适用ETL、ML、流大规模离线 ETL

Spark SQL 示例

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, sum, count

spark = SparkSession.builder.appName("analysis").getOrCreate()

# 读取 Hive 表
df = spark.sql("""
SELECT user_id, event_name, pay_amount
FROM dwd.user_action
WHERE dt = '2024-01-15'
""")

# DataFrame API 分析
result = (df
.groupBy("user_id")
.agg(
count("*").alias("event_cnt"),
sum("pay_amount").alias("total_amount")
)
.filter(col("total_amount") > 100)
.orderBy(col("total_amount").desc())
)

result.show()

常见性能调优

优化点方法
数据倾斜salting key、broadcast join
小文件coalesce() 合并输出
内存调整 executor-memory、避免 collect()
序列化使用 Kryo 序列化
Shuffle减少 shuffle 次数、调整分区数
数据分析师的 Spark 使用建议
  • 优先用 Spark SQL(门槛低,性能好)
  • 避免在 Driver 端 collect() 大数据集
  • 结果写回 Hive 表用 saveAsTable()

常见面试问题

Q1: Spark 为什么比 MapReduce 快?

答案

  • 内存计算:中间结果在内存中传递,不落盘
  • DAG 优化:将多步操作优化为一个执行计划
  • 延迟计算:Transformation 延迟执行,统一优化

Q2: RDD 和 DataFrame 有什么区别?

答案

  • RDD:底层 API,类型安全,无查询优化
  • DataFrame:高层 API,有 Schema,Catalyst 优化器加速
  • 推荐使用 DataFrame / Spark SQL(性能更好)

相关链接