第 13 章 大数据处理¶
📚 章节概述¶
本章将深入讲解大数据处理,包括 Hadoop 、 Spark 、 Hive 等。通过本章学习,你将能够处理大规模数据。
🎯 学习目标¶
完成本章后,你将能够:
- 理解大数据处理的核心概念
- 掌握 Hadoop 的使用
- 了解 Spark 的核心 API
- 掌握 Hive 数据仓库
- 能够处理大规模数据
13.1 大数据概述¶
13.1.1 什么是大数据¶
大数据是传统数据处理应用在可承受的时间范围内处理的数据集。
大数据特点¶
- 4V 特征
- Volume (大量):数据规模大
- Velocity (高速):数据产生速度快
- Variety (多样):数据类型多
-
Veracity (真实):数据质量参差不齐
-
技术挑战
- 存储容量
- 计算能力
- 网络带宽
- 数据一致性
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是开源的分布式计算平台,用于存储和处理大数据。
核心组件¶
- HDFS ( Hadoop 分布式文件系统)
- 分布式存储
- 副本复制
-
高吞吐
-
MapReduce
- 分布式计算框架
- Map 和 Reduce 阶段
- 容错机制
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是快速的分布式计算引擎,支持批处理和流处理。
核心特性¶
- 内存计算
- 内存中计算
- 减少磁盘 I/O
-
提高性能
-
易用 API
- Scala/Python/Java/R
- 高级 API
-
SQL 支持
-
丰富生态
- Spark SQL
- Streaming
- 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 上的数据仓库工具。
核心特性¶
- SQL 支持
- HiveQL 查询语言
- 类似 SQL 语法
-
易于学习
-
元数据管理
- Metastore
- Schema 管理
-
表分区
-
优化器
- 查询优化
- 执行计划
- 成本优化
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 练习题¶
基础题¶
- 选择题
-
大数据的 4V 特征不包括什么?
- A. Volume
- B. Velocity
- C. Variety
- D. Validity
-
简答题
- 解释大数据的 4V 特征。
- 说明 Hadoop 的核心组件。
进阶题¶
- 实践题
- 使用 Hadoop 实现 WordCount 。
- 使用 Spark 处理大数据。
-
使用 Hive 创建数据仓库。
-
设计题
- 设计一个大数据处理架构。
- 设计一个实时数据处理系统。
答案¶
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 面试准备¶
大厂面试题¶
字节跳动¶
- 解释大数据的 4V 特征。
- Spark 和 MapReduce 的区别是什么?
- 如何优化 Spark 性能?
- 如何设计大数据处理架构?
腾讯¶
- Hive 和 Spark SQL 的区别是什么?
- 如何设计数据仓库?
- 如何优化 Hive 查询?
- 如何设计大数据存储?
阿里云¶
- 大数据处理的最佳实践是什么?
- 如何设计实时大数据处理?
- 如何处理大数据的数据倾斜?
- 如何设计大数据的容灾?
📚 参考资料¶
- Hadoop 文档: HTTPS://hadoop.apache.org/docs/
- Spark 文档: HTTPS://spark.apache.org/docs/
- Hive 文档: HTTPS://hive.apache.org/docs/
- 《 Learning Spark 》
- 《 Hadoop: The Definitive Guide 》
🎯 本章小结¶
本章深入讲解了大数据处理,包括:
- 大数据的核心概念
- Hadoop 的使用
- Spark 的核心 API
- Hive 数据仓库
通过本章学习,你掌握了大数据处理的核心技术,能够处理大规模数据。下一章将深入学习数据工程最佳实践。