2019独角兽企业重金招聘Python工程师标准>>>
1.RDD。弹性分布式数据集,是Spark最核心的数据结构。有分区机制,所以可以分布式进行处理。有容错机制,通过RDD之间的依赖关系来恢复数据。
2.依赖关系。RDD的依赖关系是通过各种Transformation(变换)来得到的。父RDD和子RDD之间的依赖关系分两种:①窄依赖 ②宽依赖
①针对窄依赖:父RDD的分区和子RDD的分区关系是:一对一
窄依赖不会发生Shuffle,执行效率高,spark框架底层会针对多个连续的窄依赖执行流水线优化,从而提高性能。例如 map flatMap等方法都是窄依赖方法
②针对宽依赖:父RDD的分区和子RDD的分区关系是:一对多
宽依赖会产生shuffle,会产生磁盘读写,无法优化。
3.DAG。有向无环图,当一整条RDD的依赖关系形成之后,就形成了一个DAG。一般来说,一个DAG,最后都至少会触发一个Action操作,触发执行。一个Action对应一个Job任务。
4.Stage。一个DAG会根据RDD之间的依赖关系进行Stage划分,流程是:以Action为基准,向前回溯,遇到宽依赖,就形成一个Stage。遇到窄依赖,则执行流水线优化(将多个连续的窄依赖放到一起执行)
5.task。任务。一个分区对应一个task。可以这样理解:一个Stage是一组Task的集合
6.RDD的Transformation(变换)操作:懒执行,并不会立即执行
7.RDD的Action(执行)操作:触发真正的执行