![](https://img-blog.csdnimg.cn/20190702061526501.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Spark
文章平均质量分 82
Spark技术实战
wangpei1949
仰望星空,脚踏实地。以梦为马,不负韶华!
展开
-
Spark Structured Streaming状态操作: mapGroupsWithState、flatMapGroupsWithState
总结Structured Streaming中的状态操作: mapGroupsWithState、flatMapGroupsWithState。mapGroupsWithState每次Trigger后,将给定的Function应用于有数据的每个分组,同时维护每组的状态。先看下mapGroupsWithState Operator,如下:// S: 状态类型 U: 返回类型// func:...原创 2020-03-22 15:34:14 · 5534 阅读 · 0 评论 -
Spark Structured Streaming去除重复数据Deduplication
Structured Streaming可以使用Deduplication对有无Watermark的流式数据进行去重操作。无Watermark: 对重复记录到达的时间没有限制。查询会保留所有的过去记录作为状态用于去重。有Watermark: 对重复记录到达的时间有限制。查询会根据水印删除旧的状态数据。本文总结Deduplication的使用及注意事项。测试数据// 测试数据,...原创 2020-03-22 15:32:15 · 2721 阅读 · 0 评论 -
Spark Structured Streaming Output Mode和Trigger
总结Structured Streaming中的输出模式Output Mode和触发器Trigger。输出模式Output ModeStructured Streaming 中有几种类型的输出模式:Append mode: Append模式。默认。只将自上次触发以来添加到结果表中的行输出到接收器。Update mode: Update模式。只将自上次触发以来结果表中更新的行输出到接...原创 2020-03-08 19:44:58 · 2513 阅读 · 0 评论 -
Spark Structured Streaming EventTime下Watermark生成与Window触发
本文旨在弄清楚Spark Structured Streaming EventTime下Watermark生成与Window触发相关问题。窗口起止时间。水印的生成。对迟到数据的处理。窗口销毁的时机。Watermark与Update/Complete输出模式之间的关系。测试数据// 造的测试数据,如下:// eventTime: 北京时间 {"eventTi...原创 2020-03-08 19:42:27 · 1798 阅读 · 2 评论 -
Spark Structured Streaming Source、Sink
本文总结Spark Structured Streaming Source、Sink。SourceFile Source从目录中读取文件作为数据流。支持csv、json、text、parquet、orc格式。以csv文件为例如下:// 启动自动推断Schemaspark.conf.set("spark.sql.streaming.schemaInference",true)// 读取...原创 2020-02-23 20:18:46 · 1696 阅读 · 0 评论 -
Spark Structured Streaming 读写Kafka与Exactly-once语义
本文总结Spark Structured Streaming读写Kafka与Exactly-once语义。问题一: 读Kafka的方式// 读取一个Topicval inputTable=spark .readStream .format("kafka") .option("kafka.bootstrap.servers", "kafka01:9092,k...原创 2020-02-23 20:10:10 · 2821 阅读 · 1 评论 -
Spark Structured Streaming 编程模型
从Spark 2.0.0开始,提供了一个用于实时流处理的新组件-Structured Streaming(结构化流)。本文总结Structured Streaming的编程模型,顺带会总结Structured Streaming与Spark Streaming的区别。Structured Streaming 编程模型首先,Structured Streaming有一个Input Tabl...原创 2020-01-12 18:52:06 · 879 阅读 · 0 评论 -
Spark Streaming平滑停止
对于长期运行在Yarn上的Spark Streaming作业,尤其是要保证不丢不重语义的作业,不能简单使用yarn application -kill <Application ID>命令来停止,应当使用平滑停止策略。思路: 在Driver端,启动一个检测线程,周期性检测HDFS上的标记文件是否存在,存在则平滑停止,不存在则继续运行。伪代码如下: val ssc = new Str...原创 2019-06-02 15:32:26 · 1099 阅读 · 0 评论 -
Spark Streaming动态资源分配
同反压机制一样,Spark Streaming动态资源分配(即DRA,Dynamic Resource Allocation)也可以用来应对流处理中批次流量过载的场景。Spark Streaming动态资源分配,允许为应用动态分配资源。当任务积压时,申请更多资源;当任务空闲时,使用最少资源。在生产中,可将动态资源分配和背压机制一起使用,通过背压机制来细粒度确保系统稳定;通过动态资源分配机制来粗...原创 2019-06-01 22:39:01 · 2887 阅读 · 1 评论 -
Spark Streaming反压机制
反压(Back Pressure)机制主要用来解决流处理系统中,处理速度比摄入速度慢的情况。是控制突增流量中每个批次流量过载的有效手段。反压机制原理Spark Streaming中的反压机制是Spark 1.5.0推出的新特性,可以根据处理效率动态调整摄入速率。当批处理时间(Batch Processing Time)大于批次间隔(Batch Interval,即 BatchDuration...原创 2019-06-01 12:11:53 · 1803 阅读 · 1 评论 -
Spark Streaming空DStream判断
在Spark Streaming中对空DStream的判断,最终都是对空RDD的判断。一般有三种方法:计数(RDD.count),分区(RDD.partitions.length),计数+分区(RDD.isEmpty)。RDD.count适用于所有类型的DStream,但由于是Action算子,会触发SparkContext.runJob方法,从而导致Job的提交和运行,当数据量较大时,代价也...原创 2019-05-14 08:07:44 · 1969 阅读 · 0 评论 -
Spark Streaming状态操作: updateStateByKey、mapWithState、基于window的状态操作
在Spark Streaming中,DStream的转换分为有状态和无状态两种。无状态的操作,即当前批次的处理不依赖于先前批次的数据,如map()、flatMap()、filter()、reduceByKey()、groupByKey()等等;而有状态的操作,即当前批次的处理需要依赖先前批次的数据,这样的话,就需要跨批次维护状态。updateStateByKey //状态更新函数 val ...原创 2019-05-14 06:59:09 · 2464 阅读 · 0 评论 -
Spark Streaming读取Kafka数据的两种方式
Kafka在0.8和0.10之间引入了一种新的消费者API,因此,Spark Streaming与Kafka集成,有两种包可以选择: spark-streaming-kafka-0-8与spark-streaming-kafka-0-10。在使用时应注意以下几点:spark-streaming-kafka-0-8兼容Kafka 0.8.2.1及以后的版本, 从Spark 2.3.0开始,对K...原创 2019-04-20 16:49:40 · 5965 阅读 · 1 评论 -
Spark Streaming保证Exactly-Once语义
在流计算引擎如Apache Storm、Apache Kafka(Kafka Streams)、Apache Spark(Spark Streaming、Spark Structured Streaming)、Apache Flink中,经常提到Exactly-Once语义,那Exactly-Once究竟是啥意思?当流计算引擎声称Exactly-Once时,究竟意味着啥?Spark Streami...原创 2019-04-13 09:03:01 · 4518 阅读 · 3 评论 -
Spark Streaming中的batchDuration、windowDuration、slideDuration
Spark Streaming是一种面向微批(micro-batch)处理的流计算引擎。将来自Kafka/Flume/MQ等的数据,Duration含义batchDuration: 批次时间。多久一个批次。windowDuration: 窗口时间。要统计多长时间内的数据。必须是batchDuration整数倍。slideDuration: 滑动时间。窗口多久滑动一次。必须是batchDu...原创 2019-04-06 23:43:56 · 1800 阅读 · 0 评论 -
Spark 推测执行
Spark 推测执行是一种优化技术。在Spark中,可以通过推测执行,即Speculative Execution,来识别并在其他节点的Executor上重启某些运行缓慢的Task,并行处理同样的数据,谁先完成就用谁的结果,并将另一个未完成的Task Kill掉,从而加快Task处理速度。适用于某些Spark任务中部分Task被hang住或运行缓慢,从而拖慢了整个任务运行速度的场景。注意:...原创 2019-03-31 13:04:37 · 5556 阅读 · 1 评论 -
Spark RDD、DataFrame、Dataset 比较以及相互转换
Spark 支持三种API:RDD、DataFrame 和 Dataset。这里,总结这三种API的差异以及相互之间的转换。RDD、DataFrame、Dataset比较 RDDDataFrameDatasetSpark 1.x✅(从0.6.0开始)✅(从1.3.0开始)✅(从1.6.0开始是试验性的)Spark 2.x✅✅✅Immu...原创 2019-03-23 01:07:34 · 3720 阅读 · 0 评论 -
Spark Streaming Join
多数据源Join思路多数据源Join大致有以下三种思路:数据源端Join,如Android/IOS客户端在上报用户行为数据时就获取并带上用户基础信息。计算引擎上Join,如用Spark Streaming、Flink做Join。结果端Join,如用HBase/ES做Join,Join键做Rowkey/_id,各字段分别写入列簇、列或field。三种思路各有优劣,使用时注意...原创 2018-11-10 07:26:07 · 5069 阅读 · 5 评论 -
在 Spark DataFrame 中使用Time Window
从Spark 2.0.0开始,Spark Sql包内置和Spark Streaming类似的Time Window,方便我们通过时间来理解数据。Spark Sql包中的Window APITumbling Windowwindow(timeColumn: Column, windowDuration: String): ColumnSlide Windowwindow(timeColu...原创 2018-11-08 08:37:46 · 2998 阅读 · 1 评论 -
Spark SQL 与 Spark DataFrame 自定义UDF、UDAF
UDF、UDAF、UDTFUDF:用户自定义函数(User Defined Function)。一行输入一行输出。UDAF: 用户自定义聚合函数(User Defined Aggregate Function)。多行输入一行输出。UDTF: 用户自定义表函数(User Defined Table Generating Function)。一行输入多行输出。如hive/spark中的expl...原创 2018-11-08 07:15:50 · 3808 阅读 · 0 评论 -
Spark RDD 按Key保存到不同文件
基本需求将Keyed RDD[(Key,Value)]按Key保存到不同文件。测试数据数据格式:id,studentId,language,math,english,classId,departmentId1,111,68,69,90,Class1,Economy2,112,73,80,96,Class1,Economy3,113,90,74,75,Class1,Economy4...原创 2018-11-02 08:01:41 · 4776 阅读 · 4 评论 -
Spark DataFrame 多行转多列
在Spark DataFrame中可以用Pivot函数将多行转成多列。样本数据每个用户对每部电影的评分。数据格式:userID 用户ID,movieID 电影ID,rating评分15,399,215,1401,515,1608,415,20,418,100,318,1401,318,399,1Spark DataFrame 多行转多列package com.bigDa...原创 2018-10-24 07:13:15 · 5621 阅读 · 0 评论 -
Spark 共享变量:广播变量、累加器
通常,如下操作rdd.transformation(func),func所需要的外部变量都会以副本的形式从Driver端被发送到每个Executor的每个Task,当Task数目有成百上千个时,这种方式就非常低效;同时每个Task中变量的更新是在本地,也不会被传回Driver端。为此,Spark提供了两种类型的共享变量:广播变量、累加器。广播变量广播变量,Execoutor中的只读变量。在Dr...原创 2018-10-24 06:44:53 · 1261 阅读 · 0 评论 -
Spark Sql 二次分组排序取TopK
基本需求用spark sql求出每个院系每个班每个专业前3名样本数据数据格式:id,studentId,language,math,english,classId,departmentId,即id,学号,语文,数学,外语,班级,院系1,111,68,69,90,1班,经济系2,112,73,80,96,1班,经济系3,113,90,74,75,1班,经济系4,11...原创 2017-03-27 21:06:25 · 4142 阅读 · 1 评论 -
Spark RDD 二次分组排序取TopK
基本需求用spark求出每个院系每个班每个专业前3名。样本数据数据格式:id,studentId,language,math,english,classId,departmentId,即id,学号,语文,数学,外语,班级,院系1,111,68,69,90,1班,经济系2,112,73,80,96,1班,经济系3,113,90,74,75,1班,经济系4,114,8...原创 2017-03-26 12:58:24 · 7007 阅读 · 3 评论 -
RDD之aggregate操作
先看源码def aggregate[U: ClassTag](zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) => U): U = withScope { // Clone the zero value since we will also be serializing it as part of tasks var jobResu原创 2016-08-08 19:50:54 · 1157 阅读 · 0 评论 -
RDD笛卡尔操作Cartesian
import org.apache.spark.rdd.RDDimport org.apache.spark.{SparkContext, SparkConf}object Cartesian{ def main(args: Array[String]) { val conf = new SparkConf().setMaster("local").setAppName("Car原创 2016-08-15 20:25:45 · 3344 阅读 · 0 评论 -
单个RDD去重、两个RDD去重
RDD去重RDD根据某一字段去重,RDD联合去重原创 2016-11-26 20:10:58 · 14082 阅读 · 0 评论