
1) 【一句话结论】根据项目实时性需求,Hadoop适合离线批处理大文件(延迟分钟级),Spark兼顾批处理与低延迟计算(秒级),Flink适合高实时、低延迟流处理(毫秒级),选型需结合数据量、实时性、资源成本等核心需求。
2) 【原理/概念讲解】老师口吻,解释三个平台的核心:
3) 【对比与适用场景】
| 平台 | 定义 | 核心特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Hadoop | 分布式文件系统(HDFS)+批处理框架(MapReduce) | 高容错、离线计算、数据持久化 | 离线大数据分析(日志、传感器数据离线统计)、数据仓库 | 延迟高(分钟级)、不适合实时 |
| Spark | 内存计算框架(支持批、流、交互式) | 速度快(比Hadoop快10-100倍)、统一框架、支持多种计算模式 | 批处理(大数据分析)、交互式查询、低延迟流处理(秒级) | 内存消耗大、需合理配置资源 |
| Flink | 流处理框架(支持状态、事件时间) | 低延迟(毫秒级)、高吞吐、容错 | 实时流处理(实时监控、交易风控)、复杂事件处理 | 学习曲线陡、资源管理复杂 |
4) 【示例】
# 目标:统计每个用户的总操作数
def map_func(line):
parts = line.split(',')
user_id = parts[1]
return (user_id, 1)
def reduce_func(key, values):
return sum(values)
# 输入:/data/logs/2023/...
# 输出:/output/user_stats/
from pyspark import SparkContext
sc = SparkContext("local", "RealTimeUserCount")
stream = sc.textFile("stream://user_actions")
# 实时统计在线用户数
online_users = stream.map(lambda x: (x.split(',')[1], 1)) \
.reduceByKey(lambda a, b: a + b)
online_users.saveAsTextFile("/output/online_users")
from flink import StreamExecutionEnvironment
env = StreamExecutionEnvironment.get_execution_environment()
data_stream = env.socket_text_stream("localhost", 9999)
# 实时检测异常交易(金额>10000)
transactions = data_stream.map(lambda x: (x.split(',')[1], float(x.split(',')[2])))
anomalous_transactions = transactions.filter(lambda x: x[1] > 10000)
anomalous_transactions.print()
5) 【面试口播版答案】
“面试官您好,关于智慧城市项目中大数据分析平台的选型,核心逻辑是根据项目实时性需求来区分:Hadoop适合离线批处理大文件(比如城市传感器数据的月度统计,延迟分钟级);Spark兼顾批处理与低延迟计算(比如实时生成城市交通热力图,延迟秒级);Flink适合高实时、低延迟流处理(比如实时监控交通信号灯状态,延迟毫秒级)。结合佳都科技智慧城市项目的需求,比如实时交通监控需要低延迟,那Flink更合适;而如果只是离线分析城市人口数据,Hadoop就足够了。”
6) 【追问清单】
7) 【常见坑/雷区】