
1) 【一句话结论】采用分层分布式架构,数据存储层用HDFS+对象存储(如S3)实现PB级存储,计算层用Flink(流处理)+Spark(批处理)协同处理,数据治理层通过数据湖、元数据管理(如Atlas)和数据质量工具(如Great Expectations)保障数据可用性,核心是分布式扩展、低延迟实时分析。
2) 【原理/概念讲解】
数据存储层:PB级数据需分布式存储,HDFS提供高吞吐的块存储(适合大规模日志、文件),对象存储(如S3)适合海量小文件(如日志、图片),扩展性好。
计算层:实时分析依赖流处理,Flink支持低延迟(亚秒级)、Exactly-Once语义(通过checkpoint保证数据不丢失且只处理一次),适合复杂事件处理;批处理用Spark SQL处理历史数据,高效支持大规模分析。
数据治理层:数据湖存储原始、未加工数据(如日志、用户行为),元数据管理工具(如Apache Atlas)跟踪数据血缘(如数据来源、处理链路),数据质量工具(如Great Expectations)定义校验规则(如数据类型、唯一性),确保数据准确、可信。
类比:数据湖像“水库”,存储所有原始数据(河流、雨水);计算层像“水管和泵”,实时处理数据(供水、灌溉);数据治理像“水库管理系统”,记录水源、水质、流量,保障数据可用。
3) 【对比与适用场景】
存储技术对比:
| 技术类型 | 定义 | 特性 | 使用场景 | 注意点 |
| --- | --- | --- | --- | --- |
| HDFS | 分布式文件系统 | 块存储,高吞吐,适合大规模文件 | 批处理数据存储(如日志、备份) | 适合固定大小文件,小文件存储效率低 |
| 对象存储(如S3) | 弹性存储 | 海量小文件,高扩展性,按需付费 | 海量日志、图片、视频 | 读取延迟较高,适合非实时访问 |
| 分布式数据库(如HBase) | 列式存储 | 高并发读写,实时查询 | 实时业务数据(如用户行为) | 适合结构化数据,存储成本高 |
计算技术对比:
| 技术类型 | 定义 | 特性 | 使用场景 | 注意点 |
| --- | --- | --- | --- | --- |
| Spark SQL(批处理) | 分布式计算引擎 | 高效批处理,支持SQL | 历史数据分析、报表生成 | 适合离线处理,延迟较高(秒级) |
| Flink(流处理) | 分布式流处理引擎 | 低延迟(亚秒级)、Exactly-Once、状态管理 | 实时监控、实时报表、实时决策 | 需复杂状态管理,资源消耗高 |
4) 【示例】
假设实时用户行为日志系统,数据流从Kafka主题(user_events)读取,用Flink计算实时活跃用户数,结果写入HDFS。
伪代码(Flink):
from pyflink import StreamExecutionEnvironment
from pyflink.table import *
env = StreamExecutionEnvironment.get_execution_environment()
env.set_parallelism(4)
table_env = StreamTableEnvironment.create(env)
# 读取Kafka
table_env.connect(
Kafka()
.set bootstrap_servers("kafka:9092")
.set topic("user_events")
.set properties("group.id", "user_active")
).in_schema("user_events").to_table(table_env.from_path("user_events"))
# 转换为Table
user_table = table_env.from_table("user_events")
# 过滤活跃用户(最近5分钟内有行为)
active_users = user_table.filter("event_time >= now() - interval '5 minutes'")
# 按用户ID分组,计算活跃用户数
active_user_count = active_users.group_by("user_id").count()
# 写入HDFS
active_user_count.to_append_stream().write_stream(
Hadoop()
.set path("hdfs://namenode:8020/realtime/user_active")
.set format("parquet")
).execute()
5) 【面试口播版答案】
面试官您好,针对PB级数据存储和实时分析的需求,我设计的核心架构是分层、分布式、可扩展的。数据存储层采用HDFS(高吞吐块存储)与对象存储(如S3,处理海量小文件)结合,计算层用Flink(流处理)和Spark(批处理)协同,数据治理层通过数据湖、元数据管理(如Atlas)和数据质量工具(如Great Expectations)实现。具体来说,数据存储层用HDFS存储日志等大规模文件,对象存储存储海量日志;计算层Flink处理实时流,计算实时指标,Spark处理历史数据;数据治理层管理数据血缘、数据质量,确保数据可用。这样既能支持PB级存储,又能实现低延迟实时分析。
6) 【追问清单】
7) 【常见坑/雷区】