缓存实践
提醒;
本文是对深入理解缓存原理与实战设计的学习
提醒;
本文是对深入理解缓存原理与实战设计的学习
Spark集群可以使用不同的方式进行部署,比如Standalone、Mesos, YARN和Kubernetes,这几个版本的主要区别在于:Standalone版本的资源管理和任务调度器由Spark系统本身提供,其他版本的资源管理和任务调度器依赖于第三方框架,如YARN可以同时管理Spark任务和Hadoop MapReduce任务。
Spark的错误容忍机制的核心方法主要有两种:
Spark采用了延迟删除策略,将上游stage的Shuffle Write的结果写入本地磁盘,只有在当前job完成后,才删除Shuffle Writre写入磁盘的数据。这样,即使stage2中某个task执行失败,但由于上游的stage0和stage1的输出数据还在磁盘上,也可以再次通过Shuffle Read读取得到相同的数据,避免再次执行上游stage中的task,所以,Spark根据ShuffleDependency切分出的stage既保证了task的独立性,也方便了错误容忍的重新计算。
缓存机制实际上是一种空间换时间的方法,集体的,如果数据满足一下3条,就可以进行缓存.
包含数据缓存操作的应用执行流程生成的规则:Spark首先假设应用没有数据缓存,正常生成逻辑处理流程(RDD之间的数据依赖关系),然后从第2个job开始,将cached RDD 之前的RDD都去掉,得到削减后的逻辑处理流程。最后,将逻辑处理流程转化为物理执行计划。
// CoarseGrainedExecutorBackend
case LaunchTask(data) =>
if (executor == null) {
exitExecutor(1, "Received LaunchTask command but executor was null")
} else {
val taskDesc = TaskDescription.decode(data.value)
logInfo(log"Got assigned task ${MDC(LogKeys.TASK_ID, taskDesc.taskId)}")
executor.launchTask(this, taskDesc)
}接收到Drive端传来的task,反序列化后,启动task