![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spark
文章平均质量分 57
生命不息丶折腾不止
这个作者很懒,什么都没留下…
展开
-
Spark面对OOM问题的解决方法及优化总结
Spark中的OOM问题不外乎以下两种情况map执行中内存溢出shuffle后内存溢出 map执行中内存溢出代表了所有map类型的操作,包括:flatMap,filter,mapPatitions等。shuffle后内存溢出的shuffle操作包括join,reduceByKey,repartition等操作。后面先总结一下我对Spark内存模型的理解,再总结各种OOM的情况相对应的解决办法和转载 2018-03-28 16:58:04 · 979 阅读 · 0 评论 -
Spark2.2 宽窄依赖剖析图解
宽窄依赖图解会引起Shuffle的操作:1. 具有重新调整分区的操作:repartition、coalesce2.*ByKey:groupByKey、reduceByKey3.关联操作:join、cogroup原创 2017-10-19 14:53:24 · 559 阅读 · 0 评论 -
Spark2.2 基于Yarn的两种提交模式剖析图解
原创 2017-10-19 16:40:19 · 449 阅读 · 0 评论 -
Spark2.2 SparkContext原理剖析图及源码
SparkContext原理剖析图源码原创 2017-10-23 13:36:23 · 345 阅读 · 0 评论 -
Spark2.2 Worker、Driver和Executor向Master注册原理剖析图解及源码
Master注册原理剖析图解Application向Master注册源码剖析原创 2017-10-23 20:44:39 · 440 阅读 · 0 评论 -
Spark2.2 Driver和Executor状态改变处理机制源码分析
Driver状态发生改变处理机制 DriverStateChanged( ) Executor状态发生改变处理机制 ExecutorStateChanged( )原创 2017-10-23 22:04:04 · 639 阅读 · 0 评论 -
Spark2.2 任务调度机制schedule()源码剖析
Scheduler()图解Scheduler()代码剖析 schedule() /** * leen * 调度当前可用的资源为等待中的Applications * 这个方法将在一个新的Application被提交,或者可用的resource变化的时候被调用。 */ private def schedule(): Unit = { //1.首先判断Maste原创 2017-11-01 17:27:29 · 586 阅读 · 0 评论 -
Spark2.2 Worker原理剖析图解及源码剖析
Worker原理剖析图解LaunchExecutor()源码剖析原创 2017-11-02 14:32:24 · 268 阅读 · 0 评论 -
Spark2.2 job触发流程原理剖析与源码分析
文章以wordCount案例展开:(1) val lines = sc.textFile(“”)textFile()算子,返回元组对,其中,K为每一行的偏移量offset ,V为每一行的文本 /** * 从HDFS上读取一个文本文件,一个本地文件系统(可用在所有节点) * 或者任何hadoop支持的文件系统的URI,最终返回字符串形式的RDD * * @param path原创 2017-11-24 16:04:14 · 322 阅读 · 0 评论 -
Spark2.2 DAGScheduler源码分析[stage划分算法源码剖析]
概述DAGScheduler的stage的划分算法:会从触发action操作的那个rdd开始向前倒退;首先会为最后一个rdd创建一个stage,之后向前倒推的时候,会判断rdd的依赖,如果发现rdd是宽依赖,就会将宽依赖的那个rdd创建一个新的stage,这个新的rdd就是新的stage的最后一个rdd;继续倒推,依据rdd的宽窄依赖,进行stage的划分,直到遍历完所有的rdd。 源码分析原创 2017-11-24 17:22:12 · 490 阅读 · 0 评论 -
Spark2.2 TaskScheduler原理剖析与源码分析
TaskScheduler的作用TaskScheduler的主要作用是把TaskSet中的每一个task提交到executor上去执行; 其中最主要的就是task的分配算法。TaskScheduler源码分析 TaskScheduler 提交tasks的入口 submitTasks为每一个taskSet创建一个taskSetManager调用CoarseGrainedSchedulerBa原创 2017-11-27 14:55:28 · 2733 阅读 · 0 评论 -
Spark2.2 Executor原理剖析及源码分析
executor作用Spark executor,由一个线程池支持运行任务(tasks)。源码剖析CoarseGrainedExecutorBackend类 worker中为application启动的executor,实际上是启动的这个CoarseGrainedExecutorBackend进程.向driver注册executor /** * leen * 相当于是向driver原创 2017-11-27 15:54:37 · 455 阅读 · 0 评论 -
Spark2.2 Task原理分析及源码解析
Task是什么task是一个执行单元。我们有两种任务:org.apache.spark.scheduler.ShuffleMapTaskorg.apache.spark.scheduler.ResultTaskSpark作业由一个或多个stages组成。 job的最后一个阶段是由多个ResultTasks组成的,之前的stages由ShuffleMapTasks组成。 ResultTask原创 2017-11-27 17:08:35 · 490 阅读 · 0 评论 -
Spark spark-submit 参数
参数翻译 参数名 格式 参数说明 –master MASTER_URL spark://host:port, mesos://host:port, yarn, or local. –deploy-mode DEPLOY_MODE 是否在本地启动驱动程序(“client”) 或者 在集群内部的一个工作机器上(“cluster”)(默认: client)。 –cla翻译 2017-12-06 20:52:02 · 2847 阅读 · 0 评论 -
Spark算子[14]:top、takeOrdered 源码实例详解
takeOrdered源码/** * 从指定的RDD中返回前k个(最小)元素的集合,底层排序,和top相反。 * * @note 该方法仅在预期的数组很小的情况下使用,因为所有的数据都被加载到驱动程序的内存中。 */def takeOrdered(num: Int)(implicit ord: Ordering[T]): Array[T] = withScope { if (num ==原创 2017-12-15 17:11:26 · 1556 阅读 · 0 评论 -
Spark算子[15]:sample、takeSample 源码实例详解
sample返回一个RDD[T]源码:/** * 返回此RDD的抽样子集。 * @note 这并不能保证提供的只是给定[[RDD]]的分数。 */def sample( withReplacement: Boolean, fraction: Double, seed: Long = Utils.random.nextLong): RDD[T] = { requir原创 2017-12-16 11:03:00 · 21742 阅读 · 0 评论 -
编译Spark2.+ 、Hadoop CDH 版本
参考官方文档:http://spark.apache.org/docs/latest/building-spark.htmlSpark2.2+移除了对hadoop2.5的支持!!!一、 Spark-2.1.2 编译环境准备1、hadoop-2.5.0-cdh5.3.6 2、安装并配置好Maven(本次编译使用apache maven 3.3.9) 3、 安装并配置JDK(本次编译使...原创 2018-01-11 19:42:04 · 1662 阅读 · 0 评论 -
SparkSQL 之 基于Java实现UDF和UDAF详解
UDF源码:最多传入参数为22个//传入两个参数def register(name: String, f: UDF2[_, _, _], returnType: DataType): Unit = { val func = f.asInstanceOf[UDF2[Any, Any, Any]].call(_: Any, _: Any) functionRegistry.registerFu原创 2017-12-27 17:11:28 · 7766 阅读 · 0 评论 -
SparkSQL 之 RDD转为DataSet的两种方式
DataFrame可以从结构化文件、hive表、外部数据库以及现有的RDD加载构建得到。这里主要针对从现有的RDD来构建DataFrame进行实践与解析。 Spark SQL支持将现有的RDDs转换为DataSet的两种不同的方法。 第一种方法是使用反射来推断包含特定对象类型的RDD的模式。在写Spark程序的同时,已经知道了模式,这种基于反射的方法可以使代码更简洁并且程序工作得更好。第二种方原创 2017-12-27 10:54:54 · 8290 阅读 · 0 评论 -
Spark算子[17]:zip、zipPartitions、zipWithIndex、zipWithUniqueId 实例详解
zip def zip[U](other: RDD[U])(implicit arg0: ClassTag[U]): RDD[(T, U)]zip函数用于将两个RDD组合成Key/Value形式的RDD,这里默认两个RDD的partition数量以及元素数量都相同,否则会抛出异常。scala> var rdd1 = sc.makeRDD(1 to 5,2)scala> var rdd2 =转载 2017-12-18 16:38:26 · 1783 阅读 · 0 评论 -
Spark算子[03]:mapPartitions,mapPartitionsWithIndex 源码实战案例分析
mapPartitions该函数和map函数类似,只不过映射函数的参数由RDD中的每一个元素变成了RDD中每一个分区的迭代器。如果在映射的过程中需要频繁创建额外的对象,使用mapPartitions要比map高效的过。比如,将RDD中的所有数据通过JDBC连接写入数据库,如果使用map函数,可能要为每一个元素都创建一个connection,这样开销很大,如果使用mapPartitions,那么只原创 2017-11-28 18:55:35 · 2107 阅读 · 0 评论 -
Spark算子[05]:parallelize,makeRDD,textFile
parallelizescala版本: 第一个参数:本地scala Seq集合; 第二个参数:numSlices partition的数量; 返回:RDD[T] /** Distribute a local Scala collection to form an RDD.*/def parallelize[T: ClassTag](seq: Seq[T],numSlices: Int =原创 2017-12-07 20:08:11 · 2157 阅读 · 0 评论 -
Spark算子[04]:map,flatMap,mapToPair,flatMapToPair
input:/spark.txtFor other Hadoop InputFormatsyou can use the methodwhich takes the arbitrary JobConf and input format classkey class and value classSet these the same way you would for a Hadoop job原创 2017-12-07 17:19:49 · 6635 阅读 · 0 评论 -
Spark算子[01]:foreach,foreachPartition
概述RDD.foreachPartition/foreach这两个action的操作: 这两个action主要用于对每个partition中的iterator实行迭代的处理。通过用户传入的function对iterator进行内容的处理。foreach的操作在foreach中,传入一个function,这个函数的传入参数就是每个partition中,每次的foreach得到的一个rdd的kv实例,原创 2017-11-28 10:50:31 · 8306 阅读 · 0 评论 -
Spark算子[02]:coalesce,repartition
概述coalesce与repartition都是RDD的分区进行重新划分,repartition只是coalesce接口中shuffle为true的简易实现; 当spark程序中,存在过多的小任务的时候,可以通过 RDD.coalesce方法,收缩合并分区,减少分区的个数,减小任务调度成本,避免Shuffle导致,这比使用RDD.repartition效率提高不少。源码解析 coalesce源码原创 2017-11-28 16:11:00 · 1020 阅读 · 0 评论 -
Spark2.2 广播变量broadcast原理及源码剖析
实例首先先来看一看broadcast的使用代码: val factor = List[Int](1,2,3); val factorBroadcast = sc.broadcast(factor) val nums = Array(1,2,3,4,5,6,7,8,9) val numsRdd = sc.parallelize(nums,3) val list = n原创 2017-11-29 19:48:09 · 2949 阅读 · 0 评论 -
Spark算子[16]:subtractByKey、join、rightOuterJoin、leftOuterJoin 实例详解
subtractByKeydef subtractByKey[W](other: RDD[(K, W)])(implicit arg0: ClassTag[W]): RDD[(K, V)]def subtractByKey[W](other: RDD[(K, W)], numPartitions: Int)(implicit arg0: ClassTag[W]): RDD[(K, V)]def su转载 2017-12-16 12:33:02 · 1150 阅读 · 0 评论 -
Spark性能调优:使用Kryo序列化库、RDD的压缩
使用Kryo序列化的原因默认情况下,Spark内部是通过Java序列化(默认的序列化方式)形成一个二进制字节数组,大大减少了数据在内存、硬盘中占用的空间,减少了网络数据传输的开销,并且可以精确的推测内存使用情况,降低GC频率。这种默认序列化机制的好处在于:处理起来比较方便,也不需要我们手动去做什么事情,只是在算子里面使用的变量必须是实现Serializable接口的,可序列化即可。 但是缺点在于:原创 2017-12-06 16:35:53 · 6399 阅读 · 1 评论 -
Spark Java sortByKey二次排序及Task not serializable异常
相比于scala,用java写二次排序较繁琐一些,请参考: Spark Java 二次排序:http://blog.csdn.net/leen0304/article/details/78280282 Spark Scala 二次排序: http://blog.csdn.net/leen0304/article/details/78280282下边用sortByKey实现二次排序: 为了说明问原创 2017-12-15 11:22:32 · 1276 阅读 · 0 评论 -
Spark算子[08]:combineByKey详解
combineByKey聚合数据一般在集中式数据比较方便,如果涉及到分布式的数据集,该如何去实现呢。这里介绍一下combineByKey, 这个是各种聚集操作的鼻祖,应该要好好了解一下,可以参考Spark API。 更好的,可以将spark的源码包加载到Idea工具中,Spark源码包下载。源码 /** * @see [[combineByKeyWithClassTag]] *原创 2017-12-11 18:41:08 · 914 阅读 · 1 评论 -
Spark算子[19]:saveAsHadoopFile、saveAsNewAPIHadoopFile 源码实例详解
saveAsHadoopFile、saveAsNewAPIHadoopFile两个算子来源于PairRDDFunctions。saveAsHadoopFilesaveAsHadoopFile是将RDD存储在HDFS上的文件中,支持老版本Hadoop API。 可以指定outputKeyClass、outputValueClass以及压缩格式。 每个分区输出一个文件。源码/** saveAsHad原创 2017-12-20 16:18:37 · 12942 阅读 · 1 评论 -
Spark算子[18]:saveAsTextFile、saveAsObjectFile 源码实例详解
1、saveAsTextFile将此RDD保存为一个压缩文本文件,使用元素的字符串表示形式。第一个参数:Path为保存的路径; 第二个参数:codec为压缩编码格式;从源码中可以看到,saveAsTextFile函数是依赖于saveAsHadoopFile函数,由于saveAsHadoopFile函数接受PairRDD,所以在saveAsTextFile函数中利用rddToPairRDDFunct原创 2017-12-19 12:26:29 · 7622 阅读 · 0 评论 -
Spark算子[07]:reduce,reduceByKey,count,countByKey
算子 reduce,reduceByKey,count,countByKey,aggregateByKey 可分为两类:action操作:reduce,count,countByKey transformation操作:reduceByKey,aggregateByKey1、reducereduce(func) 是对JavaRDD的操作 使用函数func聚合rdd的元素(它需要两个参数并返回一原创 2017-12-08 15:46:57 · 2816 阅读 · 1 评论 -
Spark性能调优:合理设置并行度
Spark并行度原理以 Spark 中的 WordCount 作业为例,每个Spark作业其实都是一个 Application,每个 Application 对应多个 Jobs,一个 action 操作(比如 collect)触发一个 job,在WordCount程序中有一个 job,每个 job 拆成多个 stage(发生 shuffle 的时候回拆分出一个 stage),reduceByKey转载 2017-11-30 11:21:01 · 24629 阅读 · 3 评论 -
Spark2.2 内核架构深层剖析图解
原创 2017-10-19 13:07:37 · 313 阅读 · 0 评论 -
Spark性能调优:调度分配更多资源
资源调优概述性能调优的王道就是增加和分配更多的资源,性能和速度上的提升是显而易见的。基本上,在一定范围之内,增加资源与性能的提升是成正比的。Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。资源参数设置的不合理,可能会导致没有充分利用集群资源,作业运行会极其缓慢;或者设置的资源过大,队列没有足够的资源来提供,进而导致各种异常。因此我们必须对Spark作业的资源使用原理有一原创 2017-11-30 15:07:37 · 943 阅读 · 0 评论 -
Spark算子[06]:union,distinct,cartesian,intersection,subtract
输入: #scala val rdd1 = sc.parallelize(List(“a”,”b”,”b”,”c”)) val rdd2 = sc.parallelize(List(“c”,”d”,”e”)) #java JavaRDD rdd1 = sc.parallelize(Arrays.asList(“a”,”b”,”b”,”c”)); Ja原创 2017-12-08 12:18:00 · 590 阅读 · 0 评论 -
Spark中Task,Partition,RDD、节点数、Executor数、core数目的关系
梳理一下Spark中关于并发度涉及的几个概念File,Block,Split,Task,Partition,RDD以及节点数、Executor数、core数目的关系。输入可能以多个文件的形式存储在HDFS上,每个File都包含了很多块,称为Block。 当Spark读取这些文件作为输入时,会根据具体数据格式对应的InputFormat进行解析,一般是将若干个Block合并成一个输入分片,称为Inp转载 2017-11-30 10:25:08 · 2025 阅读 · 0 评论 -
Spark Scala 分组排序取TopN
import org.apache.spark.{SparkContext, SparkConf}原创 2017-10-18 21:23:47 · 2424 阅读 · 0 评论 -
Spark Java 分组排序取TopN
1.输入c1 85c2 77c3 88c1 22c1 66c3 95c3 54c2 91c2 66c1 54c1 65c2 41c4 652.代码实现import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRDD;import org.apache.spark.api.java.原创 2017-10-18 21:33:59 · 1627 阅读 · 0 评论