1、什么是RDD?
1、 RDD是Spark提供的核心抽象,弹性分布式数据集。
2、 RDD在抽象上来说是一种元素集合,包含了数据,它是被分区的,分为多个分区,每个分区分布在集群的不同节点上,从而让RDD的数据可以并行操作。
3、 RDD通常通过hadoop上的文件,即HDFS文件或者hive表,来进行创建,有时也可以通过应用程序中的集合来创建。
4、 RDD最重要的特性就是:提供了容错性,可以自动从节点失败中恢复过来,即如果某个节点上的RDDpartition,因为节点故障,导致数据丢失,那么RDD会自动通过自己的数据源重新计算该partition、这一切对使用者都是透明的
5、 RDD的数据默认情况下放在内存中,但是内存资源不足,spark会自动将RDD的数据写入磁盘。
2、Spark的架构:
spark采用的主从式的架构,主节点叫master,从节点叫worker
driver:在client模式下,哪一台服务器提交spark代码,那么哪一台机器就是driver服务器。(如果提交10个程序,10个driver服务器在同一台,压力大)在集群模式下,driver服务器并不是提交代码的那一台服务器,而是在提交代码的时候,在worker主机上随机挑一台作为driver服务器,如果提交10个应用,name就有可能10台driver服务器。
master:master是集群的资源管理者和调度者,类似于YARN里面的ResourceManager,还负责监控整个集群的监控状况。
spark执行流程:
1、启动driver,会做一些初始化工作,在初始化这个过程当中,会发送请求到master,请求注册。这样以后我们的master就知道有活要干了。
2、master接受到请求之后,master发送请求到worker,请求资源调度,说白了请求资源调度就是需要在worker节点上启动executor(具体应该启动几个executor,是在提交代码的时候指定好了的)。
3、executor启动好了以后会向driver进行反向注册,这样driver就知道哪些executor为它的任务进行服务了。
4、driver注册了executor后,这才开始执行spark程序,首先创建RDD,后面就是对RDD进行算子操作,我们会根据对这些 RDD的定义,会形成一堆Task任务,比如进行flatMap,map,reduceByKey等等操作
5、task任务会对RDD里面的partition进行算子操作