跳转至

第一章: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 容器编排

小结

  1. Spark 是快速的大数据处理引擎
  2. 支持批处理、流处理、机器学习等多种场景
  3. 内存计算比 MapReduce 快 100 倍
  4. 支持多种运行模式和集群管理器

参考资料