Spark/Flink可以说上大数据计算引擎中最锋利的两把剑,设计上两者都想成为流批处理框架的统一,Spark用Micro-Batch框架模拟流,Flink用Stream框架模拟批,因此当前架构上看 ,两者都没有实现真正的流批统一。从时延长上说流可以降级为批,但批很难升级为流,所以相比较而言Flink实现的更加完美些。
今年看了好几本大数据的书,有的翻一遍就不在翻了,真正算得上阅读过的应该是如下两本了:
该本书是Flink的内核原理与实现:
作者从Flink的基本概念和应用入手,逐步分析Flink的特点。先介绍了 时间、窗口、水印、定时器、快照等相关概念,再从Flink流数据使用的类型、序列化作为前奏,引入了自主的内存管理,详细分析了当前Java内存管理存在的问题并进行自主改造的实现过程;还有Flink的核心状态原理,强大且完善的状态管理机制正是Flink区别于其它计算引擎上标志。然后从源码上分析了作用提交、作业调度、作业执行、流数据交换传递已经应用容错的流程,这非常有助于Flink 任务出现异常时的分析,极大提高了读者对任务当前执行过程的把握。最后是每个计算引擎都绕不开的sql分析,自定义sql过程分析等;该部分较难理解,建议先阅读spark的sql 实现原理。
这一本上SparkSQL内核剖析:
不得不承认,无论多么深奥复杂、多么晦涩难懂的机制,总有人把它讲的明明白白。这本书先介绍了SparkSQL产生的背景,然后是Spark基础知识介绍,作者分别从编译器Antlr4、逻辑计划、物理计划、Aggregate实现、Join实现角度分析了sql的完整执行流程。最后介绍了Spark SQL在腾讯实践的一个小案例。
在工作中我们经常与Aggregate和Join打交道,每次遇到的复杂问题,都会奇怪就执行一个sql,怎么会有这样的异常出现呢(比如aggregate提示内存不足,不同join为啥提示没空间建立hashmap,建议大家深入研究下Spark内的Aggregate框架和join框架。
以上就是今年主要阅读的书籍,我主要花了大量时间研究流数据在Flink各个Task上的流动和交互、Spark 和Flink 在Shuffle上不同的实现机制、以及 SQL Aggregate 和join框架实现原理。由于这些内容异常复杂,我也是入门级了解,欢迎大家一起学习交流,