第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数据仓库
通过本章学习,你掌握了大数据处理的核心技术,能够处理大规模数据。下一章将深入学习数据工程最佳实践。