第一章:Spark 简介
1.1 什么是 Apache Spark
Apache Spark 是一个开源的分布式计算框架,最初由 UC Berkeley AMPLab 开发,后来成为 Apache 顶级项目。
Spark 架构
┌─────────────────────────────────────────────────────────────┐
│ │
│ Spark 架构 │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Driver Program │ │
│ │ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ SparkContext│ │ DAGScheduler│ │ │
│ │ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Cluster Manager │ │
│ │ Standalone / YARN / Mesos / Kubernetes │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────────┼───────────────┐ │
│ ▼ ▼ ▼ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Worker │ │ Worker │ │ Worker │ │
│ │ ┌───────┐ │ │ ┌───────┐ │ │ ┌───────┐ │ │
│ │ │Executor│ │ │ │Executor│ │ │ │Executor│ │ │
│ │ │ Task │ │ │ │ Task │ │ │ │ Task │ │ │
│ │ │ Task │ │ │ │ Task │ │ │ │ Task │ │ │
│ │ └───────┘ │ │ └───────┘ │ │ └───────┘ │ │
│ └───────────┘ └───────────┘ └───────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
核心组件
| 组件 |
功能 |
| Spark Core |
底层引擎,RDD API |
| Spark SQL |
结构化数据处理 |
| Spark Streaming |
实时流处理 |
| MLlib |
机器学习库 |
| GraphX |
图计算库 |
1.2 Spark vs Hadoop
| 维度 |
Spark |
Hadoop MapReduce |
| 计算模式 |
内存计算 |
磁盘计算 |
| 速度 |
快 100 倍 |
较慢 |
| 易用性 |
API 丰富 |
API 简单 |
| 实时处理 |
支持 |
不支持 |
| 机器学习 |
内置 MLlib |
需要 Mahout |
1.3 Spark 应用场景
批处理
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("BatchProcessing") \
.getOrCreate()
# 读取数据
df = spark.read.parquet("hdfs://path/to/data")
# 处理数据
result = df.groupBy("category").count()
# 保存结果
result.write.parquet("hdfs://path/to/output")
实时流处理
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
spark = SparkSession.builder \
.appName("StreamProcessing") \
.getOrCreate()
# 读取 Kafka 流
stream = spark.readStream \
.format("kafka") \
.option("kafka.bootstrap.servers", "localhost:9092") \
.option("subscribe", "topic") \
.load()
# 处理流数据
result = stream.select(
from_json(col("value").cast("string"), schema).alias("data")
).select("data.*")
# 输出到控制台
query = result.writeStream \
.outputMode("append") \
.format("console") \
.start()
query.awaitTermination()
1.4 Spark 运行模式
| 模式 |
说明 |
| Local |
单机模式,适合开发测试 |
| Standalone |
Spark 自带集群管理器 |
| YARN |
Hadoop YARN 集群 |
| Kubernetes |
K8s 容器编排 |
小结
- Spark 是快速的大数据处理引擎
- 支持批处理、流处理、机器学习等多种场景
- 内存计算比 MapReduce 快 100 倍
- 支持多种运行模式和集群管理器
参考资料