Spark
文章平均质量分 55
关于spark的理论和实操知识
故明所以
清心、静思、实干、寡言。
展开
-
启动spark-sql时报错Caused by: MetaException(message:Hive Schema version 2.3.0 does not match metastore‘s
报错Hive Schema version 2.3.0 does not match metastore‘s schema version 1.2.0 Metastore is not原创 2023-03-08 18:51:24 · 385 阅读 · 0 评论 -
SparkSQL与Hive交互
SparkSQL与Hive交互原创 2023-03-08 17:54:06 · 1161 阅读 · 0 评论 -
RDD 的五大特性(详细解析)
RDD 的五大特性一、简介版二、详细版一、简介版(1)A list of partitions一组分区:RDD由很多partition构成,有多少partition就对应有多少task(2)A function for computing each split一个函数:对RDD做计算,相当于对RDD的每个split或partition做计算(3)A list of dependencies on other RDDsRDD之间有依赖关系,可溯源(4)Optionally, a P原创 2020-09-28 17:20:16 · 7619 阅读 · 0 评论 -
Cache缓存和checkpoint检查点的区别
(1)Cache缓存只是将数据保存起来,不切断血缘依赖。Checkpoint检查点切断血缘依赖。(2)Cache缓存的数据通常存储在磁盘、内存等地方,可靠性低。Checkpoint的数据通常存储在HDFS等容错、高可用的文件系统,可靠性高。(3)建议对checkpoint()的RDD使用Cache缓存,这样checkpoint的job只需从Cache缓存中读取数据即可,否则需要再从头计算一次RDD。(4)如果使用完了缓存,可以通过unpersist()方法释放缓存。...原创 2020-09-25 19:05:10 · 2229 阅读 · 0 评论 -
Spark性能调优与故障处理之(6)Spark Troubleshooting故障排除
Spark Troubleshooting一、控制 reduce 端缓冲大小以避免 OOM二、JVM GC 导致的shuffle文件拉取失败三、解决各种序列化导致的报错四、解决算子函数返回 NULL 导致的问题五、YARN-CLIENT 模式导致的网卡流量激增问题六、YARN-CLUSTER 模式的JVM 栈内存溢出无法执行问题七、解决SparkSQL导致的 JVM 栈内存溢出八、持久化后的 RDD 数据丢失一、控制 reduce 端缓冲大小以避免 OOM在 Shuffle 过程,reduce 端 ta原创 2020-09-17 20:50:40 · 2094 阅读 · 0 评论 -
Spark性能调优与故障处理之(5)Spark 数据倾斜优化
Spark 数据倾斜优化一、聚合原数据二、过滤导致倾斜的 key三、提高shuffle操作中的reduce并行度3.1 reduce 端并行度的设置3.2 reduce 端并行度设置存在的缺陷四、使用随机 key 实现双重聚合五、将reduce join转换为 map join六、sample 采样对倾斜 key单独进行join七、使用随机数以及扩容进行 joinSpark 中的数据倾斜问题主要指 shuffle 过程中出现的数据倾斜问题,是由于不同的 key 对应的数据量不同导致的不同 task 所处理原创 2020-09-17 20:22:22 · 935 阅读 · 0 评论 -
Spark性能优化与故障处理之(4)Spark JVM 调优
JVM 调优一、降低 cache 操作的内存占比1.1 静态内存管理机制1.2 统一内存管理机制二、调节 Executor 堆外内存三、调节连接等待时长对于 JVM 调优,首先应该明确,full gc/minor gc,都会导致 JVM 的工作线程停止工作,即 stop the world。一、降低 cache 操作的内存占比1.1 静态内存管理机制根据 Spark 静态内存管理机制,堆内存被划分为了两块,Storage 和 Execution。Storage 主要用于缓存 RDD 数据和 broa原创 2020-09-17 19:38:54 · 596 阅读 · 0 评论 -
Spark性能调优与故障处理之(3)Spark Shuffle 调优
Shuffle 调优一、调节 map 端缓冲区大小二、调节 reduce 端拉取数据缓冲区大小三、调节 reduce 端拉取数据重试次数四、调节 reduce 端拉取数据等待间隔五、调节 SortShuffle 排序操作阈值一、调节 map 端缓冲区大小在 Spark 任务运行过程中,如果 shuffle 的 map 端处理的数据量比较大,但是map 端缓冲的大小是固定的,可能会出现 map 端缓冲数据频繁 spill 溢写到磁盘文件中的情况,使得性能非常低下,通过调节 map 端缓冲的大小,可以避免频原创 2020-09-17 19:24:55 · 1110 阅读 · 0 评论 -
Spark性能调优与故障处理之(2)Spark 算子调优
Spark 算子调优一、mapPartitions二、foreachPartition 优化数据库操作三、filter 与 coalesce 的配合使用四、repartition 解决 SparkSQL 低并行度问题五、reduceByKey 本地聚合一、mapPartitions普通的 map 算子对 RDD 中的每一个元素进行操作,而 mapPartitions 算子对 RDD中每一个分区进行操作。如果是普通的 map 算子,假设一个 partition 有 1 万条数据,那么 map 算子中的 f原创 2020-09-17 19:12:42 · 429 阅读 · 0 评论 -
Spark 性能调优与故障处理之(1)Spark常规性能调优
常规性能调优一、最优资源配置二、RDD 优化2.1 RDD 复用2.2 RDD 持久化2.3 RDD 尽可能早的 filter 操作三、广播大变量四、Kryo 序列化五、调节本地化等待时长一、最优资源配置Spark 性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行后面论述的性能调优策略。资源的分配在使用脚本提交 Spark 任务时进行指定,标准的 Spark 任务提交脚本如下所示:/usr/opt/modul原创 2020-09-17 18:16:49 · 357 阅读 · 0 评论 -
Spark内核解析之(8)Spark 核心组件深度剖析
Spark 核心组件深度剖析一、BlockManager 数据存储与管理机制二、Spark 共享变量底层实现2.1 广播变量2.2 累加器一、BlockManager 数据存储与管理机制BlockManager 是整个 Spark 底层负责数据存储与管理的一个组件,Driver 和Executor 的所有数据都由对应的 BlockManager 进行管理。Driver 上有 BlockManagerMaster,负责对各个节点上的 BlockManager 内部管理的数据的元数据进行维护,比如 blo原创 2020-09-16 19:25:14 · 259 阅读 · 0 评论 -
Spark内核解析之(7)Spark 内存管理原理剖析
Spark 内存管理原理剖析一、堆内和堆外内存规划1.1 堆内内存1.2 堆外内存二、内存空间分配2.1 静态内存管理2.2 统一内存管理三、存储内存管理3.1 RDD 的持久化机制3.2 RDD 的缓存过程3.3 淘汰与落盘四、执行内存管理在执行 Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor 两种JVM 进程,前者为主控进程,负责创建 Spark 上下文,提交 Spark 作业(Job),并将作业转化为计算任务(Task),在各个 Executor 进程间协调任务原创 2020-09-16 18:57:39 · 302 阅读 · 0 评论 -
Spark内核解析之(6)Spark Shuffle运行原理剖析
Spark Shuffle运行原理剖析一、Shuffle 的核心要点1.1 ShuffleMapStage 与 FinalStage1.2 Shuffle 中的任务个数1、map 端 task 个数的确定2、reduce 端 task 个数的确定1.3 reduce 端数据的读取二、HashShuffle 解析2.1 未经优化的 HashShuffleManager2.2 优化后的 HashShuffleManager三、SortShuffle 解析3.1 普通运行机制3.2 bypass 运行机制一、S原创 2020-09-16 17:59:47 · 332 阅读 · 0 评论 -
Spark内核解析之(5)Spark 任务调度原理机制深度剖析
Spark 任务调度原理机制剖析一、Spark 任务提交流程二、Spark 任务调度概述三、Spark Stage 级调度四、Spark Task 级调度4.1 调度策略1、FIFO 调度策略2、FAIR 调度策略4.2 本地化调度4.3 失败重试与黑名单机制在工厂环境下,Spark 集群的部署方式一般为YARN-Cluster 模式,之后的内核分析内容中我们默认集群的部署方式为 YARN-Cluster 模式。一、Spark 任务提交流程在上一章中我们讲解了 Spark YARN-Cluster 模原创 2020-09-15 20:37:30 · 321 阅读 · 0 评论 -
Spark内核解析之(4)SparkContext原理分析
在 Spark 中由 SparkContext 负责与集群进行通讯、资源的申请以及任务的分配和监控等。当 Worker 节点中的 Executor 运行完毕 Task 后,Driver 同时负责将SparkContext 关闭。通常也可以使用 SparkContext 来代表驱动程序(Driver)。下图为SparkContext 与集群交互流程图:SparkContext 是用户通往 Spark 集群的唯一入口,可以用来在 Spark 集群中创建 RDD、累加器和广播变量。SparkContext原创 2020-09-15 19:47:08 · 444 阅读 · 0 评论 -
Spark内核解析之(3)Spark 通讯架构原理剖析
一、Spark 通信架构概述Spark2.x 版本使用 Netty 通讯框架作为内部通讯组件。spark 基于 Netty 新的 rpc框架借鉴了 Akka 的中的设计,它是基于 Actor 模型,如下图所示:Spark 通讯框架中各个组件(Client/Master/Worker)可以认为是一个个独立的实体,各个实体之间通过消息来进行通信。具体各个组件之间的关系图如下:Endpoint(Client/Master/Worker)有 1 个 InBox 和 N 个 OutBox(N>=1,N原创 2020-09-15 19:36:12 · 296 阅读 · 0 评论 -
Spark内核解析之(2)Spark 三大部署模式原理剖析
因为之前已经写过相关的文章,这里就不重复了,下面是三种模式的文章链接。一、Local 模式博文链接: https://blog.csdn.net/weixin_43520450/article/details/108579683二、Standalone 模式博文链接: https://blog.csdn.net/weixin_43520450/article/details/108580266三、Yarn 模式博文链接: https://blog.csdn.net/weixin_43520450原创 2020-09-15 19:06:16 · 304 阅读 · 0 评论 -
Spark内核解析之(1)核心原理概述
Spark 内核泛指 Spark 的核心运行机制,包括 Spark 核心组件的运行机制、Spark任务调度机制、Spark 内存管理机制、Spark 核心功能的运行原理等,熟练掌握 Spark内核原理,能够帮助我们更好地完成 Spark 代码设计,并能够帮助我们准确锁定项目运行过程中出现的问题的症结所在。一、Spark 核心组件1.1 DriverSpark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实际代码的执行工作。Driver 在 Spark 作业执行时主要负责:(1原创 2020-09-15 19:00:34 · 1252 阅读 · 0 评论 -
Spark sql 用户自定义函数
自定义函数一、用户自定义 UDF 函数二、用户自定义聚合函数在 Shell 窗口中可以通过 spark.udf 功能用户可以自定义函数。一、用户自定义 UDF 函数scala> val df =spark.read.json("examples/src/main/resources/people.json")df: org.apache.spark.sql.DataFrame = [age: bigint, name: string]scala> df.show()+----+-原创 2020-09-14 19:13:57 · 287 阅读 · 1 评论 -
Spark SQL 编程总结
SparkSQL 编程一、SparkSession 新的起始点二、DataFrame2.1 创建2.2 SQL 风格语法(主要)2.3 DSL 风格语法(次要)2.4 RDD 转换为 DateFrame2.5 DateFrame 转换为 RDD三、DataSet3.1 创建3.2 RDD 转换为 DataSet3.3 DataSet 转换为 RDD四、DataFrame 与 DataSet 的互操作4.1 DataFrame 转 Dataset4.2 Dataset 转 DataFrame五、RDD、Dat原创 2020-09-14 18:56:46 · 1516 阅读 · 0 评论 -
Spark RDD 编程进阶篇(扩展)
RDD 编程进阶一、累加器1.1 系统累加器1.2 自定义累加器二、广播变量(调优策略)一、累加器累加器用来对信息进行聚合,通常在向 Spark 传递函数时,比如使用 map() 函数或者用 filter() 传条件时,可以使用驱动器程序中定义的变量,但是集群中运行的每个任务都会得到这些变量的一份新的副本,更新这些副本的值也不会影响驱动器中的对应变量。如果我们想实现所有分片处理时更新共享变量的功能,那么累加器可以实现我们想要的效果。1.1 系统累加器针对一个输入的日志文件,如果我们想计算文件中所有空原创 2020-09-14 17:11:53 · 313 阅读 · 0 评论 -
Spark RDD算子实例——统计广告点击量 Top3
1、数据准备数据结构:时间戳,省份,城市,用户,广告,中间字段使用空格分隔。数据样式如下:1516609143867 6 7 64 161516609143869 9 4 75 181516609143869 1 7 87 121516609143869 2 8 92 91516609143869 6 7 84 241516609143869 1 8 95 51516609143869 8 1 90 291516609143869 3 3 36 161516609143869 3 3原创 2020-09-14 16:19:09 · 1312 阅读 · 0 评论 -
Spark三大运行模式之Yarn 模式
一、模式概述Spark 客户端直接连接 Yarn,不需要额外构建 Spark 集群。有 yarnclient 和 yarn-cluster 两种模式,主要区别在于:Driver 程序的运行节点。yarn-client:Driver 程序运行在客户端,适用于交互、调试,希望立即看到 app 的输出yarn-cluster:Driver 程序运行在由 RM(ResourceManager)启动的 AP(APPMaster)适用于生产环境。运行模式图:二、安装使用(1)修改 hadoop 配原创 2020-09-14 15:57:46 · 1802 阅读 · 1 评论 -
Spark三大运行模式之Standalone 模式
Standalone 模式一、模式概述二、安装使用三、JobHistoryServer 配置四、HA配置一、模式概述构建一个由 Master+Slave 构成的 Spark 集群,Spark 运行在集群中。二、安装使用(1)进入 spark 安装目录下的 conf 文件夹[atguigu@hadoop102 module]$ cd spark/conf/(2)修改配置文件名称[atguigu@hadoop102 conf]$ mv slaves.template slaves[atguig原创 2020-09-14 15:46:23 · 543 阅读 · 0 评论 -
Spark三大运行模式之Local 模式
Local 模式一、模式概述二、安装使用三、提交流程四、数据流程一、模式概述Local模式就是运行在一台计算机上的模式,通常就是用于在本机上练手和测试。它可以通过以下几种方式设置Master。(1)local:所有计算都运行在一个线程当中,没有任何并行计算,通常我们在本机执行一些测试代码,或者练手,就用这种模式;(2)local[K]:指定使用几个线程来运行计算,比如local[4]就是运行4个Worker线程。通常我们的Cpu有几个Core,就指定几个线程,最大化利用Cpu的计算能力;(3)lo原创 2020-09-14 15:30:09 · 5619 阅读 · 1 评论 -
Spark——数据读取与保存
Spark 的数据读取及数据保存可以从两个维度来作区分:文件格式以及文件系统。文件格式分为:Text 文件、Json 文件、Csv 文件、Sequence 文件以及 Object 文件;文件系统分为:本地文件系统、HDFS、HBASE 以及数据库。一、文件类数据读取与保存1.1 Text 文件(1)数据读取:textFile(String)scala> val hdfsFile = sc.textFile("hdfs://hadoop102:9000/fruit.txt")hdfsF原创 2020-09-12 11:25:28 · 1564 阅读 · 0 评论 -
Spark——键值对 RDD 数据分区
键值对RDD数据分区一、获取 RDD 分区二、Hash 分区三、Ranger 分区四、自定义分区Spark 目前支持 Hash 分区和 Range 分区,用户也可以自定义分区,Hash 分区为当前的默认分区,Spark 中分区器直接决定了 RDD 中分区的个数、RDD 中每条数据经过Shuffle 过程属于哪个分区和 Reduce 的个数。注意:(1)只有 Key-Value 类型的 RDD 才有分区的,非 Key-Value 类型的 RDD 分区的值是 None。(2)每个 RDD的分区 I原创 2020-09-11 20:38:10 · 299 阅读 · 0 评论 -
Spark——RDD 依赖关系
RDD 依赖关系一、 Lineage(血缘)二、 窄依赖三、 宽依赖四、 DAG有向无环图五、 任务划分(面试重点)一、 Lineage(血缘)RDD 只支持粗粒度转换,即在大量记录上执行的单个操作。将创建 RDD 的一系列Lineage(血统)记录下来,以便恢复丢失的分区。RDD 的 Lineage 会记录 RDD 的元数据信息和转换行为,当该 RDD 的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。(1)读取一个 HDFS 文件并将其中内容映射成一个个元组scala&原创 2020-09-11 19:49:57 · 456 阅读 · 0 评论 -
Spark——aggregateByKey 案例
参数:(zeroValue:U,[partitioner: Partitioner]) (seqOp: (U, V) => U,combOp: (U, U) => U)1、作用在 kv 对的 RDD 中,,按 key 将 value 进行分组合并,合并时,将每个 value 和初始值作为 seq 函数的参数,进行计算,返回的结果作为一个新的 kv 对,然后再将结果按照key 进行合并,最后将每个分组的 value 传递给 combine 函数进行计算(先将前两个 value进行计算,将返回原创 2020-09-11 17:11:10 · 319 阅读 · 0 评论 -
Spark中MapPartition和Map的区别
1、map():每次处理一条数据2、mapPartition():每次处理一个分区的数据,这个分区的数据处理完后,原 RDD 中分区的数据才能释放,可能导致 OOM。开发指导:当内存空间较大的时候建议使用 mapPartition(),以提高处理效率。...原创 2020-09-11 16:36:04 · 469 阅读 · 1 评论 -
Spark RDD算子实战总结(超详细哦,绝对的干货!!!)
Spark RDD算子一、Spark算子概述二、Transformation算子下面来具体说明:三、Actions算子下面来具体说明:四、宽依赖和窄依赖一、Spark算子概述RDD:弹性分布式数据集,是一种特殊集合、支持多种来源、有容错机制、可以被缓存、支持并行操作,一个RDD代表多个分区里的数据集。RDD有两种操作算子:Transformation(转换):Transformation属于延迟计算,当一个RDD转换成另一个RDD时并没有立即进行转换,仅仅是记住了数据集的逻辑操作Action原创 2020-09-10 19:37:56 · 4197 阅读 · 0 评论 -
Spark Streaming 数据清理机制
一、DStream 和 RDD我们知道Spark Streaming 计算还是基于Spark Core的,Spark Core 的核心又是RDD。所以Spark Streaming 肯定也要和RDD扯上关系。然而Spark Streaming 并没有直接让用户使用RDD而是自己抽象了一套DStream的概念。 DStream 和 RDD 是包含的关系,你可以理解为Java里的装饰模式,也就是DStream 是对RDD的增强,但是行为表现和RDD是基本上差不多的。都具备几个条件:(1)具有类似的tr原创 2020-06-04 22:23:26 · 813 阅读 · 0 评论 -
Spark 性能调优
Spark 性能优化概览:由于Spark 的计算本质是分布式计算。Spark程序的性能可能因为集群中的任何因素出现瓶颈:CPU,网络带宽、内存。如果内存比较紧张,不足以放下所有数据,需要对内存的使用进行性能优化。比如说:使用一些手段来减少内存消耗。park的性能优化,其实主要就是在对于内存的使用进行调优。Spark 性能优化的主要手段:1、使用高性能的序列化类库2、优化数据结构3、RDD持久化、checkpoint4、使用序列化的持久化级别:MEMORY_ONLY不序列化,MEMORY原创 2020-05-17 10:09:25 · 1268 阅读 · 0 评论 -
Spark 高级数据源
一、Spark Streaming接收Flume数据1.1 基于Flume的Push模式Flume被用于在Flume agents之间推送数据.在这种方式下,Spark Streaming可以很方便的建立一个receiver,起到一个Avro agent的作用.Flume可以将数据推送到改receiver。(1)第一步:Flume的配置文件#bin/flume-ng agent -n a4 -f myagent/option_Push -c conf -Dflume.root.logger=INFO原创 2020-05-16 23:43:56 · 368 阅读 · 0 评论 -
Spark Streaming 进阶篇
Spark Streaming 进阶篇一、StreamingContext对象详解初始化StreamingContext二、离散流(DStreams):Discretized Streams三、DStream中的转换操作(transformation)四、窗口操作五、输入DStreams和接收器六、DStreams的输出操作七、DataFrame和SQL操作八、缓存/持久化九、检查点支持一、StreamingContext对象详解初始化StreamingContext(1)方式一:从SparkConf原创 2020-05-15 23:24:52 · 362 阅读 · 0 评论 -
Spark Streaming 基础篇
一、Spark Streaming 简介Spark Streaming是核心Spark API的扩展,可实现可扩展、高吞吐量、可容错的实时数据流处理。数据可以从诸如Kafka,Flume,Kinesis或TCP套接字等众多来源获取,并且可以使用由高级函数(如map,reduce,join和window)开发的复杂算法进行流数据处理。最后,处理后的数据可以被推送到文件系统,数据库和实时仪表板。而且,您还可以在数据流上应用Spark提供的机器学习和图处理算法。二、Spark Streaming 的特点原创 2020-05-15 11:33:22 · 282 阅读 · 0 评论 -
(scala 版本不匹配的问题)java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V
一、问题之前运行Spark core完全没问题,到Spark SQL就开始报错,看百度上说是scala和spark的版本对不上 。提示错误如下:ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0)java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)VUsing Spark's default log4j profile: org/apache/spark原创 2020-05-13 21:30:19 · 5601 阅读 · 0 评论 -
Spark SQL性能优化
一、在内存中缓存数据性能调优主要是将数据放入内存中操作。通过spark.cacheTable("tableName")或者dataFrame.cache()。使用spark.uncacheTable(“tableName”)来从内存中去除table。举例:(1)从Oracle数据库中读取数据,生成DataFrameval oracleDF = spark.read.format("jdbc").option("url","jdbc:oracle:thin:@192.168.88.101:1521/原创 2020-05-13 13:15:30 · 1263 阅读 · 0 评论 -
在IDEA中开发Spark SQL程序
一、指定Schema格式import org.apache.spark.sql.SparkSessionimport org.apache.spark.sql.types.StructTypeimport org.apache.spark.sql.types.StructFieldimport org.apache.spark.sql.types.IntegerTypeimport org.apache.spark.sql.types.StringTypeimport org.apache.sp原创 2020-05-13 11:06:43 · 421 阅读 · 0 评论 -
Spark SQL使用数据源
一、通用的Load/Save函数1.1 什么是parquet文件?Parquet是列式存储格式的一种文件类型,列式存储有以下的核心:(1)可以跳过不符合条件的数据,只读取需要的数据,降低IO数据量。(2)压缩编码可以降低磁盘存储空间。由于同一列的数据类型是一样的,可以使用更高效的压缩编码(例如Run Length Encoding和Delta Encoding)进一步节约存储空间。(3)只读取需要的列,支持向量运算,能够获取更好的扫描性能。(4)Parquet格式是Spark SQL的默认数据源原创 2020-05-12 15:00:11 · 453 阅读 · 0 评论