跳转至

第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数据仓库

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