
Spark
K. Bob
多读书,多睡觉;少吃零食,多运动。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spark Streaming反压
在默认情况下,Spark Streaming 通过 receivers (或者是 Direct 方式) 以生产者生产数据的速率接收数据。当 batch processing time > batch interval 的时候,即每个批次数据处理的时间要比 Spark Streaming 批处理间隔时间长;越来越多的数据被接收,但是数据的处理速度没有跟上,导致系统开始出现数据堆积,可能进一步导致 Executor 端出现 OOM 问题而出现失败的情况。 在 Spark 1.5之前,为了解决这个问原创 2020-10-02 20:49:07 · 433 阅读 · 0 评论 -
Spark Streaming从Kafka中读数据的两种方式
Spark Streaming流式处理kafka中的数据,首先是把数据接收过来,然后转换为Spark Streaming中的数据结构DStream。接收数据的方式有两种:利用Receiver接收数据 与 Direct。基于Receiver的方式流程:此方法使用Receiver接收数据。Receiver是使用Kafka高阶API接口实现的。与所有接收器一样,从Kafka通过Receiv...原创 2020-04-23 22:29:34 · 1147 阅读 · 0 评论 -
Spark and so on.
目录SparkSession与SparkContexttask失败重试机制Spark文件切分SparkSession与SparkContextSparkContext 是什么?驱动程序使用SparkContext与集群进行连接和通信,它可以帮助执行Spark任务,并与资源管理器(YARN)进行协调使用SparkContext,可以访问其他上下文,比如SQLContext和HiveContext使用SparkContext,可以为Spark作业设置配置参数SparkSession 是什么?原创 2020-09-17 09:56:08 · 378 阅读 · 0 评论 -
Spark SQL调优
1 spark.sql.codegen 默认值为false,当它设置为true时,Spark SQL会把每条查询的语句在运行时编译为java的二进制代码。可以提高大型查询的性能,但是如果进行小规模的查询的时候反而会变慢,就是说直接用查询反而比将它编译成为java的二进制代码快。所以在优化这个选项的时候要视情况而定。2 spark.sql.inMemoryColumnStorage.compressed 默认值为false 它的作用是自动对内存中的列式存储进行压缩3 spark.sql.inMemoryC原创 2020-09-13 22:03:51 · 1393 阅读 · 0 评论 -
Spark Streaming自适应Kafka分区动态变化
当业务数据增长比较明显,那么Kafka吞吐量,刚开始创建的topic数目和分区数目可能满足不了并发需求,需要增加分区。新增加的分区会有生产者往里面写数据,而Spark Streaming跟Kafka 0.8版本结合的API是满足不了动态发现Kafka新增topic或者分区的需求的。 从Spark Streaming源码出发查看分区检测是在哪做的,对于批处理的Spark Streaming任务来说,分区检测应该在每次job生成获取kafkaRDD,来给kafkaRDD确定分区数并且每个分区赋值offs原创 2020-08-08 16:34:22 · 847 阅读 · 0 评论 -
Sort—Based Shuffle源码分析
目录Shuffle WriteShuffle Read ShuffleMapTask的结果(ShuffleMapStage中FinalRDD的数据)都将写入磁盘,以供后续Stage拉取,即整个Shuffle包括前Stage的Shuffle Write和后Stage的Shuffle Read。Shuffle Write概述:写records到内存缓冲区(一个数组维护的map),每次insert&update都需要检查是否达到溢写条件若需要溢写,将集合中的数据根据partitionId和k原创 2020-08-01 15:37:06 · 361 阅读 · 0 评论 -
Spark内核的SQL解析
目录Spark SQL运行架构Catalyst整体执行流程ParserAnalyzerOptimizerSparkPlannSpark SQL运行架构Spark SQL在分析执行过程中会经历如下的几个步骤:语法解析—>操作绑定—>优化执行策略—>执行1、sqlparser 生成 unresolved logical plan2、analyzer 生成logical plan3、optimizer 生成 optimized logical plan4、planner 生成spar原创 2020-06-10 11:09:20 · 677 阅读 · 0 评论 -
Spark TaskScheduler调度算法与资源分配源码分析
目录TaskScheduler调度算法与调度池TaskScheduler任务提交与资源分配提交Task资源分配TaskScheduler调度算法与调度池 在DAGScheduer对Stage划分,DAGScheduer将Task提交给TaskScheduler,将多个Task打包为TaskSet后,调用taskScheduler的submitTasks方法。TaskScheduler是一个Trait,在Spark中唯一的实现是TaskSchedulerImpl类,TaskSchedulerImpl用原创 2020-06-07 17:31:18 · 733 阅读 · 0 评论 -
Spark Submit任务提交源码分析
脚本分析从Spark-submit这个脚本作为入口,脚本最后调用exec执行 “${SPARK_HOME}”/bin/spark-class 调用class为:org.apache.spark.deploy.SparkSubmit整个Spark Submit过程图:看一下spark-class脚本执行步骤:1.首先校验$ SPARK_HOME/conf,spark相关依赖目录$ SPARK_HOME/jars,hadoop相关依赖目录$HADOOP_HOEM/lib2.将校验所得所有目录地址原创 2020-06-04 22:06:18 · 480 阅读 · 0 评论 -
Spark join的分类
当前SparkSQL支持三种Join算法:shuffle hash join、broadcast hash join以及sort merge join。Hash Join 采用hash join算法,整个过程会经历三步:确定Build Table以及Probe Table:Build Table使用join key构建Hash Table,而Probe Table使用join key进行探测,探测成功就可以join在一起。通常情况下,小表会作为Build Table,大表作为Probe Ta原创 2020-05-30 11:42:08 · 801 阅读 · 0 评论 -
Spark分区器HashPartitioner和RangePartitioner/全局排序
在Spark中分区器直接决定了RDD中分区的个数,RDD中每条数据经过Shuffle过程属于哪个分区以及Reduce的个数。只有Key-Value类型的RDD才有分区的,非Key-Value类型的RDD分区的值是None的。 在Spark中,存在两类分区函数:HashPartitioner和RangePartitioner,它们都是继承自Partitioner,主要提供了每个RDD有几个分...原创 2020-05-07 10:12:15 · 1644 阅读 · 0 评论 -
Spark jdbc(mysql) 读取并发度优化
&emsp在Spark中使用默认提供的jdbc方法时,在数据库数据较大时经常发现任务 hang 住,其实是单线程任务过重导致,这时候需要提高读取的并发度。单partition(无并发)调用函数def jdbc(url: String, table: String, properties: Properties): DataFrame使用:val url = "jdbc:mys...原创 2020-05-06 18:21:53 · 800 阅读 · 0 评论 -
Spark的内存模型
Spark的内存管理机制堆内和堆外内存堆内堆外接口内存空间分配静态内存管理Execution的内存管理Storage的存储管理统一内存管理新的配置项如何应对内存压力MemoryManager存储内存管理RDD的持久化机制RDD缓存的过程淘汰和落盘执行内存管理堆内和堆外内存 作为一个JVM进程,Executor的内存管理建立在JVM的内存管理之上,Spark对JVM的堆内(On-heap)空间...原创 2020-05-06 15:52:55 · 559 阅读 · 0 评论 -
SparkSQL用户自定义函数
UDF函数通过spark.udf.register(“funcName”, func) 来进行注册,通过select funcName(name) from *来直接使用scala> val df = spark.read.json("1.json")df: org.apache.spark.sql.DataFrame = [age: bigint, name: string] s...原创 2020-05-06 13:11:26 · 365 阅读 · 0 评论 -
Scala与java
Scala简介 Scala 语言的特性有许多,例如高阶函数和对象、抽象类型绑定,actor 使得函数在 Scala 中能是一个子类成为可能,Scala 中的设计模式使得面向对象和函数编程无缝结合。Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用。 Spark 是一种可扩展的数据分析平台,它整合了内存计算的基元,因...原创 2020-02-13 15:41:02 · 895 阅读 · 2 评论 -
Scala隐式转换与柯里化
Scala的implicit关键字,包括两个方面的内容:隐式参数和隐式转换。 隐式参数:把一些变量声明为隐式参数,把一些方法的参数声明为可以支持隐式参数的,当调用方法时,如果没有传递该参数,那么可以去使用隐式参数。 隐式转换:首先提供一些类型转换的能力(通过隐式类和隐式方法),然后在调用某些方法时,当某些对象的类型不匹配,可以使用对应的隐式转换去转换对象的类型。implicit使用的...原创 2020-04-09 11:48:44 · 302 阅读 · 0 评论 -
Spark合并输出小文件
在Spark SQL执行etl时候会有最终结果大小只有几百k,但是小文件一个分区有上千的情况。危害:HDFS有最大文件数限制浪费磁盘资源(可能存在空文件)Hive中进行统计,计算的时候,会产生很多个map,影响计算的速度方法一:通过spark的coalesce()方法和repartition()方法val rdd2 = rdd1.coalesce(8, true) (true表示...原创 2020-02-14 17:19:58 · 2545 阅读 · 0 评论 -
Spark与MySQL连接
方法一:各个字段都是提前定好的val prop = new java.util.Propertiesprop.setProperty(“user”, “root”)prop.setProperty(“password”, “123456”)df.write.mode(SaveMode.Append).jdbc(“jdbc:mysql://localhost:3306/test”, “myt...原创 2020-01-03 00:04:28 · 845 阅读 · 0 评论 -
ALS
SparkSQL处理完的数据会分成训练集的数据,一个是测试集的数据(用来验证模型是否是准确的)。离线系统推荐的思路:ALS中有train方法,会返回MatrixFactorizationModel。MatrixFactorizationModel中很多方法:你得到这个模型以后调用recomendProducts或recomendUsers方法,就能够得到想要的推荐结果。想要得到模型需要准备什么...原创 2019-12-31 14:02:35 · 717 阅读 · 0 评论 -
Stage划分源码分析
当发现哪个stage报错或者执行特别慢,需要针对对应代码排查问题和性能调优,因此必须对stage划分算法很清晰,知道spark Application被划分成了几个job,每个job被划分成了几个stage,每个stage包括哪些代码。stage 划分思想: 由submitStage() 和getMissingParentStage() 组成。会从触发Action操作的那个RDD开始往前...原创 2019-12-17 18:05:57 · 694 阅读 · 0 评论 -
Spark任务调度策略/资源分配
Spark任务调度策略FIFO FIFO(先进先出)方式调度Job,每个Job被切分成多个Stage。第一个Job优先获取所有可用资源,接下来第二个Job再获取剩余可用资源。(每个Stage对应一个TaskSetManager)优先级(Priority): 在DAGscheduler创建TaskSet时使用JobId作为优先级的值。FIFO调度算法实现如下所示private[spar...原创 2019-12-17 16:41:11 · 1600 阅读 · 0 评论 -
Spark 的工作流程
Spark工作流程中基本概念Application:应用程序Driver:表示main()函数,创建SparkContext。由SparkContext负责与ClusterManager通信,进行资源的申请,任务的分配和监控等。程序执行完毕后关闭SparkContextExecutor:某个Application运行在Worker节点上的一个进程,该进程负责运行某些Task,并且负责将数据存...原创 2019-12-13 20:47:38 · 2672 阅读 · 1 评论 -
RDD、DataFrame与DataSet|Spark常用算子
DataFrame是spark1.3.0版本提出来的,spark1.6.0版本又引入了DateSet的。DataFrame、DataSet是基于RDD的,三者之间可以通过简单的API调用进行无缝切换。RDD、DataFrame与DataSet区别RDDRDD一般和spark mlib同时使用RDD不支持sparksql操作DataFrame 在Spark中,DataFrame...原创 2019-12-12 23:29:44 · 1043 阅读 · 0 评论 -
Spark数据倾斜问题
数据倾斜现象分析以及解决方案讨论数据倾斜什么是数据倾斜数据倾斜的危害数据倾斜的原因排查数据倾斜数据倾斜的常见解决方法对于源数据聚合源数据过滤导致倾斜的key对于计算过程提高shuffle操作reduce并行度使用随机key实现双重聚合将reduce join转换为map joinsample采样倾斜key单独进行join使用随机数以及扩容表进行join数据倾斜什么是数据倾斜在执行shuffl...原创 2019-12-12 11:30:28 · 707 阅读 · 0 评论 -
SparkStreaming
Spark Streaming 是基于Spark Core将流式计算分解成一系列的小批处理任务来执行。在Spark Streaming里,总体负责任务的动态调度是JobScheduler,而JobScheduler有两个很重要的成员:JobGenerator和 ReceiverTracker。JobGenerator 负责将每个 batch 生成具体的 RDD DAG ,而ReceiverTra...原创 2019-12-11 08:22:21 · 461 阅读 · 0 评论 -
Spark Shuffle及其调优
Spark-ShuffleShuffle概述ShuffleHashShuffle机制HashShuffle概述未优化的HashShuffle机制优化的HashShuffle机制Sort-Based ShuffleSort-Based Shuffle概述Shuffle概述 在MapReduce和Spark中都有Shuffle。对于MapReduce框架,Shuffle是连接Map和Reduce...原创 2019-11-21 00:16:18 · 786 阅读 · 0 评论 -
Spark HA
Spark机器学习推荐Spark的ALS如何评价推荐模型的好坏示例Spark的ALS 通过训练集的数据调用ALS的train方法,返回的是MatrixFactorizationModel,随后调用recomendProducts或recomendUsers方法,就能够得到想要的推荐结果。train方法需要几个参数:第一个参数是ratings是一个RDD[Rating],其中Rati...原创 2019-11-15 21:33:19 · 524 阅读 · 0 评论 -
Spark共享变量(广播变量、累加器)
在阅读spark的源码,发现一个问题,在同一个 .scala文件中可以同时存在名字相同的class和object,这里对Scala中Object和Class进行比较ClassObjectCase ObjectClass对于Class,Scala编译器会帮我们生产一个私有字段和2个公有方法get和set。由于Scala中没有 static 关键字,所以对于一个class来说,所有的方法和成员变量...原创 2019-11-07 13:45:52 · 646 阅读 · 0 评论 -
Spark自定义排序/分区
Spark简单应用自定义排序自定义排序有两种方式:【1】定义一个类,继承Ordering或者Ordered,注意该类还要with Serializable接口,因为比较的时候可能要shuffle通过网络传输,因此必须是可序列化的【2】通过隐式转换的方式 //方式一case class Men(val name:String,val faceValue:Int,val age:Int)e...原创 2019-09-26 13:57:50 · 849 阅读 · 0 评论 -
Spark优化
使用Akka实现RPC通信框架AkkaRPC框架Akka 目前大多数的分布式架构底层通信都是通过RPC实现的,RPC框架很多,例如Hadoop的RPC通信框架,但在某些极端情况下,任务提交的延迟很高,所有Hadoop的RPC显得有些笨重。Spark的RPC是通过Akka类库实现的,Akka用Scala语言开发,基于Actor并发模型实现,Akka具有高可靠、高性能、可扩展等特点,使用Akka...原创 2019-09-15 15:18:54 · 1369 阅读 · 0 评论 -
Spark OOM问题
作为一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala 运行在JVM上,并可以调用现有的Java类库。(持续更新中。。。)Scala特性数据类型、变量、访问修饰符方法与函数CollectionListMap(映射)元组SetScala特性 面向对象特性 Scala是一种纯面向对象的语言,每个值都是对象。 函数式编程 作为一种函数式语言,其函数可以作为...原创 2019-09-10 19:44:50 · 1236 阅读 · 0 评论 -
Spark Streaming调优
推荐系统基础架构推荐系统概念推荐引擎常见的推荐算法协同过滤的实现推荐系统概念 推荐系统在电子商务中得到普遍应用,其实质是销售系统的一部分,为了解决信息过载和用户无明确需求的问题,找到用户感兴趣的物品。其中,解决信息过载的问题,代表性的解决方案是方案是分类目录和搜索引擎,但是分类目录和搜索引擎只能解决用户主动查找信息的需求,即用户知道自己的需求。面对没有明确需求的用户,只能通过分析用户的历史...原创 2019-09-02 22:09:41 · 1150 阅读 · 0 评论 -
SparkStreaming 如何保证消费Kafka的数据不丢失不重复
StructedStreamingStructedStreaming简介编程模型StructedStreaming简介 Structured Streaming是一个可缩放、容错的流逝处理引擎,基于Spark SQL引擎构建。在处理流计算时,可以像处理静态数据批计算一样。Spark SQL引擎负责不断地连续运行它,并随着流数据持续到达而更新最终结果。使用Dataset/DataFrame A...原创 2019-10-30 20:20:38 · 2052 阅读 · 0 评论 -
Spark
SparkSparkSpark RDDSpark 基于MapReduce的计算引擎通常会将中间结果输出到磁盘上,进行存储和容错。出于任务管道承接的考虑,当一些查询翻译到MapReduce任务时,往往会产生多个Stage,而这些串联的Stage依赖底层文件系统(如HDFS)来存储每一个Stage的输出结果。Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop...原创 2019-09-25 19:53:12 · 1131 阅读 · 0 评论