先搞清楚你为啥要学这个
你是不是也经常在技术群里看到别人聊 Spark、Flink、Kafka,自己插不上话?或者公司项目突然说要上实时数仓,你连数据从哪来、往哪去都搞不清楚。别慌,这玩意儿一开始都这样。大数据处理框架不是一天能啃下来的,但只要路径对了,三个月就能从懵圈到上手。
第一步:把地基打牢,别一上来就跑
很多人一听说要学大数据,直接打开 Flink 官网文档,结果两页看下来头大如斗。其实你应该先搞明白几个基础概念:什么是分布式计算?为什么单机处理不了 TB 级数据?HDFS 是干啥的?ZooKeeper 起什么作用?
建议花一周时间看看 Hadoop 的核心组件:MapReduce 做批处理,HDFS 存数据,YARN 管资源。不用深究源码,先知道它们怎么配合就行。比如你每天要分析上百万条用户点击日志,一台机器读文件要几小时,用 HDFS 把文件拆成块分到 10 台机器,MapReduce 并行处理,几分钟搞定。
动手搭个最小集群,别光看视频
光看教程不操作,等于没学。拿三台虚拟机,装个 Hadoop 伪分布模式,跑个 WordCount 例子。虽然老掉牙,但它能让你看到数据是怎么被切分、映射、归约的。
hadoop jar hadoop-examples.jar wordcount /input /output这一行命令背后,是整个分布式执行流程的缩影。出错了也别怕,90% 的问题都是配置文件写错了路径或端口。
批处理先上手 Spark,别绕路
Hadoop 之后,下一步自然就是 Spark。它比 MapReduce 快,API 也更友好。重点学 RDD 和 DataFrame,尤其是 DataFrame + SQL 这种组合,工作中用得最多。
举个例子,你要统计上周每个城市的订单量,以前得写一堆 MapReduce 代码,现在用 Spark SQL 几行就搞定:
val df = spark.read.parquet("/data/orders")
df.filter("date between '2024-03-01' and '2024-03-07'")
.groupBy("city")
.sum("amount")
.show()本地写完扔到集群跑,开发效率提升不止一点半点。
实时处理绕不开 Kafka + Flink
现在谁还只做离线分析?用户下单、APP 崩溃日志、IoT 设备上报,都是实时产生的。Kafka 就像个消息管道,把数据一股脑接进来,Flink 在里面做实时清洗、聚合、告警。
比如你做个实时大屏,显示每分钟新增订单数。数据从订单系统发到 Kafka 主题,Flink 消费这个主题,按时间窗口统计,结果写进 Redis 或数据库。
val env = StreamExecutionEnvironment.getExecutionEnvironment
val stream = env.addSource(new FlinkKafkaConsumer[String](
"orders-topic",
new SimpleStringSchema(),
kafkaProps))
stream.map(json => parseOrder(json))
.keyBy(_.city)
.timeWindow(Time.minutes(1))
.count()
.addSink(new RedisSink())这套组合拳现在几乎是标配,面试必问。
别忽略数据存储和调度
数据处理完放哪?直接扔 MySQL 行不行?小数据可以,但要是每天十亿条,就得考虑 OLAP 引擎了。ClickHouse 查询快,适合报表;Doris 集群管理简单,适合中小团队。调度方面,Airflow 写 DAG 管任务依赖,比 crontab 强太多。
项目练手比证书有用
学完组件,自己搭个小闭环:用 Python 模拟生成用户行为日志,写入 Kafka,Flink 实时处理后存 ClickHouse,最后用 Superset 画个 dashboard。这个项目写在简历上,比“熟练掌握大数据技术”实在多了。
这条路走下来,你会发现自己不再害怕“高并发”“海量数据”这种词。技术本来就是用来解决问题的,框架只是工具,关键是知道自己在做什么、为什么这么做。