spark 存储管理机制】的更多相关文章

Spark存储管理机制 概要 01 存储管理概述 02 RDD持久化 03 Shuffle数据存储 04 广播变量与累加器 01 存储管理概述 思考: RDD,我们可以直接使用而无须关心它的实现细节,RDD是Spark的基础,但是有个问题大家也许会比较关心:RDD所操作的数据究竟在哪里?它是如何存储的. 回顾: 1.1 .存储管理模块架构—从架构上来看   1.1.1     通信层 通信层面采用主从方式实现通信(主从节点间互换消息) 1.1.2 存储层 存储层负责提供接口来存储数据(可把数据存…
累加器 -- Accumulators 广播变量--Broadcast Variables 思考 回顾 存储管理模块架构--从架构上来看 存储管理模块架构--通信层 存储管理模块架构--存储层 存储管理模块架构--数据块与分区的关系 回顾-RDD控制操作 持久化级别 如何选择持久化级别 缓存淘汰机制 Shuffle数据持久化 广播变量--Broadcast Variables…
Spark存储管理(读书笔记) 转载请注明出处:http://www.cnblogs.com/BYRans/ Spark的存储管理 RDD的存放和管理都是由Spark的存储管理模块实现和管理的.本文从架构和功能两个角度对Spark的存储管理模块进行介绍. 架构角度 从架构角度,存储管理模块主要分为以下两层: 通信层:存储管理模块采用的是主从结构来实现通信层,主节点和从节点之间传输控制信息.状态信息. 存储层:存储管理模块需要把数据存储到硬盘或者内存中,必要时还需要复制到远端,这些操作由存储层来实…
Spark工作机制 主要模块 调度与任务分配 I/O模块 通信控制模块 容错模块 Shuffle模块 调度层次 应用 作业 Stage Task 调度算法 FIFO FAIR(公平调度) Spark应用执行机制 总览 Spark应用提交后经历了一系列的转换,最后成为Task在每个节点上执行. RDD的Action算子触发Job的提交,提交到Spark中的Job生成RDD DAG 由DAGScheduler转化为Stage Dage 每个Stage中产生相应的Task集合 TaskSchedule…
本文主要简述spark checkpoint机制,快速把握checkpoint机制的来龙去脉,至于源码可以参考我的下一篇文章. 1.Spark core的checkpoint 1)为什么checkpoint? 分布式计算中难免因为网络,存储等原因出现计算失败的情况,RDD中的lineage信息常用来在task失败后重计算使用,为了防止计算失败后从头开始计算造成的大量开销,RDD会checkpoint计算过程的信息,这样作业失败后从checkpoing点重新计算即可,提高效率. 2)什么时候写ch…
Spark工作机制以及API详解 本篇文章将会承接上篇关于如何部署Spark分布式集群的博客,会先对RDD编程中常见的API进行一个整理,接着再结合源代码以及注释详细地解读spark的作业提交流程,调度机制以及shuffle的过程,废话不多说,我们直接开始吧! 1. Spark基本API解读 首先我们写一段简单的进行单词统计的代码,考察其中出现的API,然后做出整理: import org.apache.spark.SparkConf; import org.apache.spark.api.j…
Spark版本:1.1.1 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4135808.html 目录 Web UI 事件日志 网络安全(配置端口) 仅适用于Standalone模式的端口 适用于所有集群管理器的通用端口 现在,Spark支持通过共享秘钥进行认证.启用认证功能可以通过参数spark.authenticate来配置.此参数控制spark通信协议是否使用共享秘钥进行认证.这种认证方式基于握手…
一.Spark心跳概述 前面两节中介绍了Spark RPC的基本知识,以及深入剖析了Spark RPC中一些源码的实现流程. 具体可以看这里: Spark RPC框架源码分析(二)运行时序 Spark RPC框架源码分析(一)简述 这一节我们来看看一个Spark RPC中的运用实例--Spark的心跳机制.当然这次主要还是从代码的角度来看. 我们首先要知道Spark的心跳有什么用.心跳是分布式技术的基础,我们知道在Spark中,是有一个Master和众多的Worker,那么Master怎么知道每…
Spark Shuffle 一.HashShuffle 普通机制:产生磁盘小文件的数量为:M(map task number)*R(reduce task number) 过程: 1.map task处理完数据之后,写到buffer缓冲区,buffer的大小为32k,个数与reduce task个数一致 2. 每个buffer缓存区满32k后会溢写磁盘,每个buffer最终对应一个磁盘小文件 3.reduce task拉取数据 问题: 1.shuffle write,read 频繁 2.占用内存…
引入 一般来说,分布式数据集的容错性有两种方式:数据检查点和记录数据的更新. 面向大规模数据分析,数据检查点操作成本很高,需要通过数据中心的网络连接在机器之间复制庞大的数据集,而网络带宽往往比内存带宽低得多,同时还需要消耗更多的存储资源. 因此,Spark选择记录更新的方式.但是,如果更新粒度太细太多,那么记录更新成本也不低.因此,RDD只支持粗粒度转换,即只记录单个块上执行的单个操作,然后将创建RDD的一系列变换序列(每个RDD都包含了他是如何由其他RDD变换过来的以及如何重建某一块数据的信息…
虽然默认情况下 RDD 的内容是临时的,但 Spark 提供了在 RDD 中持久化数据的机制.第一次调用动作并计算出 RDD 内容后,RDD 的内容可以存储在集群的内存或磁盘上.这样下一次需要调用依赖该 RDD 的动作时,就不需要从依赖关系中重新计算 RDD,数据可以从缓存分区中直接返回: cached.cache()cached.count()cached.take(10) 在上述代码中, cache 方法调用指示在下次计算 RDD 后,要把 RDD 存储起来.调用count 会导致第一次计算…
一.应用执行机制 一个应用的生命周期即,用户提交自定义的作业之后,Spark框架进行处理的一系列过程. 在这个过程中,不同的时间段里,应用会被拆分为不同的形态来执行. 1.应用执行过程中的基本组件和形态 Driver: 运行在客户端或者集群中,执行Application的main方法并创建SparkContext,调控整个应用的执行. Application: 用户自定义并提交的Spark程序. Job: 一个Application可以包含多个Job,每个Job由Action操作触发. Stag…
引入 一般来说,分布式数据集的容错性有两种方式:数据检查点和记录数据的更新. 面向大规模数据分析,数据检查点操作成本非常高,须要通过数据中心的网络连接在机器之间复制庞大的数据集,而网络带宽往往比内存带宽低得多,同一时候还须要消耗很多其它的存储资源. 因此,Spark选择记录更新的方式.可是,假设更新粒度太细太多,那么记录更新成本也不低.因此.RDD仅仅支持粗粒度转换,即仅仅记录单个块上运行的单个操作,然后将创建RDD的一系列变换序列(每一个RDD都包括了他是怎样由其它RDD变换过来的以及怎样重建…
Spark中的缓存机制:避免spark每次都重算RDD以及它的所有依赖,cache().persist(). checkpoint(). 1.cache():会被重复使用,但是不能太大的RDD,将其cache()到内存当中,catch()属于 memory only .cache 是每计算出一个要 cache 的 partition 就直接将其 cache 到内存中.缓存完之后,可以在任务监控界面storage里面看到缓存的数据. spark cache (几种缓存方法):https://blo…
Master类位置所在:spark-core_2.11-2.1.0.jar的org.apache.spark.deploy.master下的Master类 /** * driver调度机制原理代码分析Schedule the currently available resources among waiting apps. This method will be called * every time a new app joins or resource availability change…
推测执行机制 推测任务是指对于一个Stage里面拖后腿的Task,会在其他节点的Executor上再次启动这个task,如果其中一个Task实例运行成功则将这个最先完成的Task的计算结果作为最终结果,同时会干掉其他Executor上运行的实例.spark推测式执行默认是关闭的,可通过spark.speculation属性来开启 推测机制的设置 --conf spark.speculation=true--conf spark.speculation.interval=100--conf spa…
Shuffle过程主要分为Shuffle write和Shuffle read两个阶段,2.0版本之后hash shuffle被删除,只保留sort shuffle,下面结合代码分析: 1.ShuffleManager Spark在初始化SparkEnv的时候,会在create()方法里面初始化ShuffleManager // Let the user specify short names for shuffle managers val shortShuffleMgrNames = Map…
Spark中对于数据的保存除了持久化操作之外,还提供了一种检查点的机制,检查点(本质是通过将RDD写入Disk做检查点)是为了通过lineage(血统)做容错的辅助,lineage过长会造成容错成本过高,这样就不如在中间阶段做检查点容错,如果之后有节点出现问题而丢失分区,从做检查点的RDD开始重做Lineage,就会减少开销.检查点通过将数据写入到HDFS文件系统实现了RDD的检查点功能. cache和checkpoint的区别: 缓存(cache)把 RDD 计算出来然后放在内存中,但是RDD…
Spark版本:1.1.1 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4135905.html 目录 概述 不同应用程序间的资源调度 同一应用程序内的资源调度 Fair调度池 调度池的默认行为 调度池的属性配置 概述 Spark有几个功能用于在作业之间(译者注:作业包含两类:1)不同应用程序所执行的作业:2)同一应用程序内的不同作业所执行的作业.无论哪种作业,Spark都可以完成作业之间的资源调度.)…
spark shuffle 分为两种 1.byPassSortShuffle 发生条件分区数<=200:无排序及聚合操作 主要是直接按照分区号写文件,有多少分区写多少文件 不做任何排序,简单直接 2.baseSortShuffle 发生条件 1.代码中指定聚合 但是没指定排序规则,会按照分区排序,并按照key的hashcode排序,在归并之时 维护两个数组 做聚合及输出 2.代码中指定聚合并指定了排序规则,会按照分区排序,并按照key的指定规则排序(这个过程跟mr的流程一样,不多做叙述) 3.代…
spark的持久化机制做的相对隐晦一些,没有一个显示的调用入口. 首先通过rdd.persist(newLevel: StorageLevel)对此rdd的StorageLevel进行赋值,同checkpoint一样,本身没有进行之久化操作.真正进行持久化操作实在之后的第一个action 中通过iterator方法进行调用: final def iterator(split: Partition, context: TaskContext): Iterator[T] = { if (storag…
首先rdd.checkpoint()本身并没有执行任何的写操作,只是做checkpointDir是否为空,然后生成一个ReliableRDDCheckpointData对象checkpointData,这个对象完成checkpoint的大部分工作. /** * 只是生成了一个ReliableRDDCheckpointData的对象,并没有具体的实质操作 * Mark this RDD for checkpointing. It will be saved to a file inside the…
DiskStore 接着上一篇,本篇,我们分析一下实现磁盘存储的功能类DiskStore,这个类相对简单.在正式展开之前,我觉得有必要大概分析一下BlockManager的背景,或者说它的运行环境,运行的作用范围.Blockmanager这个类其实在运行时的每个节点都会有一个实例(包括driver和executor进程),因为不论是driver端进行广播变量的创建,还是executor端shuffle过程中写shuffle块,或者是任务运行时结果太大需要通过BlockManager传输,或者是R…
本期内容: 1. Spark Streaming Job架构与运行机制 2. Spark Streaming 容错架构与运行机制 事实上时间是不存在的,是由人的感官系统感觉时间的存在而已,是一种虚幻的存在,任何时候宇宙中的事情一直在发生着的. Spark Streaming好比时间,一直遵循其运行机制和架构在不停的在运行,无论你写多或者少的应用程序都跳不出这个范围. import org.apache.spark.SparkConf import org.apache.spark.streami…
本节内容 · spark底层执行机制 · 细说RDD构建过程 · Job Stage的划分算法 · Task最佳计算位置算法 一.spark底层执行机制 对于Spark底层的运行原理,找到了一副很好的图,先贴上 客户端提交应用后,spark是如何执行的要有一个整体的概念,做到心中有数,先整体把握,才能更好的分模块开垦细节,废话不多说,先来看该图如何更好的理解. 1)提交前的联系 Worker向Master或则ResourceManager汇报自己有哪些资源(内存.CPU.磁盘空间.网络等),Ma…
一  基本术语 Application:  基于Spark的用用户程序,包含了Driver程序和集群上的Executor. Driver Program: 运行行main函数并且新建SparkContext的程序. Cluster Manager: 在集群上获取资源的外部服务(例如:standalone,Mesos,Yarn ). Worker Node:集群中任何可以运行行应用用代码的节点. Executor: 是在一一个Worker Node上为某应用用启动的一一个进程,该进程负责运行行任务…
转载自:http://www.aboutyun.com/thread-19652-1-1.html 问题导读 1.spark共享变量的作用是什么?2.什么情况下使用共享变量?3.如何在程序中使用共享变量?4.广播变量源码包含哪些内容? spark编程中,我们经常会遇到使用全局变量,来累加或则使用全局变量.然而对于分布式编程这个却与传统编程有着很大的区别.不可能在程序中声明一个全局变量,在分布式编程中就可以直接使用.因为代码会分发到多台机器,导致我们认为的全局变量失效.那么spark,spark…
dataframe以RDD为基础的分布式数据集,与RDD的区别是,带有Schema元数据,即DF所表示的二维表数据集的每一列带有名称和类型,好处:精简代码:提升执行效率:减少数据读取; 如果不配置spark.deploy.recoveryMode选项为ZOOKEEPER,那么集群的所有运行数据在Master重启是都会丢失 spark工作机制 用户在client端提交作业后,会由Driver运行main方法并创建spark context上下文. 执行add算子,形成dag图输入dagschedu…
转载自:    spark总结 第一个Spark程序 /** * 功能:用spark实现的单词计数程序 * 环境:spark 1.6.1, scala 2.10.4 */ // 导入相关类库import org.apache.spark._ object WordCount { def main(args: Array[String]) { // 建立spark运行上下文 val sc = new SparkContext("local[3]", "WordCount&quo…