RDD理解
首先在理解RDD之前,我们要知道Spark的运行流程,大致分为Standalone模式和跑在其它调度器上,如yarn和Mesos,而最常见的就是跑在yarn上,跑在yarn上还分为Client和Cluster两种模式。
区别在于:
Client模式的Driver跑在了当前本地机器上而不是集群上,当本地机器与集群机器所在地距离远时会受到网速影响较大,输出结果和运行日志直接输出到控制台上,开发中适合做调试用
Cluster模式Driver跑在集群上,当本地机器与集群机器所在地距离远时会受到网速影响较小,开发中适合用于生产环境
这里以yarn模式的Cluster Master提交方法为例
这是提交一个Spark任务的主要流程,而RDD及存在于Executor中
这里直接的表达了wordcount案列中每个RDD起到的作用,所以其实可以将RDD看作一个一个流水线上的加工点。
让我们来看下RDD比较官方的解释:
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象。
代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。
其实就可以将他看作流水线上的每个加工点,RDD它是不储存数据的,数据像水流一样从RDD经过,只做加工。而每个RDD的算子其实就是这个RDD的运行逻辑,在流水线思想中,可以将算子视为这个加工点做的工作是什么。我们通过不同的RDD和RDD中的算子逻辑可以完成对数据的一系列逻辑运算
这里要注意一个问题是,RDD再创建好后不会直接运算,也就是流水线即使有了,也需要一个开始,Executor来说,行动算子就是RDD流水线开始的号角,这个后续讲算子再详细解释,反正要明白,前面的转换算子的RDD是不会执行的,直到遇到行动算子如collect()之后才会开始RDD流水线