跳转至

第 13 章 大数据处理

大数据处理

📚 章节概述

本章将深入讲解大数据处理,包括 Hadoop 、 Spark 、 Hive 等。通过本章学习,你将能够处理大规模数据。

🎯 学习目标

完成本章后,你将能够:

  1. 理解大数据处理的核心概念
  2. 掌握 Hadoop 的使用
  3. 了解 Spark 的核心 API
  4. 掌握 Hive 数据仓库
  5. 能够处理大规模数据

13.1 大数据概述

13.1.1 什么是大数据

大数据是传统数据处理应用在可承受的时间范围内处理的数据集。

大数据特点

  1. 4V 特征
  2. Volume (大量):数据规模大
  3. Velocity (高速):数据产生速度快
  4. Variety (多样):数据类型多
  5. Veracity (真实):数据质量参差不齐

  6. 技术挑战

  7. 存储容量
  8. 计算能力
  9. 网络带宽
  10. 数据一致性

13.1.2 大数据处理技术栈

Text Only
┌─────────────────────────────────────────────┐
│                   大数据技术栈                        │
├─────────────────────────────────────────────┤
│  存储层                                          │
│  ├─ HDFS(分布式文件系统)                          │
│  ├─ HBase(NoSQL数据库)                            │
│  └─ S3(对象存储)                                │
├─────────────────────────────────────────────┤
│  计算层                                          │
│  ├─ MapReduce(批处理)                             │
│  ├─ Spark(内存计算)                               │
│  └─ Flink(流处理)                                │
├─────────────────────────────────────────────┤
│  数据仓库                                          │
│  ├─ Hive(SQL on Hadoop)                           │
│  ├─ Presto(分布式SQL)                              │
│  └─ Impala(实时查询)                               │
├─────────────────────────────────────────────┤
│  调度系统                                          │
│  ├─ Oozie(工作流调度)                              │
│  ├─ Airflow(工作流管理)                             │
│  └─ Azkaban(工作流调度)                            │
└─────────────────────────────────────────────┘

13.2 Hadoop

13.2.1 Hadoop 概述

Apache Hadoop是开源的分布式计算平台,用于存储和处理大数据。

核心组件

  1. HDFS ( Hadoop 分布式文件系统)
  2. 分布式存储
  3. 副本复制
  4. 高吞吐

  5. MapReduce

  6. 分布式计算框架
  7. Map 和 Reduce 阶段
  8. 容错机制

13.2.2 Hadoop 使用

Python
# WordCount示例
from mrjob.job import MRJob
from mrjob.step import MRStep
from mrjob.protocol import TextProtocol

class MRWordCount(MRJob):
    OUTPUT_PROTOCOL = TextProtocol

    def steps(self):
        return [
            MRStep(mapper=self.mapper,
                  reducer=self.reducer)
        ]

    def mapper(self, _, line):
        for word in line.split():
            yield (word, 1)  # yield生成器:惰性产出值,节省内存

    def reducer(self, word, counts):
        yield (word, sum(counts))

# 运行作业
if __name__ == '__main__':
    MRWordCount.run()

13.3 Spark

13.3.1 Spark 概述

Apache Spark是快速的分布式计算引擎,支持批处理和流处理。

核心特性

  1. 内存计算
  2. 内存中计算
  3. 减少磁盘 I/O
  4. 提高性能

  5. 易用 API

  6. Scala/Python/Java/R
  7. 高级 API
  8. SQL 支持

  9. 丰富生态

  10. Spark SQL
  11. Streaming
  12. MLlib

13.3.2 Spark 使用

Python
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, count, sum as _sum

# 创建SparkSession
spark = SparkSession.builder \
    .appName("SparkExample") \
    .getOrCreate()

# 读取数据
df = spark.read.json("sales.json")

# 数据转换
df = df.filter(col("amount") > 100)
df = df.withColumn("total_amount", col("quantity") * col("amount"))

# 数据聚合
result = df.groupBy("product_id").agg(
    _sum("quantity").alias("total_quantity"),
    _sum("amount").alias("total_amount"),
    count("*").alias("order_count")
)

# 写入结果
result.write.csv("output/sales_aggregated.csv", mode="overwrite", header=True)

# 显示结果
result.show()

13.4 Hive

13.4.1 Hive 概述

Apache Hive是构建在 Hadoop 上的数据仓库工具。

核心特性

  1. SQL 支持
  2. HiveQL 查询语言
  3. 类似 SQL 语法
  4. 易于学习

  5. 元数据管理

  6. Metastore
  7. Schema 管理
  8. 表分区

  9. 优化器

  10. 查询优化
  11. 执行计划
  12. 成本优化

13.4.2 Hive 使用

SQL
-- 创建数据库
CREATE DATABASE IF NOT EXISTS sales;

-- 创建表
CREATE EXTERNAL TABLE IF NOT EXISTS sales (
    sale_id BIGINT,
    product_id BIGINT,
    customer_id BIGINT,
    sale_date DATE,
    quantity INT,
    amount DECIMAL(10,2)
)
PARTITIONED BY (sale_year STRING, sale_month STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

-- 加载数据(注意:Hive 分区列必须显式声明,不支持函数表达式)
LOAD DATA LOCAL INPATH '/path/to/sales.csv'
OVERWRITE INTO TABLE sales
PARTITION (sale_year='2024', sale_month='01')
;

-- 查询数据
SELECT
    product_id,
    COUNT(*) as order_count,
    SUM(quantity) as total_quantity,
    SUM(amount) as total_amount
FROM sales
WHERE sale_date >= '2024-01-01'
GROUP BY product_id  -- GROUP BY分组;HAVING过滤分组
ORDER BY total_amount DESC;

13.5 练习题

基础题

  1. 选择题
  2. 大数据的 4V 特征不包括什么?

    • A. Volume
    • B. Velocity
    • C. Variety
    • D. Validity
  3. 简答题

  4. 解释大数据的 4V 特征。
  5. 说明 Hadoop 的核心组件。

进阶题

  1. 实践题
  2. 使用 Hadoop 实现 WordCount 。
  3. 使用 Spark 处理大数据。
  4. 使用 Hive 创建数据仓库。

  5. 设计题

  6. 设计一个大数据处理架构。
  7. 设计一个实时数据处理系统。

答案

1. 选择题答案

  1. D (大数据的 4V 特征不包括 Validity )

2. 简答题答案

大数据的 4V 特征: - Volume (大量)、 Velocity (高速)、 Variety (多样)、 Veracity (真实)

Hadoop 的核心组件: - HDFS 、 MapReduce 、 YARN

3. 实践题答案

参见 13.2-13.4 节的示例。

4. 设计题答案

参见 13.1-13.4 节的架构设计。

13.6 面试准备

大厂面试题

字节跳动

  1. 解释大数据的 4V 特征。
  2. Spark 和 MapReduce 的区别是什么?
  3. 如何优化 Spark 性能?
  4. 如何设计大数据处理架构?

腾讯

  1. Hive 和 Spark SQL 的区别是什么?
  2. 如何设计数据仓库?
  3. 如何优化 Hive 查询?
  4. 如何设计大数据存储?

阿里云

  1. 大数据处理的最佳实践是什么?
  2. 如何设计实时大数据处理?
  3. 如何处理大数据的数据倾斜?
  4. 如何设计大数据的容灾?

📚 参考资料

🎯 本章小结

本章深入讲解了大数据处理,包括:

  1. 大数据的核心概念
  2. Hadoop 的使用
  3. Spark 的核心 API
  4. Hive 数据仓库

通过本章学习,你掌握了大数据处理的核心技术,能够处理大规模数据。下一章将深入学习数据工程最佳实践。