
Spark专栏
文章平均质量分 75
Spark作为大数据处理的全能框架,受到了很多技术人的青睐。本专栏即在深入理解Spark的源码,也在记录使用Spark过程中的一些心得。
AlferWei
一个奋斗在编程路上的程序员。
展开
-
Spark核心原理 - 容错与HA
容错与HA所谓容错是指一个系统的部分出现错误的情况还能够持续地提供服务,不会因为一些细微的错误导致系统性能严重下降或者出现系统瘫痪。在一个集群出现机器故障、网络问题等是常态,尤其集群达到较大规模后,很可能较频繁出现机器故障不能进行提供服务,因此对于分布式集群需要进行容错设计。Spark能够实现高容错,以下将从Executor、Worker和Master的异常处理来介绍。Executor异常Spar...原创 2018-06-27 12:04:30 · 1646 阅读 · 0 评论 -
Spark核心原理 - 作业执行
Spark作业执行原理Spark的作业和任务调度系统是其核心,它能够有效地进行调度的根本原因是对任务划分DAG和容错,使得它对底层到顶层的各个模块之间的调用和处理显得游刃有余。下面介绍一些相关术语。 作业(Job):RDD中由行动操作所生成的一个或多个调度阶段。 调度阶段(Stage):每个作业会因为RDD之间的依赖关系拆分成多组任务集合,成为调度阶段,也叫做任务集(TaskSet)...原创 2018-06-12 21:50:07 · 556 阅读 · 0 评论 -
Spark核心原理 - 消息通信分析
Spark将通信层设计的非常巧妙,融合了各种设计/架构模式,将一个分布式集群系统的通信层细节完全屏蔽,这样在上层的计算框架的设计中能够获得很好的灵活性。同时,如果上层想要增加各种新的特性,或者对来自不同企业或组织的程序员贡献的特性,也能够很容易地增加进来,可以避开复杂的通信层而将注意力集中在上层计算框架的处理和优化上,入手难度非常小。另外,对上层计算框架中的各个核心组件的开发、功能增强,以及Bug...原创 2018-05-30 01:51:22 · 1874 阅读 · 0 评论 -
Spark存储分析 - 共享变量
多个task想要共享某个变量,Spark为此提供了两个共享变量,一种是Broadcast Variable(广播变量),另一种是Accumulator(累加变量)。Broadcast Variable会将使用到的变量,仅仅为每个节点拷贝一份,更大的用处是优化性能,减少网络传输以及内存消耗。Accumulator则可以让多个task共同操作一份变量,主要可以进行累加操作。Broadcast 广播变量...原创 2018-05-30 01:35:20 · 451 阅读 · 0 评论 -
Spark的计算本地性
Spark 不同的 Locality LevelPROCESS_LOCAL: 数据和 task 在同一个executor jvm 中,最好的就是这种 locality。NODE_LOCAL: 数据在同一个节点上。比如数据在同一个节点的另一个 executor上;或在 HDFS 上,恰好有 block 在同一个节点上。速度比 PROCESS_LOCAL 稍慢,因为数据需要在不同进程之间传递或从文件中...原创 2018-05-02 08:52:41 · 1243 阅读 · 0 评论 -
Spark存储分析 - 存储架构
Storage模块负责了Spark计算过程中所有的存储,包括基于Disk的和基于Memory的。用户在实际编程中,面对的是RDD,可以将RDD的数据通过调用org.apache.spark.rdd.RDD#cache将数据持久化;持久化的动作都是由Storage模块完成的。包括Shuffle过程中的数据,也都是由Storage模块管理的。可以说,RDD实现了用户的逻辑,而Storage则管理了用户...原创 2018-05-20 12:38:58 · 996 阅读 · 0 评论 -
Spark存储分析 - 存储级别
存储级别原创 2018-05-20 13:06:22 · 2501 阅读 · 0 评论 -
Spark存储分析 - RDD存储调用与数据读写过程
RDD存储调用读数据过程写数据过程原创 2018-05-20 14:05:47 · 2263 阅读 · 1 评论 -
Spark存储分析 - Shuffle分析
Shuffle简介在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。Spark作为MapReduce框架的一种实现,自然也实现了shuffle的逻辑,本文就深入研究Spark的shuffle是如何实现的,有什么优缺点。 Shuffle的...原创 2018-05-20 14:32:19 · 1155 阅读 · 0 评论 -
Spark源码解析之RDD
从HDFS读取并转换为HadoopRDD val path = args(0) val dateTime = DateTime.now().getMillis val jobName = "WordCount" val sparkConf = new SparkConf().setAppName(jobName) val sc = new SparkContex原创 2016-09-18 17:29:43 · 607 阅读 · 0 评论 -
Spark 源码解析之SparkContext家族(一)
SparkContextSparkContext 是Spark 应用的主入口,通过它可以连接Spark 集群,并在集群中创建RDD,累加器,广播变量等;==每一个启动 JVM 上只能有一个SparkContext,在启动一个新的SparkContext之前,必须停掉处于活动状态的SparkContext==。/** * Main entry point for Spark functionalit原创 2016-12-09 17:16:12 · 1130 阅读 · 0 评论 -
Spark 源码解析之SparkContext家族(二)SoarkContext都做了些什么
SparkContext作为Spark应用程序连接Spark集群的入口,对于学习Spark的运行机制与原理有重要的作用。SparkContext初始化时序图下面是阅读源码后做的SparkContext初始化时序图: 结合源码,厘清SparkContext的初始化这里只列举了SparkContext初始化中的部分源码。设置SparkContext是否允许多个共存:...原创 2017-02-09 23:35:06 · 1264 阅读 · 0 评论 -
Spark源码解析之textFile
Spark加载文件的时候可以指定最小的partition数量,那么这个patition数量和读取文件时的split操作有什么联系呢?下面就跟着Spark源码,看看二者到底是什么关系。/*** Read a text file from HDFS, a local file system (available on all nodes), or any* Hadoop-supported file原创 2017-02-08 23:14:17 · 4119 阅读 · 0 评论 -
Spark源码解析之小分区合并
coalesce 函数来减少分区小分区合并,不需要 Shuffle 过程 /** * Return a new RDD that is reduced into `numPartitions` partitions. * * This results in a narrow dependency, e.g. if you go from 1000 partitions * t原创 2016-12-13 13:53:02 · 1203 阅读 · 0 评论