基于内存的分布式计算框架的 Spark,挺适合搞大数据的你研究一下。RDD是它的核心概念,说白了就是一套能并行数据的抽象模型,灵活又高效。用它的时候你不需要操心太多底层的存储和调度,逻辑封装完,Spark 自己会生成Task
交给Executor
去跑,响应也快。
RDD 的弹性挺关键的,比如它不保存数据本体,只保留逻辑,这样一出事能自动恢复,减少你调 bug 的痛苦。而且它是不可变的,每次改操作都生成新的RDD
,这点对数据一致性友好。
常用操作方面,像groupBy
、reduceByKey
这些算子,还挺常用。比如你要按用户聚合访问日志,直接groupBy
就搞定。如果你要减少分区数量,coalesce
是个不错的选择,省掉调度资源。
RDD 的依赖关系有点意思,分为窄依赖
和宽依赖
。窄依赖的时候效率高,宽依赖就要做 shuffle,慢点但灵活,选的时候你得看具体场景。像join
这种通常就是宽依赖,调优的时候要留意下。
还有个小知识点,Job
、Stage
和Task
之间的关系你得搞清楚。一个 action 触发一个Job
,宽依赖数量+1 是Stage
数,分区数就是Task
数。这套机制搞清楚,定位性能瓶颈就容易多了。
如果你刚入门 Spark 或者想搞清楚 RDD 的底层逻辑,分区器
、依赖
、任务划分
这些点都挺值得琢磨的。嗯,推荐你看看下面这两个资源,内容还蛮实用的:
如果你在项目中数据量一大就卡顿,可以考虑用 RDD 结合合理的分区策略来优化,效果还不错。