![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
大数据/Spark/Spark Core
Anbang713
这个作者很懒,什么都没留下…
展开
-
Spark及其生态圈
说明:本文选自郭景瞻的《图解Spark:核心技术与案例实战》一、Spark简介Spark是加州大学伯克利分校AMP实验室开发的通用大数据处理框架。其生态系统也称为BDAS,力图在算法(Algorithms)、机器(Machines)和人(People)三者之间通过大规模集成来展现大数据应用的一个开源平台。Spark使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作...原创 2018-08-11 11:51:13 · 3284 阅读 · 0 评论 -
Spark架构原理-SparkContext的初始化原理
我们通过spark-submit提交自己编写的代码,即提交一个Application。首先就是有一个Driver进程,在该进程构造SparkConf和SparkContext,而在构造SparkContext的时候会去构造DAGScheduler和TaskScheduler,以及Spark UI。在这里我们对SparkContext初始化原理进行剖析,就是剖析如何构造这三个组件的。...原创 2018-08-12 15:02:36 · 386 阅读 · 0 评论 -
Spark架构原理-DAGScheduler以及stage划分算法
原文地址:https://blog.csdn.net/zhanglh046/article/details/78485985一、核心属性TaskScheduler taskScheduler: task调度器。 AtomicInteger nextJobId:获取下一个jobId。 Int numTotalJobs:job总数。 AtomicInteger nextStageId...转载 2018-08-12 15:15:51 · 814 阅读 · 0 评论 -
Spark架构原理-TaskScheduler原理剖析
原文地址:https://blog.csdn.net/zhanglh046/article/details/78486051TaskScheduler是一个接口,DAGScheduler在提交TaskSet给底层调度器的时候是面向接口TaskScheduler。TaskSchduler的核心任务是提交Taskset到集群运算并汇报结果。其执行过程如下图所示:为TaskSet创建和维护一...转载 2018-08-12 15:44:16 · 1088 阅读 · 0 评论 -
Spark架构原理-Executor源码分析
Executor是在worker启动的一个进程,用于执行task任务。我们知道CoarseGrainedSchedulerBackend在启动之后,会创建Driver终端,然后会立即向Driver发送RegisterExecutor消息,注册成功之后,会向CoarseGrainedSchedulerBackend返回一个RegisteredExecutor消息。然后会创建一个Executor对象;然后接下来Driver内的DAGScheduler。向CoarseGrainedSchedulerBackend转载 2018-08-12 16:22:19 · 275 阅读 · 0 评论 -
Spark架构原理-Task原理剖析和源码分析
原文地址:https://blog.csdn.net/zhanglh046/article/details/78486125一 TaskRunner 运行taskoverride def run(): Unit = { val threadMXBean= ManagementFactory.getThreadMXBean // 构建task内存管理器 val ...转载 2018-08-12 16:27:29 · 632 阅读 · 0 评论 -
Spark架构原理-作业提交类调用关系
原文地址:https://blog.csdn.net/xwc35047/article/details/78732738转载 2018-08-12 16:43:43 · 254 阅读 · 0 评论 -
Spark架构原理-Checkpoint原理剖析和源码分析
原文地址:https://blog.csdn.net/zhanglh046/article/details/78486338一 Spark中Checkpoint是什么假设一个应用程序特别复杂场景,从初始RDD开始到最后整个应用程序完成,有非常多的步骤,比如超过20个transformation操作,而且整个运行时间也比较长,比如1-5个小时。此时某一个步骤数据丢失了,尽管之前在之前可能已经...转载 2018-08-13 07:57:03 · 845 阅读 · 1 评论 -
Spark架构原理-Cache原理剖析和源码分析
原文地址:https://blog.csdn.net/zhanglh046/article/details/78486318Task运行的时候是要去获取Parent的RDD对应的Partition的数据的,即它会调用RDD的iterator方法把对应的Partition的数据集给遍历出来,然后写入存储,这个存储可能是磁盘或者内存,取决于StorageLevel是什么。如果当前RDD的Sto...转载 2018-08-13 08:00:44 · 862 阅读 · 0 评论 -
Spark性能优化-开发调优篇
原文地址:https://www.iteblog.com/archives/1657.htmlSpark性能优化的第一步,就是要在开发Spark作业的过程中注意和应用一些性能优化的基本原则。开发调优,就是要让大家了解以下一些Spark基本开发原则,包括:RDD lineage设计、算子的合理使用、特殊操作的优化等。在开发过程中,时时刻刻都应该注意以上原则,并将这些原则根据具体的业务以及实际的应...转载 2018-08-15 20:24:05 · 214 阅读 · 0 评论 -
Spark性能优化-资源调优篇
原文地址:https://www.iteblog.com/archives/1659.html 在开发完Spark作业之后,就该为作业配置合适的资源了。Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置这些参数,最后就只能胡乱设置,甚至压根儿不设置。资源参数设置的不合理,可能会导致没有充分利用集群资...转载 2018-08-15 20:32:14 · 283 阅读 · 0 评论 -
Spark性能调优-数据倾斜调优
原文地址:https://www.iteblog.com/archives/1671.html一 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能。二 数据倾斜发生时的现象 1、绝大多数task执行得都非常快,但个别task...转载 2018-08-15 20:45:23 · 244 阅读 · 0 评论 -
Spark性能优化-shuffle调优
原文地址:https://www.iteblog.com/archives/1672.html一 调优概述 大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。因此,如果要让作业的性能更上一层楼,就有必要对shuffle过程进行调优。但是也必须提醒大家的是,影响一个Spark作业性能的因素,主要还是代码开发、资源参数以...转载 2018-08-15 20:52:42 · 268 阅读 · 0 评论 -
Spark架构原理-Master的注册机制原理
原文地址:https://blog.csdn.net/zhanglh046/article/details/78485861 一 Worker向Master注册1.1 Worker启动,调用registerWithMaster,向Master注册当worker启动的时候,会调用registerWithMaster方法向Master进行注册。注册状态置为false。 尝...转载 2018-08-13 21:35:34 · 815 阅读 · 0 评论 -
Spark架构原理-Master资源调度算法原理剖析与源码分析
原文地址:https://blog.csdn.net/zhanglh046/article/details/78485783Master是通过schedule方法进行资源调度,告知worker启动executor等。一、schedule方法判断master状态,只有alive状态的master才可以进行资源调度,standby是不能够调度的 将可用的worker节点打乱,这样有利于d...转载 2018-08-13 22:18:53 · 292 阅读 · 0 评论 -
Spark架构原理-Spark启动消息通信
Spark启动过程中主要是进行Master和Worker之间的通信,其消息发送关系如下图所示。首先由Worker节点向Master发送注册消息,然后Master处理完毕后,返回注册成功消息或失败消息,如果成功注册,则Worker定时发送心跳消息给Master。原创 2018-08-12 11:55:48 · 684 阅读 · 0 评论 -
Spark架构原理-Worker源码分析
Worker是spark的工作节点,主要负责接受Master指令,启动或者杀掉Executor,Driver等。汇报Driver或者Executor状态到Master,发送心跳请求到Master等等。转载 2018-08-12 11:09:55 · 688 阅读 · 0 评论 -
Spark核心编程-RDD概述
说明:本文参考郭景瞻的《图解Spark:核心技术与案例实战》一、背景1、原因计算机普遍应用和移动互联网的发展导致了数据量爆发式增长,单台机器处理能力和I/O性能远远满足不了这种增长,越来越多的企业不得不把计算和存储扩展到集群中去。但是在集群中又出现了以下的三个问题:(1)并行化处理:以前的应用程序需要以并行化的方式重写,并且这种编程模型能够处理范围广泛的计算。(2)集群的容错:...原创 2018-08-11 11:51:28 · 468 阅读 · 0 评论 -
Spark核心编程-RDD的实现和编程接口
说明:本文参考郭景瞻的《图解Spark:核心技术与案例实战》一、RDD的实现1、作业调度当对RDD执行“转换操作”时,调度器(DGAScheduler)会根据RDD的血统来构建由若干调度阶段(State)组成的有向无环图(DAG),每个调度阶段包含尽可能多的连续“窄依赖”转换。调度器按照有向无环图顺序进行计算,并最终得到目标RDD。调度器(TaskScheduler)向各节点分配任...原创 2018-08-11 11:51:37 · 1369 阅读 · 0 评论 -
Spark核心编程-RDD创建操作
目前有两种类型的基础RDD:一种是并行集合(Parallelized Collections),接收一个已经存在的scala集合,然后进行各种并行计算;另外一种是从外部存储创建的RDD,外部存储可以是文本文件或者HDFS,也可以是Hadoop的接口API。一、并行化集合创建操作通过SparkContext的parallelize方法,在一个已经存在的scala集合上创建的Seq对象,集合的...原创 2018-08-11 11:51:46 · 443 阅读 · 0 评论 -
Spark核心编程-RDD转换操作
一、基础转换操作map 对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD,原RDD中的元素在新RDD中都有且只有一个元素与之对应。public static void mapTest(JavaSparkContext sc) { List<String> words = Arrays.asList("hello", "world"); JavaRDD...原创 2018-08-11 16:19:56 · 524 阅读 · 0 评论 -
Spark架构原理-Master主备切换原理
原文地址:https://blog.csdn.net/zhanglh046/article/details/78485745Master作为Spark standalone模式的核心,如果Master出现异常,那么集群就不能正常工作。所以Spark会从Standby中选择一个节点作为Master。Spark支持以下几种策略,这种策略可以通过配置文件spark-env.sh配置spark.d...转载 2018-08-14 21:30:55 · 920 阅读 · 0 评论 -
Spark架构原理-宽依赖和窄依赖
一 概念窄依赖:父RDD的每个分区只被子RDD的一个分区所使用,可以理解为父RDD的分区和子RDD的分区关系是一对一。 宽依赖:父RDD的每个分区都可能被多个子RDD分区所使用,可以理解为父RDD的分区和子RDD的分区关系是一对多。二 workcount中的依赖关系...原创 2018-08-14 21:42:38 · 274 阅读 · 0 评论 -
Spark核心编程-RDD控制操作
Spark可以将RDD持久化到内存或者磁盘,持久化到内存可以极大的提高迭代计算以及计算模型之间的数据共享,一般情况下,执行节点60%内存用于缓存数据,剩下40%用于运行任务。Spark使用persist、cache进行操作持久化,其中cache是persist的特例。cache():RDD[T] persist():RDD[T] persist(level:StorageLevel):RD...原创 2018-08-11 16:23:01 · 444 阅读 · 0 评论 -
Spark核心编程-RDD行动操作
一、集合标量行动操作first: 返回RDD中第一个元素,不排序 count: 返回RDD中元素数量 reduce: 根据映射函数,对RDD进行计算 collect: 将RDD转化为数组 take(num): 获取RDD中从0到num-1下标的元素,不排序 top(num): 按照默认降序排序的或者指定规则排序返回前num个元素 takeOrdered(num): 和top类似,只...原创 2018-08-11 16:26:06 · 649 阅读 · 0 评论 -
Spark核心编程-RDD持久化详解
一、不使用RDD持久化二、使用RDD持久化三、持久化对于性能调优的原则尽量去复用RDD,差不多的RDD,可以抽取称为一个共同的RDD,供后面的RDD计算时,反复使用。 公共RDD一定要实现持久化,对于要多次计算和使用的公共RDD,一定要进行持久化。 持久化,也就是说,将RDD的数据缓存到内存中/磁盘中,以后无论对这个RDD做多少次计算,都是直接取这个RDD的持久化的数据,比如从内...原创 2018-08-11 16:46:42 · 1806 阅读 · 0 评论 -
Spark核心编程-WordCount
一、Java版public class WordCountLocal { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("wordCountLocal").setMaster("local"); JavaSparkContext sc = new ...原创 2018-08-11 17:22:13 · 185 阅读 · 0 评论 -
Spark核心编程-共享变量
Spark一个非常重要的特性就是共享变量。默认情况下,如果在一个算子函数中使用到了某个外部的变量,那么这个变量的值会被拷贝到每个task中。此时每个task只能操作自己的那份变量副本。如果多个task想要共享某个变量,那么这种方式是做不到的。Spark为此提供了两种共享变量,一种是Broadcast Variable(广播变量),另一种是Accumulator(累加变量)。Broadcas...原创 2018-08-11 17:44:55 · 1761 阅读 · 0 评论 -
Spark核心编程-RDD操作原理分析
一、union算子内部实现原理剖析说明:将两个RDD合并,返回两个RDD的并集,返回元素不去重。二、groupByKey算子内部实现原理剖析说明:将RDD[K, V]中每个K对应的V值合并到一个集合Iterable[V]中。三、reduceByKey算子内部实现原理剖析说明:将RDD[K, V]中每个K对应的V值根据映射函数来运算。四、distinc...原创 2018-08-11 18:14:49 · 779 阅读 · 0 评论 -
Spark架构原理-Spark运行架构剖析
一、Spark基本概念在学习Spark运行架构之前,我们有必要先了解Spark中几个基本概念。1、Application(应用程序):是指我们编写的Spark应用程序,包含驱动程序(Driver)和分布在集群中多个节点上运行的Executor代码,在执行过程中由一个或多个job组成。2、Driver(驱动程序):Spark中的Driver即运行Application的main方法,并且...原创 2018-08-12 09:18:58 · 799 阅读 · 1 评论 -
Spark架构原理-Master源码分析
Master是Spark Standalone运行模式下的主节点,主要用于管理集群,负责资源的调度。它继承了ThreadSafeRpcEndpoint和LeaderElectable类,由于继承ThreadSafeRpcEndpoint,所以Master就可以作为一个RpcEndpoint;继承LeaderElectable之后,就可以参加选举。转载 2018-08-12 10:20:12 · 591 阅读 · 0 评论 -
Spark架构原理-Master状态改变处理机制原理剖析与源码分析
原文地址:https://blog.csdn.net/zhanglh046/article/details/78485818一、Master故障挥着宕机,可能触发新的Master选举当重新选择Leader的时候,会进行集群的恢复,在恢复的过程中,就会向Worker和AppClient发送MasterChanged消息。private def beginRecovery(storedA...转载 2018-08-13 22:25:10 · 353 阅读 · 0 评论