Spark
文章平均质量分 87
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点
Lansonli
CSDN大数据领域博客专家,InfoQ写作社区2022年度影响力作者、华为云社区2022年度十佳博主、华为云享专家、阿里云专家博主、腾讯云开发者社区2022年度最佳作者、腾云先锋(TDP)核心成员、51CTO专家博主,全网二十万多粉丝,知名互联网公司大数据高级开发工程师
展开
-
大数据Spark(五十四):扩展阅读 SparkSQL底层如何执行
目录扩展阅读 SparkSQL底层如何执行RDD 和 SparkSQL 运行时的区别Catalyst扩展阅读 SparkSQL底层如何执行RDD 和 SparkSQL 运行时的区别RDD 的运行流程大致运行步骤先将 RDD解析为由 Stage组成的 DAG, 后将 Stage转为 Task直接运行问题任务会按照代码所示运行, 依赖开发者的优化, 开发者的会在很大程度上影响运行效率解决办法创建一个组件, 帮助开发者修改和优化代码, 但这在......原创 2021-05-18 23:24:52 · 3038 阅读 · 60 评论 -
大数据Spark(五十三):Structured Streaming Deduplication
Streaming Deduplication介绍在实时流式应用中,最典型的应用场景:网站UV统计。1:实时统计网站UV,比如每日网站UV;2:统计最近一段时间(比如一个小时)网站UV,可以设置水位Watermark;Structured Streaming可以使用deduplication对有无Watermark的流式数据进行去重操作:1.无 Watermark:对重复记录到达的时间没有限制。查询会保留所有的过去记录作为状态用于去重;2.有 Watermark:对重复记录.原创 2021-04-23 19:52:41 · 927 阅读 · 0 评论 -
大数据Spark(五十二):Structured Streaming 事件时间窗口分析
目录事件时间窗口分析时间概念event-time延迟数据处理延迟数据Watermarking 水位官方案例演示事件时间窗口分析在SparkStreaming中窗口统计分析:Window Operation(设置窗口大小WindowInterval和滑动大小SlideInterval),按照Streaming 流式应用接收数据的时间进行窗口设计的,其实是不符合实际应用场景的。例如,在物联网数据平台中,原创 2021-04-23 08:30:22 · 2090 阅读 · 0 评论 -
大数据Spark(五十一):Structured Streaming 物联网设备数据分析
在物联网时代,大量的感知器每天都在收集并产生着涉及各个领域的数据。物联网提供源源不断的数据流,使实时数据分析成为分析数据的理想工具。模拟一个智能物联网系统的数据统计分析,产生设备数据发送到Kafka,结构化流Structured Streaming实时消费统计。原创 2021-04-23 08:14:21 · 965 阅读 · 0 评论 -
大数据Spark(五十):Structured Streaming 案例一实时数据ETL架构
在实际实时流式项目中,无论使用Storm、SparkStreaming、Flink及Structured Streaming处理流式数据时,往往先从Kafka 消费原始的流式数据,经过ETL后将其存储到Kafka Topic中,以便其他业务相关应用消费数据,实时处理分析,技术架构流程图如下所示:接下来模拟产生运营商基站数据,实时发送到Kafka 中,使用StructuredStreaming消费,经过ETL(获取通话状态为success数据)后,写入Kafka中,便于其他实时应用消费处理分析。原创 2021-04-23 07:37:36 · 1072 阅读 · 0 评论 -
大数据Spark(四十九):Structured Streaming 整合 Kafka
Structured Streaming很好的集成Kafka,可以从Kafka拉取消息,然后就可以把流数据看做一个DataFrame, 一张无限增长的大表,在这个大表上做查询,Structured Streaming保证了端到端的 exactly-once,用户只需要关心业务即可,不用费心去关心底层是怎么做的StructuredStreaming既可以从Kafka读取数据,又可以向Kafka 写入数据。Kafka 可以被看成一个无限的流,里面的流数据是短暂存在的,如果不消费,消息就过期滚动没了。原创 2021-04-23 01:02:38 · 1287 阅读 · 1 评论 -
大数据Spark(四十八):Structured Streaming 输出终端/位置
目录输出终端/位置文件接收器Memory SinkForeach和ForeachBatch SinkForeachForeachBatch代码演示输出终端/位置Structured Streaming 非常显式地提出了输入(Source)、执行(StreamExecution)、输出(Sink)的3个组件,并且在每个组件显式地做到fault-tolerant(容错),由此得到整个streaming程序的 end-to-end ex原创 2021-04-23 00:48:53 · 1045 阅读 · 0 评论 -
大数据Spark(四十七):Structured Streaming Sink 输出
目录Sink 输出输出模式触发间隔-了解查询名称检查点位置Sink 输出在StructuredStreaming中定义好Result DataFrame/Dataset后,调用writeStream()返回DataStreamWriter对象,设置查询Query输出相关属性,启动流式应用运行,相关属性如下:文档:http://spark.apache.org/docs/2.4.5/structured-st.原创 2021-04-23 00:40:08 · 965 阅读 · 0 评论 -
大数据Spark(四十六):Structured Streaming Operations 操作
获得到Source之后的基本数据处理方式和之前学习的DataFrame、DataSet一致,不再赘述。原创 2021-04-23 00:22:58 · 769 阅读 · 0 评论 -
大数据Spark(四十五):Structured Streaming Sources 输入源
Sources 输入源从Spark 2.0至Spark 2.4版本,目前支持数据源有4种,其中Kafka 数据源使用作为广泛,其他数据源主要用于开发测试程序。文档:http://spark.apache.org/docs/2.4.5/structured-streaming-programming-guide.html#input-sources可以认为Structured Streaming = SparkStreaming + SparkSQL,对流式数......原创 2021-04-23 00:18:21 · 1092 阅读 · 0 评论 -
大数据Spark(四十四):Structured Streaming概述
Apache Spark在2016年的时候启动了Structured Streaming项目,一个基于Spark SQL的全新流计算引擎Structured Streaming,让用户像编写批处理程序一样简单地编写高性能的流处理程序。Structured Streaming并不是对Spark Streaming的简单改进,而是吸取了在开发Spark SQL和Spark Streaming过程中的经验教训,以及Spark社区和Databricks众多客户的反馈,重新开发的全新流式引擎,致力于为批.....原创 2021-04-22 20:59:28 · 1574 阅读 · 0 评论 -
大数据Spark(四十三):SparkStreaming整合Kafka 0.10 开发使用
直接到Kafka Topic中依据偏移量范围获取数据,进行处理分析;每批次中RDD的分区与Topic分区一对一关系;获取Topic中数据的同时,还可以获取偏移量和元数据信息;最大消费数据量:10000 * 3 * 5 = 150000 条。原创 2021-04-22 00:35:22 · 941 阅读 · 0 评论 -
大数据Spark(四十二):SparkStreaming的Kafka快速回顾与整合说明
在实际项目中,无论使用Storm还是SparkStreaming与Flink,主要从Kafka实时消费数据进行处理分析,流式数据实时处理技术架构大致如下:技术栈: Flume/SDK/Kafka Producer API -> KafKa —> SparkStreaming/Flink/Storm(Hadoop YARN) -> Redis -> UI1)、阿里工具Canal:监控MySQL数据库binlog文件,将数据同步发送到Kafka Topic中.....原创 2021-04-22 00:25:36 · 792 阅读 · 0 评论 -
大数据Spark(四十一):SparkStreaming实战案例六 自定义输出 foreachRDD
SparkStreaming实战案例六 自定义输出-foreachRDD需求对上述案例的结果数据输出到控制台外的其他组件,如MySQL/HDFS注意:foreachRDD函数属于将DStream中结果数据RDD输出的操作,类似transform函数,针对每批次RDD数据操作,但无返回值DStream.print方法源码底层调用的也是foreachRDD:代码实现package cn.itcast.streamingimport java.sql.{Conne..原创 2021-04-22 00:08:16 · 868 阅读 · 0 评论 -
大数据Spark(四十):SparkStreaming实战案例五 TopN-transform
目录SparkStreaming实战案例五 TopN-transform需求注意:代码实现SparkStreaming实战案例五 TopN-transform需求使用窗口计算模拟热搜排行榜:每隔10s计算最近20s的热搜排行榜!注意:DStream没有直接排序的方法!所以应该调用transform方法对DStream底层的RDD进行操作,调用RDD的排序方法!transform(函数),该函数会作用到DStream底层的RDD.原创 2021-04-22 00:04:03 · 1004 阅读 · 0 评论 -
大数据Spark(三十九):SparkStreaming实战案例四 窗口函数
窗口长度10s < 滑动间隔15s:每隔15s计算最近10s的数据--会丢失数据,开发不用。窗口长度10s = 滑动间隔10s:每隔10s计算最近10s的数据--滚动窗口。窗口长度10s > 滑动间隔5s:每隔5s计算最近10s的数据--滑动窗口。使用窗口计算: 每隔5s(滑动间隔)计算最近10s(窗口长度)的数据!窗口长度:要计算多久的数据。滑动间隔:每隔多久计算一次。原创 2021-04-21 23:58:41 · 1302 阅读 · 3 评论 -
大数据Spark(三十八):SparkStreaming实战案例三 状态恢复 扩展
实现SparkStreaming程序停止之后再启动时还能够接着上次的结果进行累加。先发送spark,得到spark,1。再发送spark,得到spark,2。再发送spark,得到spark,3。再停止程序,然后重新启动。原创 2021-04-21 23:53:48 · 2305 阅读 · 0 评论 -
大数据Spark(三十七):SparkStreaming实战案例二 UpdateStateByKey
对从Socket接收的数据做WordCount并要求能够和历史数据进行累加!如:先发了一个spark,得到spark,1然后不管隔多久再发一个spark,得到spark,2也就是说要对数据的历史状态进行维护!注意:可以使用如下API对状态进行维护。原创 2021-04-21 23:51:15 · 921 阅读 · 0 评论 -
大数据Spark(三十六):SparkStreaming实战案例一 WordCount
SparkStreaming实时处理数据性能如何(是否可以实时处理数据)?每批次Batch数据处理总时间TD = 批次调度延迟时间SD + 批次数据处理时间PT。nc是netcat的简称,原本是用来设置路由器,我们可以利用它向某个端口发送数据。每批次数据处理时间TD原创 2021-04-21 23:44:07 · 966 阅读 · 0 评论 -
大数据Spark(三十五):SparkStreaming数据抽象 DStream
DStream内部是由一系列连续的RDD组成的,每个RDD都包含了特定时间间隔内的一批数据,DStream中每批次数据RDD在处理时,各个RDD之间存在依赖关系,DStream直接也有依赖关系,RDD具有容错性,那么DStream也具有容错性。通过WEB UI界面可知,对DStream调用函数操作,底层就是对RDD进行操作,发现很多时候DStream中函数与RDD中函数一样的。通过RDD-to-RDD函数作用于DStream中的各个RDD,可以是任意的操作,从而返回一个新的RDD。原创 2021-04-21 21:54:51 · 1021 阅读 · 0 评论 -
大数据Spark(三十四):Spark Streaming概述
Spark Streaming在很多实时数据处理的场景中,都需要用到流式处理(Stream Process)框架,Spark也包含了两个完整的流式处理框架Spark Streaming和Structured Streaming(Spark 2.0出现),先阐述流式处理框架,之后介绍Spark Streaming框架使用。Spark Streaming概述在传统的数据处理过程中,我们往往先将数据存入数据库中,当需要的时候再去数据库中进行检索查询,将处理的结果返回给请求的用户;另外,..原创 2021-04-21 19:56:39 · 2829 阅读 · 6 评论 -
大数据Spark(三十三):SparkSQL分布式SQL引擎
停止使用:在实际大数据分析项目中,使用SparkSQL时,往往启动一个ThriftServer服务,分配较多资源(Executor数目和内存、CPU),不同的用户启动beeline客户端连接,编写SQL语句分析数据。Spark Thrift Server将Spark Applicaiton当做一个服务运行,提供Beeline客户端和JDBC方式访问,与Hive中HiveServer2服务一样的。回顾一下,如何使用Hive进行数据分析的,提供哪些方式交互分析?原创 2021-04-20 22:29:18 · 1134 阅读 · 0 评论 -
大数据Spark(三十二):SparkSQL的External DataSource
在SparkSQL模块,提供一套完成API接口,用于方便读写外部数据源的的数据(从Spark 1.4版本提供),框架本身内置外部数据源:在Spark 2.4版本中添加支持。数据分析处理中,数据可以分为结构化数据、非结构化数据及半结构化数据。结构化数据源可提供有效的存储和性能。例如,Parquet和ORC等柱状格式使从列的子集中提取值变得更加容易。基于行的存储格式(如Avro)可有效地序列化和存储提供存储优势的数据。然而,这些优点通常以灵活性为代价。如因结构的固定性,格式转变可能相对困难。原创 2021-04-20 21:19:53 · 920 阅读 · 1 评论 -
大数据Spark(三十一):Spark On Hive
也可以将hive-site.xml分发到集群中所有Spark的conf目录,此时任意机器启动应用都可以访问Hive表数据。,所以SparkSQL天然无缝集成Hive,可以加载Hive表数据进行分析。,并放于node1的【原创 2021-04-20 08:34:54 · 1888 阅读 · 1 评论 -
大数据Spark(三十):SparkSQL自定义UDF函数
目录自定义UDF函数第一种:UDF(User-Defined-Function) 函数第二种:UDAF(User-Defined Aggregation Function) 聚合函数第三种:UDTF(User-Defined Table-Generating Functions) 函数SQL方式DSL方式代码演示自定义UDF函数无论Hive还是SparkSQL分析处理数据时,往往需要使用函数,SparkSQL模块本身自带很多实现公共功能的函数,在org.apac.....原创 2021-04-18 02:48:52 · 2004 阅读 · 1 评论 -
大数据Spark(二十九):SparkSQL案例四开窗函数
开窗函数的引入是为了既显示聚集前的数据,又显示聚集后的数据。即在每一行的最后一列添加聚合函数的结果。开窗用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用 GROUP BY 子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。原创 2021-04-22 22:52:56 · 943 阅读 · 1 评论 -
大数据Spark(二十八):SparkSQL案例三电影评分数据分析
原因:在SparkSQL中当Job中产生Shuffle时,默认的分区数(spark.sql.shuffle.partitions )为200,在实际项目中要合理的设置。可以在构建SparkSession实例对象时进行设置。运行上述程序时,查看WEB UI监控页面发现,某个Stage中有200个Task任务,也就是说RDD有200分区Partition。原创 2021-04-17 14:18:05 · 4651 阅读 · 0 评论 -
大数据Spark(二十七):SparkSQL案例一花式查询和案例二WordCount
前面使用RDD封装数据,实现词频统计WordCount功能,从Spark 1.0开始,一直到Spark 2.0,建立在RDD之上的一种新的数据结构DataFrame/Dataset发展而来,更好的实现数据处理分析。),下面以WordCount程序为例编程实现,体验DataFrame使用。原创 2021-04-17 13:32:05 · 1004 阅读 · 0 评论 -
大数据Spark(二十六):SparkSQL数据处理分析
两种方式底层转换为RDD操作,包括性能优化完全一致,在实际项目中语句不通的习惯及业务灵活选择。无论哪种方式,都是相通的,必须灵活使用掌握。上述函数在实际项目中经常使用,尤其数据分析处理的时候,其中要注意,调用函数时,通常指定某个列名称,传递Column对象,通过。,将DataFrame/Dataset注册为临时视图或表,编写SQL语句,类似HiveQL;,调用DataFrame/Dataset API(函数),类似RDD中函数;调用DataFrame/Dataset中API(函数)分析数据,其中函数包含。原创 2021-04-16 22:54:33 · 1948 阅读 · 0 评论 -
大数据Spark(二十五):SparkSQL的RDD、DF、DS相关操作
SparkSession支持从不同的数据源加载数据,并把数据转换成DataFrame,并且支持把DataFrame转换成SQLContext自身中的表,然后使用SQL语句来操作数据。实际项目开发中,往往需要将RDD数据集转换为DataFrame,本质上就是给RDD加上Schema信息,官方提供两种方式:类型推断和自定义Schema。使用SparkSession加载数据源数据,将其封装到DataFrame或Dataset中,直接使用。,构建Schema,应用到RDD数据集,将其转换为DataFrame。原创 2021-04-16 08:39:18 · 1451 阅读 · 0 评论 -
大数据Spark(二十四):SparkSQL数据抽象
基于上述的两点,从Spark 1.6开始出现Dataset,至Spark 2.0中将DataFrame与Dataset合并,其中DataFrame为Dataset特殊类型,类型为Row。Dataset是在Spark1.6中添加的新的接口,是DataFrame API的一个扩展,是Spark最新的数据抽象,结合了RDD和DataFrame的优点。,调用Dataset的方法先会生成逻辑计划,然后被Spark的优化器进行优化,最终生成物理计划,然后提交到集群中运行;原创 2021-04-16 00:43:49 · 1072 阅读 · 0 评论 -
大数据Spark(二十三):SparkSQL 概述
SparkSQL 概述Spark SQL允许开发人员直接处理RDD,同时可以查询在Hive上存储的外部数据。Spark SQL的一个重要特点就是能够统一处理关系表和RDD,使得开发人员可以轻松的使用SQL命令进行外部查询,同时进行更加复杂的数据分析。前世今生SparkSQL模块一直到Spark 2.0版本才算真正稳定,发挥其巨大功能,发展经历如下几个阶段。Shark 框架-淘汰了首先回顾SQL On Hadoopp框架:Hive(可以说Hive时大数据生态系统中......原创 2021-04-15 08:32:29 · 1081 阅读 · 0 评论 -
大数据Spark(二十二):内核原理
Spark的核心是根据RDD来实现的,Spark Scheduler则为Spark核心实现的重要一环,其作用就是任务调度。Spark的任务调度就是。基于Spark的任务调度原理,可以合理规划资源利用,做到尽可能用最少的资源高效地完成任务计算。原创 2021-04-15 00:39:29 · 1048 阅读 · 0 评论 -
大数据Spark(二十一):Spark Core案例-SogouQ日志分析
案例-SogouQ日志分析使用搜狗实验室提供【用户查询日志(SogouQ)】数据,使用Spark框架,将数据封装到RDD中进行业务数据处理分析。数据网址:http://www.sogou.com/labs/resource/q.php1)、数据介绍:搜索引擎查询日志库设计为包括约1个月(2008年6月)Sogou搜索引擎部分网页查询需求及用户点击情况的网页查询日志数据集合。2)、数据格式访问时间\t用户ID\t[查询词]\t该URL在返回结果中的排名\t用户点击的顺序号\t用户点击的UR..原创 2021-04-14 23:51:45 · 1848 阅读 · 3 评论 -
大数据Spark(二十):Spark Core外部数据源引入
外部数据源Spark可以从外部存储系统读取数据,比如RDBMs表中或者HBase表中读写数据,这也是企业中常常使用,如:1)、要分析的数据存储在HBase表中,需要从其中读取数据数据分析日志数据:电商网站的商家操作日志订单数据:保险行业订单数据2)、使用Spark进行离线分析以后,往往将报表结果保存到MySQL表中网站基本分析(pv、uv。。。。。)注意:实际开发中会封装为工具类直接使用https://github.com/teeyog/blog/issues/...原创 2021-04-14 23:06:41 · 1072 阅读 · 1 评论 -
大数据Spark(十九):Spark Core的共享变量
共享变量在默认情况下,当Spark在集群的多个不同节点的多个任务上并行运行一个函数时,它会把函数中涉及到的每个变量,在每个任务上都生成一个副本。但是,有时候需要在多个任务之间共享变量,或者在任务(Task)和任务控制节点(Driver Program)之间共享变量。为了满足这种需求,Spark提供了两种类型的变量:1)、广播变量Broadcast Variables广播变量用来把变量在所有节点的内存之间进行共享,在每个机器上缓存一个只读的变量,而不是为机器上的每个任务都生成一个副本;..原创 2021-04-14 20:43:12 · 808 阅读 · 0 评论 -
大数据Spark(十八):Spark Core的RDD Checkpoint
RDD Checkpoint引入RDD 数据可以持久化,但是持久化/缓存可以把数据放在内存中,虽然是快速的,但是也是最不可靠的;也可以把数据放在磁盘上,也不是完全可靠的!例如磁盘会损坏等。Checkpoint的产生就是为了更加可靠的数据持久化,在Checkpoint的时候一般把数据放在在HDFS上,这就天然的借助了HDFS天生的高容错、高可靠来实现数据最大程度上的安全,实现了RDD的容错和高可用。在Spark Core中对RDD做checkpoint,可以切断做checkpoint R...原创 2021-04-14 20:24:45 · 793 阅读 · 1 评论 -
大数据Spark(十七):Spark Core的RDD持久化
RDD 持久化 引入在实际开发中某些RDD的计算或转换可能会比较耗费时间,如果这些RDD后续还会频繁的被使用到,那么可以将这些RDD进行持久化/缓存,这样下次再使用到的时候就不用再重新计算了,提高了程序运行的效率。API缓存/持久化函数可以将RDD数据直接缓存到内存中,函数声明如下:但是实际项目中,不会直接使用上述的缓存函数,RDD数据量往往很多,内存放不下的。在实际的项目中缓存RDD数据时,往往使用如下函数,依据具体的业务和数据量,指定缓存的级.....原创 2021-04-14 08:30:32 · 833 阅读 · 0 评论 -
大数据Spark(十六):Spark Core的RDD算子练习
RDD算子练习RDD中的函数有很多,不同业务需求使用不同函数进行数据处理分析,下面仅仅展示出比较常用的函数使用,更多函数在实际中使用体会,多加练习理解。map 算子对RDD中的每一个元素进行操作并返回操作的结果。//通过并行化生成rddval rdd1 = sc.parallelize(List(5, 6, 4, 7, 3, 8, 2, 9, 1, 10)) //对rdd1里的每一个元素rdd1.map(_ * 2).collect //collect方法表示收集,......原创 2021-04-13 23:47:59 · 1017 阅读 · 0 评论 -
大数据Spark(十五):Spark Core的RDD常用算子
常用算子RDD中包含很多函数,主要可以分为两类:Transformation转换函数和Action函数。主要常见使用函数如下,一一通过演示范例讲解。基本算子RDD中map、filter、flatMap及foreach等函数为最基本函数,都是都RDD中每个元素进行操作,将元素传递到函数中进行转换。map算子: map(f:T=>U) : RDD[T]=>RDD[U],表示将 RDD 经由某一函数 f 后,转变为另一个RDD。 flatMa......原创 2021-04-13 01:22:41 · 1021 阅读 · 1 评论