1.spark提交流程
sparkContext其实是与一个集群建立一个链接,当你停掉它之后
就会和集群断开链接,则属于这个资源的Excutor就会释放掉了,Driver
向Master申请资源,Master会向work分配资源,则会在wordCount里面会
构建Rdd,则它会会构建DAG,DAG又叫有向无环图,则有向无环图一旦触发Action
的时候,这个时候就会提交任务,此时,这些任务就不会经过Master,如果经过Master
则Master的压力会很大,其实Excutor一旦启动了,它就会向Driver建立连接,Excutor
它可能存在多个机器上面,则Driver不知道Excutor在哪里,但是Excutor知道Driver
在哪里(通过Mastre来知道的),则此时Excutor会和Driver进行rpc通信,则此时Driver则会
提交计算任务(以stage进行分开处理,其中stage里面是一个个并行的task),则
提交的任务在Excutor里面执行,则在Excutor里面有这些任务的执行进度,则
Excutor会向这个Master里面汇报进度,Driver就会知道它执行到了哪里,如果
执行失败,则Driver可能会执行重试,可能会例如,如果有10个项目,其中9个项目
都执行完了,但是有一个项目会很慢很慢,则此时Driver会在启动一个项目,
看这两个项目,谁快就用谁,对于catch,则Excutor只会catch属于它的的分区
2.rdd缓存
spark计算特别快的原因,就是在不同的操作中可以在内存中持久化或缓存
多个数据集
3.容量的大小
关于容量大小,一般来说我们可以这样的假设,2个字段,100万条数据,50M,如果要说
可以往后面一次计算
4.关于内存分配
在spark的计算过程中,如果我们的一台worker的内存是2g,但是我们可以给这个work
启动spark,我可以只给他分1个g的内存,就是说这个worker里面,不管在执行任何操作,
都只用这1个g的内存
5.checkpoint(检查点)
假如在进行rdd的计算的过程中,如果前面计算的结果之后,把这个结果保存在磁盘当中,
但是磁盘烧了,则此时这个里面的数据就会消失,则此时我们就会从头开始记性计算,
但是这样又有一些浪费,我们可以设置一个检查点(checkpoint),把某些计算出来的结果
存在一个地方,当磁盘损坏,我们就可以回退到这些检查点当中,很想快照的意味
(这个就一般作用于比较复杂的运用,当我们保存这个checkpoint的时候,他会主动的去寻找
这个checkpoint里面保存的值)我们可以防止检查点的公共存放目录
sc.setCheckpointDir("hdfs://192.168.109.136:9000/ck2016mypoint"),设置检查点存放的地方
则我们此时hdfs dfs -ls /,我们就可以发现这个检查点存放的目录
val rdd = sc.textFile("hdfs://192.168.109.136:9000/wj/input19")
rdd.checkpoint
rdd.count(运行action)
则此时回启动两个方法,第一个方法进行计算,另一个方法则把结果写到checkpoint
写到指定的目录(这个存放checkpoint的地方药可用性高,所以我们采用hdfs),
则此时把rdd的内容写到checkpoint里面
6.关于collect,cache,checkpoint的区别
collect是一个Action类型的RDD,而cache则是,当我们xxx.cache,则这个xxx的rdd在进行
Action的方法(collect),则会把这个RDD里面的内容缓存进内存,则当我们再一次进行计算的
时候,则会从内存中进行读取,而checkpoint这个值,这个是把这个rdd的值缓存进入一个公共
的目录(这个目录要有高的可用性,即使内存中丢失,这个也不会丢失)