
Spark
文章平均质量分 85
weixin_42073629
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深度剖析Spark分布式执行原理
让代码分布式运行是所有分布式计算框架需要解决的最基本的问题。Spark是大数据领域中相当火热的计算框架,在大数据分析领域有一统江湖的趋势,网上对于Spark源码分析的文章有很多,但是介绍Spark如何处理代码分布式执行问题的资料少之又少,这也是我撰写文本的目的。Spark运行在JVM之上,任务的执行依赖序列化及类加载机制,因此本文会重点围绕这两个主题介绍Spark对代码分布式执行的处理。本文假设读者对Spark、Java、Scala有一定的了解,代码示例基于Scala,Spark源码基于2.1.0版原创 2021-07-12 01:00:35 · 406 阅读 · 1 评论 -
图文解析Spark2.0核心技术
导语Spark2.0于2016-07-27正式发布,伴随着更简单、更快速、更智慧的新特性,spark 已经逐步替代 hadoop 在大数据中的地位,成为大数据处理的主流标准。本文主要以代码和绘图的方式结合,对运行架构、RDD 的实现、spark 作业原理、Sort-Based Shuffle 的存储原理、 Standalone 模式 HA 机制进行解析。1、运行架构Spark支持多种运行模式。单机部署下,既可以用本地(Local)模式运行,也可以使用伪分布式模式来运行;当以分布式集群部署的时候,原创 2021-07-12 01:01:00 · 451 阅读 · 1 评论 -
基于Kafka+Spark Streaming+HBase实时点击流案例
背景Kafka实时记录从数据采集工具Flume或业务系统实时接口收集数据,并作为消息缓冲组件为上游实时计算框架提供可靠数据支撑,Spark 1.3版本后支持两种整合Kafka机制(Receiver-based Approach 和 Direct Approach),具体细节请参考文章最后官方文档链接,数据存储使用HBase实现思路实现Kafka消息生产者模拟器 Spark Streaming采用Direct Approach方式实时获取Kafka中数据 Spark Streaming对数据进原创 2021-07-12 01:00:49 · 265 阅读 · 0 评论 -
基于Spark Streaming + Canal + Kafka对Mysql增量数据实时进行监测分析
Spark Streaming可以用于实时流项目的开发,实时流项目的数据源除了可以来源于日志、文件、网络端口等,常常也有这种需求,那就是实时分析处理MySQL中的增量数据。面对这种需求当然我们可以通过JDBC的方式定时查询Mysql,然后再对查询到的数据进行处理也能得到预期的结果,但是Mysql往往还有其他业务也在使用,这些业务往往比较重要,通过JDBC方式频繁查询会对Mysql造成大量无形的压力,甚至可能会影响正常业务的使用,在基本不影响其他Mysql正常使用的情况下完成对增量数据的处理,那就需要 Can原创 2021-07-11 15:30:16 · 326 阅读 · 0 评论 -
实时流计算Spark Streaming原理介绍
1、Spark Streaming简介1.1概述Spark Streaming是Spark核心API的一个扩展,可以实现高吞吐量的、具备容错机制的实时流数据的处理。支持从多种数据源获取数据,包括Kafka、Flume、Twitter、ZeroMQ、Kinesis以及TCP sockets,从数据源获取数据之后,可以使用诸如map、reduce、join和window等高级函数进行复杂算法的处理。最后还可以将处理结果存储到文件系统,数据库和实时仪表盘。在“One Stack rule them ...原创 2021-07-11 14:33:44 · 807 阅读 · 1 评论 -
Spark的RDD原理以及2.0特性的介绍
王联辉,曾在腾讯,Intel 等公司从事大数据相关的工作。2013 年 - 2016 年先后负责腾讯 Yarn 集群和 Spark 平台的运营与研发。曾负责 Intel Hadoop 发行版的 Hive 及 HBase 版本研发。参与过百度用户行为数据仓库的建设和开发,以及淘宝数据魔方和淘宝指数的数据开发工作。给 Spark 社区贡献了 25+ 个 patch,接受的重要特性有 python on yarn-cluster,yarn-cluster 支持动态资源扩缩容以及 RDD Core 中 memory原创 2021-07-11 14:29:30 · 220 阅读 · 1 评论 -
Spark SQL与Hive on Spark的比较
简要介绍了SparkSQL与HiveonSpark的区别与联系一、关于Spark简介在Hadoop的整个生态系统中,Spark和MapReduce在同一个层级,即主要解决分布式计算框架的问题。架构Spark的架构如下图所示,主要包含四大组件:Driver、Master、Worker和Executor。Spark特点Spark可以部署在YARN上 Spark原生支持对HDFS文件系统的访问 使用Scala语言编写部署模型单机模型:主要用来开发测试。特点:Drive..原创 2021-07-11 14:05:46 · 919 阅读 · 0 评论 -
Spark和Hadoop作业之间的区别
Spark目前被越来越多的企业使用,和Hadoop一样,Spark也是以作业的形式向集群提交任务,那么在内部实现Spark和Hadoop作业模型都一样吗?答案是不对的。 熟悉Hadoop的人应该都知道,用户先编写好一个程序,我们称为Mapreduce程序,一个Mapreduce程序就是一个Job,而一个Job里面可以有一个或多个Task,Task又可以区分为Map Task和Reduce Task,如下图所示:而在Spark中,也有Job概念,但是这里的Job和Mapreduce中的Job不一样原创 2021-07-11 13:52:16 · 148 阅读 · 0 评论 -
Spark2.x学习笔记:Spark SQL程序设计
1、RDD的局限性RDD仅表示数据集,RDD没有元数据,也就是说没有字段语义定义。 RDD需要用户自己优化程序,对程序员要求较高。 从不同数据源读取数据相对困难。 合并多个数据源中的数据也较困难。2 DataFrame和Dataset(1)DataFrame由于RDD的局限性,Spark产生了DataFrame。DataFrame=RDD+Schema其中Schema是就是元数据,是语义描述信息。在Spark1.3之前,DataFrame被称为SchemaRDD。以行为单位构成...原创 2021-07-11 13:45:42 · 317 阅读 · 1 评论 -
Spark2.x学习笔记:Spark SQL的SQL
Spark SQL所支持的SQL语法select [distinct] [column names]|[wildcard]from tableName[join clause tableName on join condition][where condition][group by column name][having conditions][order by column names [asc|desc]]如果只用join进行查询,则支持的语法为:select statem原创 2021-07-11 13:29:48 · 383 阅读 · 1 评论 -
Spark2.x学习笔记:Spark SQL快速入门
本地表(1)准备数据[root@node1 ~]# mkdir /tmp/data[root@node1 ~]# cat data/ml-1m/users.dat |tr -s "::" "," >> /tmp/data/users.dat[root@node1 ~]# tail -5 /tmp/data/users.dat 6036,F,25,15,326036037,F,45,1,760066038,F,56,1,147066039,F,45,0,010606040,原创 2021-07-11 13:26:47 · 499 阅读 · 0 评论 -
Spark提交应用程序之Spark-Submit分析
1.提交应用程序在提交应用程序的时候,用到 spark-submit 脚本。我们来看下这个脚本:if [ -z "${SPARK_HOME}" ]; then export SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)"fi # disable randomized hash for string in Python 3.3+export PYTHONHASHSEED=0 exec "${SPARK_HOME}"/bin/spark-cla..原创 2021-07-10 00:07:09 · 810 阅读 · 4 评论 -
Spark SQL入门用法与原理分析
Spark SQL是为了让开发人员摆脱自己编写RDD等原生Spark代码而产生的,开发人员只需要写一句SQL语句或者调用API,就能生成(翻译成)对应的SparkJob代码并去执行,开发变得更简洁注意:本文全部基于SparkSQL1.6一.APISpark SQL的API方案:3种SQLthe DataFrames APIthe Datasets API.但会使用同一个执行引擎the same execution engine is used(一)数据转为Datafra.原创 2021-07-09 23:25:27 · 479 阅读 · 0 评论 -
Spark SQL的整体实现逻辑
1、sql语句的模块解析 当我们写一个查询语句时,一般包含三个部分,select部分,from数据源部分,where限制条件部分,这三部分的内容在sql中有专门的名称:当我们写sql时,如上图所示,在进行逻辑解析时会把sql分成三个部分,project,DataSource,Filter模块,当生成执行部分时又把他们称为:Result模块、DataSource模块和Opertion模块。那么在关系数据库中,当我们写完一个查询语句进行执行时,发生的过程如下图所示:整个执行流程是..原创 2021-07-09 23:13:55 · 434 阅读 · 3 评论 -
彻底搞懂spark的shuffle过程(shuffle write)
什么时候需要 shuffle writer假如我们有个 spark job 依赖关系如下我们抽象出来其中的rdd和依赖关系:E <-------n------, C <--n---D---n-----F--s---, A <-------s------ B <--n----`-- G对应的划分后的RDD结构为:最终我们得到了整个执行过程:中间就涉及到sh...原创 2021-07-09 23:10:07 · 685 阅读 · 6 评论 -
Spark之Task原理分析
在Spark中,一个应用程序要想被执行,肯定要经过以下的步骤: 从这个路线得知,最终一个job是依赖于分布在集群不同节点中的task,通过并行或者并发的运行来完成真正的工作。由此可见,一个个的分布式的task才是Spark的真正执行者。下面先来张task运行框架整体的对Spark的task运行有个大概的了解。 task运行之前的工作是Driver启动Executor,接着Executor准备好一切运行环境,并向Driver反向注册,最终Driver向Executor发送L...原创 2021-07-09 21:33:54 · 658 阅读 · 0 评论 -
Spark Shuffle Write阶段磁盘文件分析
这篇文章会详细介绍,Sort Based Shuffle Write 阶段是如何进行落磁盘的流程分析入口处:org.apache.spark.scheduler.ShuffleMapTask.runTaskrunTask对应的代码为:val manager = SparkEnv.get.shuffleManagerwriter = manager.getWriter[Any, Any]( dep.shuffleHandle原创 2021-07-09 21:22:29 · 233 阅读 · 0 评论 -
Spark Sort Based Shuffle内存分析
分布式系统里的Shuffle 阶段往往是非常复杂的,而且分支条件也多,我只能按着我关注的线去描述。肯定会有不少谬误之处,我会根据自己理解的深入,不断更新这篇文章。前言借用和董神的一段对话说下背景:shuffle共有三种,别人讨论的是hash shuffle,这是最原始的实现,曾经有两个版本,第一版是每个map产生r个文件,一共产生mr个文件,由于产生的中间文件太大影响扩展性,社区提出了第二个优化版本,让一个core上map共用文件,减少文件数目,这样共产生corer个文件,好多了,但中间文件数原创 2021-07-09 21:17:25 · 325 阅读 · 0 评论 -
Spark Shuffle(ExternalSorter)
1、Shuffle流程spark的shuffle过程如下图所示,和mapreduce中的类似,但在spark2.0及之后的版本中只存在SortShuffleManager而将原来的HashShuffleManager废弃掉(但是shuffleWriter的子类BypassMergeSortShuffleWriter和已经被废弃掉的HashShuffleWriter类似)。这样,每个mapTask在shuffle的sort阶段只会生成一个结果文件,单个文件按照partitionId分成多个region。r原创 2021-07-09 21:03:18 · 314 阅读 · 0 评论 -
Spark Shuffle(三)Executor是如何fetch shuffle的数据文件
1. 前言在前面讨论了Executor, Driver之间如何汇报Executor生成的Shuffle的数据文件,以及Executor获取到Shuffle的数据文件的分布,那么Executor是如何获取到Shuffle的数据文件进行Action的算子的计算呢?在ResultTask中,Executor通过MapOutPutTracker向Driver获取了ShuffID的Shuffle数据块的结构,整理成以BlockManangerId为Key的结构,这样可以更容易区分究竟是本地的Shuffle还是原创 2021-07-09 02:39:39 · 433 阅读 · 1 评论 -
Spark Shuffle(二)Executor、Driver之间Shuffle结果消息传递、追踪
1. 前言前文中讲了shuffleMapTask如何运行,输出Shuffle结果到Shuffle_shuffleId_mapId_0.data数据文件中,每个executor需要向Driver汇报当前节点的Shuffle结果状态,Driver保存结果信息进行下个Task的调度。2. StatusUpdate消息当Executor运行完Task的时候需要向Driver汇报StatusUpdate的消息override def statusUpdate(taskId: Long, state:原创 2021-07-09 02:29:21 · 609 阅读 · 1 评论 -
Spark Shuffle(一)ShuffleWrite:Executor如何将Shuffle的结果进行归并写到数据文件中去
当Executor进行reduce运算的时候,生成运算结果的临时Shuffle数据,并保存在磁盘中,被最后的Action算子调用,而这个阶段就是在ShuffleMapTask里执行的。前面博客中也提到了,用什么ShuffleWrite是由ShuffleHandler来决定的,在这篇博客里主要介绍最常见的SortShuffleWrite的核心算法ExternalSorter.2. 结构AppendOnlyMap在前面博客中介绍了SortShuffleWriter调用ExternalSorter.i原创 2021-07-09 02:21:39 · 406 阅读 · 1 评论 -
Spark Core(四)用LogQuery的例子来说明Executor是如何运算RDD的算子
1. 究竟是怎么运行的?很多的博客里大量的讲了什么是RDD, Dependency, Shuffle.......但是究竟那些Executor是怎么运行你提交的代码段的?下面是一个日志分析的例子,来自Spark的exampledef main(args: Array[String]) { val sparkConf = new SparkConf().setAppName("Log Query") val sc = new SparkContext(sparkConf)原创 2021-07-06 00:51:29 · 125 阅读 · 0 评论 -
Spark Core(三)Executor上是如何launch task
1. 启动任务在前面一篇博客中(Driver 启动、分配、调度Task)介绍了Driver是如何调动、启动任务的,Driver向Executor发送了LaunchTask的消息,Executor接收到了LaunchTask的消息后,进行了任务的启动,在CoarseGrainedExecutorBackend.scalacase LaunchTask(data) => if (executor == null) { exitExecutor(1, "Received Lau原创 2021-07-06 00:42:56 · 279 阅读 · 0 评论 -
Spark Core(二)Driver上的Task的生成、分配、调度
1. 什么是Task?在前面的章节里描述过几个角色,Driver(Client),Master,Worker(Executor),Driver会提交Application到Master进行Worker上的Executor上的调度,显然这些都不是Task.Spark上的几个关系可以这样理解:Application: Application是Driver在构建SparkContent的上下文的时候创建的,就像申报员,现在要构建一个能完成任务的集群,需要申报的是这次需要多少个Executor(可以简单原创 2021-07-06 00:36:32 · 340 阅读 · 0 评论 -
Spark Core (一) RDD的Transformation和Action以及Dependency
1. Spark的RDDRDD(Resilient Distributed Datasets),弹性分布式数据集,是对分布式数据集的一种抽象。RDD所具备5个主要特性:一组分区列表 计算每一个数据分片的函数 RDD上的一组依赖 对于Key Value 对的RDD,会有一个Partitioner, 这是数据的分区器,控制数据分区策略和数量 一组Preferred Location信息(如HDFS 上的数据块地址)上图是一个简单的CoGroupedRDD满足了RDD 5个特性2原创 2021-07-06 00:27:37 · 159 阅读 · 0 评论 -
Spark Storage(二) 集群下的broadcast
Broadcast 简单来说就是将数据从一个节点复制到其他各个节点,常见用于数据复制到节点本地用于计算,在前面一章中讨论过Storage模块中BlockManager,Block既可以保存在内存中,也可以保存在磁盘中,当Executor节点本地没有数据,通过Driver去获取数据Spark的官方描述:A broadcast variable. Broadcast variables allow the programmer to keep a read-only variable * ca原创 2021-07-06 00:18:29 · 172 阅读 · 0 评论 -
Spark Storage(一) 集群下的区块管理
Storage模块在Spark中提及最多的是RDD,而RDD所交互的数据是通过Storage来实现和管理Storage模块整体架构1. 存储层在Spark里,单节点的Storage的管理是通过block来管理的,每个Block的存储可以在内存里或者在磁盘中,在BlockManager里既可以管理内存的存储,同时也管理硬盘的存储,存储的标识是通过块的ID来区分的。2. 集群下的架构2.1 架构在集群下Spark的Block的管理架构使用Master-Slave模式Mas原创 2021-07-05 01:10:15 · 173 阅读 · 0 评论 -
Spark中的Spark Shuffle详解
Shuffle简介Shuffle描述着数据从map task输出到reduce task输入的这段过程。shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。因为在分布式情况下,reduce task需要跨节点去拉取其它节点上的map task结果。这一过程将会产生网络资源消耗和内存,磁盘IO的消耗。通常shuffle分为两部分:Map阶段的数据准备和Reduce阶段的数据拷贝处理。一原创 2021-07-05 01:01:07 · 284 阅读 · 0 评论 -
Spark源码分析之Checkpoint的过程
概述checkpoint 的机制保证了需要访问重复数据的应用 Spark 的DAG执行图可能很庞大,task 中计算链可能会很长,这时如果 task 中途运行出错,那么 task 的整个需要重算非常耗时,因此,有必要将计算代价较大的 RDD checkpoint 一下,当下游 RDD 计算出错时,可以直接从 checkpoint 过的 RDD 那里读取数据继续算。我们先来看一个例子,checkpoint的使用:import org.apache.spark.SparkContextimpor原创 2021-07-05 00:54:22 · 228 阅读 · 0 评论 -
Checkpoint的运行原理和源码实现
引言Checkpoint 到底是什么和需要用 Checkpoint 解决什么问题:Spark 在生产环境下经常会面临 Transformation 的 RDD 非常多(例如一个Job 中包含1万个RDD) 或者是具体的 Transformation 产生的RDD 本身计算特别复杂和耗时(例如计算时常超过1个小时) , 可能业务比较复杂,此时我们必需考虑对计算结果的持久化。 Spark 是擅长多步骤迭代,同时擅长基于 Job 的复用。这个时候如果可以对计算的过程进行复用,就可以极大的提升效率。因为.原创 2021-07-05 00:48:19 · 271 阅读 · 0 评论 -
Spark在Windows下的环境搭建
由于Spark是用Scala来写的,所以Spark对Scala肯定是原生态支持的,因此这里以Scala为主来介绍Spark环境的搭建,主要包括四个步骤,分别是:JDK的安装,Scala的安装,Hadoop的下载和配置,Spark的安装。为了突出”From Scratch”的特点(都是标题没选好的缘故),所以下面的步骤稍显有些啰嗦,老司机大可不必阅读,直接跳过就好。 一.JDK的安装与环境变量的设置安装很简单,就不再详述二. Scala的安装 首先从DOWNLOAD PREVIOUS..原创 2021-06-06 11:13:46 · 1047 阅读 · 0 评论 -
图文理解 Spark 3.0 的动态分区裁剪优化
Spark 3.0 为我们带来了许多令人期待的特性。动态分区裁剪(dynamic partition pruning)就是其中之一。本文将通过图文的形式来带大家理解什么是动态分区裁剪。Spark 中的静态分区裁剪在介绍动态分区裁剪之前,有必要对 Spark 中的静态分区裁剪进行介绍。在标准数据库术语中,裁剪意味着优化器将避免读取不包含我们正在查找的数据的文件。例如我们有以下的查询 SQL:Select * from iteblog.Students where subject = 'Engli原创 2021-03-04 19:04:28 · 441 阅读 · 1 评论 -
SparkContext、SparkConf和SparkSession之间的关系
1 SparkConf和SparkContext1.1 启动spark-shell每个Spark应用程序都需要一个Spark环境,这是Spark RDD API的主要入口点。Spark Shell提供了一个名为“sc”的预配置Spark环境和一个名为“spark”的预配置Spark会话。使用spark-shell启动交互式命令的过程如下:进入spark的安装目录,转到bin目录下,启动命令./spark-shell,出现如下图所示的给出上spark和scala的版本号即启动成功。使用S原创 2020-12-08 01:02:25 · 1304 阅读 · 0 评论 -
DataFrame的几种创建方式
1.读取json格式的文件创建DataFramejson文件如下:{"name":"Fanbingbing", "score":100}{"name":"Xuruyun", "score":99}{"name":"Liangyongqi", "score":74}Java代码:package demo.java.cn; import org.apache.spark.SparkConf;import org.apache.spark.SparkContext;import .原创 2020-12-07 23:58:42 · 1133 阅读 · 0 评论 -
DataFrame转化成RDD转DF
简介spark-DataFrame学习记录-[3]以Json字符串构建RDD转DF(1)字符串中$闭包自由变值(2)以Json字符串构建RDD转DFpackage com.dt.spark.main.DataFrameLearn import org.apache.log4j.{Level, Logger}import org.apache.spark.sql.hive.HiveContextimport org.apache.spark.{SparkConf, Spa.转载 2020-12-02 14:11:23 · 168 阅读 · 0 评论 -
DataFrame转化成RDD方式二
简述反射法DataFrame转化为RDD(1)反射推断包含特定类型的RDD的模式 条件:已知模式,即列和列的类型 特点:简单\简洁 备注:case class 不能和SparkContext同一作用域,也即定义再main 或者object外(2)通过一个编程接口来实现 条件:运行前不知道列和列的类型 特点:允许构造一个模式,在RDD上应用,不简洁people.txtMichael, 29Andy, 30Justin, 19john,20He..转载 2020-12-02 14:04:35 · 1615 阅读 · 0 评论 -
DataFrame转化成RDD方式一
DataFrame简介DataFrame:一个命名列方式组织的分布式数据集,类似于关系数据库中的一个表 (1)可以由机构化数据文件得到 (2)hive表 (3)RDD转化department.json文件{"name":"Develoment Dept","depId":"1"}{"name":"Personnel Dept","depId":"2"}{"name":"Testing Dept","depId":"3"}newpeople.json文件{"name":"John.转载 2020-12-02 13:58:38 · 1067 阅读 · 0 评论 -
Spark中job、stage、task的划分+源码执行过程分析
SparkControlProcesses Driver Application entry point that contains the SparkContext instance Master In charge of scheduling and resource orchestration Worker Responsible for node stat...转载 2020-12-02 13:24:52 · 413 阅读 · 0 评论 -
Hive on Spark
简介本文主要记录如何安装配置Hive on Spark,在执行以下步骤之前,请先确保已经安装Hadoop集群,Hive,MySQL,JDK,Scala,具体安装步骤不再赘述。背景Hive默认使用MapReduce作为执行引擎,即Hive on mr。实际上,Hive还可以使用Tez和Spark作为其执行引擎,分别为Hive on Tez和Hive on Spark。由于MapReduce中间计算均需要写入磁盘,而Spark是放在内存中,所以总体来讲Spark比MapReduce快很多。因此,Hi转载 2020-10-29 00:36:11 · 1657 阅读 · 0 评论