随笔分类 -  spark

摘要:一、概述要减少内存的消耗,除了使用高效的序列化类库以外,还有一个很重要的事情,就是优化数据结构。从而避免Java语法特性中所导致的额外内存的开销,比如基于指针的Java数据结构,以及包装类型。有一个关键的问题,就是优化什么数据结构?其实主要就是优化你的算子函数,内部使用到的局部数据,或者是算子函数外部的数据。都可以进行数据结构的优化。优化之后,都会减少其对内存的消耗和占用。二、如何优化数据结构1、... 阅读全文
posted @ 2019-07-29 10:13 米兰的小铁將 阅读(556) 评论(0) 推荐(0)
摘要:一、数据序列化概述在任何分布式系统中,序列化都是扮演着一个重要的角色的。如果使用的序列化技术,在执行序列化操作的时候很慢,或者是序列化后的数据还是很大,那么会让分布式应用程序的性能下降很多。所以,进行Spark性能优化的第一步,就是进行序列化的性能优化。Spark自身默认就会在一些地方对数据进行序列化,比如Shuffle。还有就是,如果我们的算子函数使用到了外部的数据(比如Java内置类型,或者自... 阅读全文
posted @ 2019-07-29 09:57 米兰的小铁將 阅读(276) 评论(0) 推荐(0)
摘要:一、内存都消耗在了哪里1、每个Java对象,都有一个对象头,会占用16个字节,主要是包括了一些对象的元信息,比如指向它的类的指针。如果一个对象本身很小,比如就包括了一个int类型的field,那么它的对象头实际上比对象自己还要大。2、Java的String对象,会比它内部的原始数据,要多出40个字节。因为它内部使用char数组来保存内部的字符序列的,并且还得保存诸如数组长度之类的信息。而且因为St... 阅读全文
posted @ 2019-07-26 17:23 米兰的小铁將 阅读(201) 评论(0) 推荐(0)
摘要:一、原理1、Checkpoint是什么Checkpoint,是Spark提供的一个比较高级的功能。有的时候,比如说,我们的Spark应用程序,特别的复杂,然后呢,从初始的RDD开始,到最后整个应用程序完成,有非常多的步骤,比如超过20个transformation操作。而且呢,整个应用运行的时间也特别长,比如通常要运行1~5个小时。在上述情况下,就比较适合使用checkpoint功能。因为,对于特... 阅读全文
posted @ 2019-07-26 15:59 米兰的小铁將 阅读(1299) 评论(0) 推荐(0)
摘要:一、图解二、源码分析###org.apache.spark.rdd/RDD.scalal###入口final def iterator(split: Partition, context: TaskContext): Iterator[T] = { if (storageLevel != StorageLevel.NONE) { // cacheManager相关东西 /... 阅读全文
posted @ 2019-07-26 15:43 米兰的小铁將 阅读(391) 评论(0) 推荐(0)
摘要:一、原理1、图解Driver上,有BlockManagerMaster,它的功能,就是负责对各个节点上的BlockManager内部管理的数据的元数据进行维护,比如Block的增删改等操作,都会在这里维护元数据的变更;每个节点上,都有BlockManager,BlockManager上有几个关键组件:DiskStore,负责对磁盘上的数据进行读写;MemoryStore,负责对内存中的数据进行读写... 阅读全文
posted @ 2019-07-26 15:14 米兰的小铁將 阅读(556) 评论(0) 推荐(0)
摘要:一、普通shuffle原理1、图解假设有一个节点上面运行了4个 ShuffleMapTask,然后这个节点上只有2个 cpu core。假如有另外一台节点,上面也运行了4个ResultTask,现在呢,正等着要去 ShuffleMapTask 的输出数据来完成比如 reduceByKey 等操作。每个 ShuffleMapTask 都会为 ReduceTask 创建一份 bucket 缓存,以及对... 阅读全文
posted @ 2019-07-25 14:49 米兰的小铁將 阅读(709) 评论(0) 推荐(0)
摘要:一、Task原理1、图解二、源码分析1、###org.apache.spark.executor/Executor.scala/** * 从TaskRunner开始,来看Task的运行的工作原理 */ class TaskRunner( execBackend: ExecutorBackend, val taskId: Long, val attempt... 阅读全文
posted @ 2019-07-24 16:37 米兰的小铁將 阅读(559) 评论(0) 推荐(0)
摘要:一、原理图解二、源码分析1、Executor注册机制worker中为Application启动的executor,实际上是启动了这个CoarseGrainedExecutorBackend进程;Executor注册机制:###org.apache.spark.executor/CoarseGrainedExecutorBackend.scala/** * 在actor的初始化方法中 *... 阅读全文
posted @ 2019-07-24 11:17 米兰的小铁將 阅读(257) 评论(0) 推荐(0)
摘要:一、源码分析###入口###org.apache.spark.scheduler/DAGScheduler.scala// 最后,针对stage的task,创建TaskSet对象,调用taskScheduler的submitTasks()方法,提交taskSet // 默认情况下,我们的standalone模式,是使用的TaskSchedulerImpl,TaskScheduler只是一... 阅读全文
posted @ 2019-07-23 18:13 米兰的小铁將 阅读(477) 评论(0) 推荐(0)
摘要:一、stage划分算法原理 1、图解 Job->Stage->Task 开发完一个应用以后,把这个应用提交到Spark集群,这个应用叫Application。这个应用里面开发了很多代码,这些代码里面凡是遇到一个action操作,就会产生一个job任务。 一个Application有一个或多个job任 阅读全文
posted @ 2019-07-22 15:49 米兰的小铁將 阅读(650) 评论(0) 推荐(0)
摘要:一、以Wordcount为例来分析1、Wordcountval lines = sc.textFile()val words = lines.flatMap(line => line.split(" "))val pairs = words.map(word => (word, 1))val counts = pairs.reduceByKey(_ + _)counts.foreach(count... 阅读全文
posted @ 2019-07-19 14:15 米兰的小铁將 阅读(315) 评论(0) 推荐(0)
摘要:一、Work原理 1、图解 Worker启动Driver的一个基本原理,就是Worker内部会启动一个线程,这个线程可以理解为,就是DriverRunner,然后DriverRunner就会去负责启动Driver进程, 并在之后对Driver进程进行管理; Worker启动Executor,其实和D 阅读全文
posted @ 2019-07-19 11:15 米兰的小铁將 阅读(411) 评论(0) 推荐(0)
摘要:一、主备切换机制原理剖析 1、图解 Master实际上可以配置两个,那么Spark原生的standalone模式是支持Master主备切换的。也就是说,当Active Master节点挂掉时,可以将StandBy master节点切换为Active Master。 Spark Master主备切换可 阅读全文
posted @ 2019-07-18 11:40 米兰的小铁將 阅读(575) 评论(0) 推荐(0)
摘要:一、SparkContext原理 1、图解 1、当driver启动后会去运行我们的application,在运行application的时候,所有spark程序的第一行都是先创建SparkContext,在创建SparkContext的时候,它的内部创建 两个非常重要的东西DAGSchedule和T 阅读全文
posted @ 2019-07-17 15:12 米兰的小铁將 阅读(1104) 评论(0) 推荐(0)
摘要:一、三种提交模式 1、Spark内核架构,其实就是第一种模式,standalone模式,基于Spark自己的Master-Worker集群。 2、第二种,是基于YARN的yarn-cluster模式。 3、第三种,是基于YARN的yarn-client模式。 4、如果,你要切换到第二种和第三种模式, 阅读全文
posted @ 2019-07-17 09:25 米兰的小铁將 阅读(296) 评论(0) 推荐(0)
摘要:一、内核剖析 1、内核模块 1、Application 2、spark-submit 3、Driver 4、SparkContext 5、Master 6、Worker 7、Executor 8、Job 9、DAGScheduler 10、TaskScheduler 11、ShuffleMapTas 阅读全文
posted @ 2019-07-16 16:47 米兰的小铁將 阅读(291) 评论(0) 推荐(0)
摘要:一、基于排序机制的wordcount程序 1、要求 1、对文本文件内的每个单词都统计出其出现的次数。 2、按照每个单词出现次数的数量,降序排序。 2、代码实现 java实现 package cn.spark.study.core; import java.util.Arrays; import or 阅读全文
posted @ 2019-07-16 11:27 米兰的小铁將 阅读(438) 评论(0) 推荐(0)
摘要:一、共享变量 1、共享变量工作原理 Spark一个非常重要的特性就是共享变量。 默认情况下,如果在一个算子的函数中使用到了某个外部的变量,那么这个变量的值会被拷贝到每个task中。此时每个task只能操作自己的那份变量副本。如果多个task想 要共享某个变量,那么这种方式是做不到的。 Spark为此 阅读全文
posted @ 2019-07-09 10:59 米兰的小铁將 阅读(1135) 评论(0) 推荐(0)
摘要:一、RDD持久化 1、不使用RDD持久化的问题 2、RDD持久化原理 Spark非常重要的一个功能特性就是可以将RDD持久化在内存中。当对RDD执行持久化操作时,每个节点都会将自己操作的RDD的partition持久化到内存中,并且在之后对 该RDD的反复使用中,直接使用内存缓存的partition 阅读全文
posted @ 2019-07-08 14:20 米兰的小铁將 阅读(1666) 评论(0) 推荐(0)