![](https://img-blog.csdnimg.cn/20200523182504883.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Spark
Spark大数据,支持批处理、流处理、机器学习和图计算,是全站开发框架
神之凝视
这个作者很懒,什么都没留下…
展开
-
Spark SQL常用配置及性能优化
一.在内存中缓存数据Spark SQL可以通过调用spark.catalog.cacheTable(“tableName”)或使用dataFrame.cache()内存列式格式缓存表。然后,Spark SQL将仅扫描所需的列,并将自动调整压缩以最大程度地减少内存使用和GC压力。可以调用spark.catalog.uncacheTable(“tableName”)从内存中删除表或dataFrame.unCache()取消缓存。可以在SparkSession上使用setConf方法或使用SQL运行SET k原创 2020-10-24 19:52:00 · 2807 阅读 · 0 评论 -
Spark Streaming整合检查点与累加器/广播变量
一.简介无法从Spark Streaming中的检查点恢复累加器和广播变量。如果启用检查点并同时使用“ 累加器”或“广播变量” ,则必须为“累加器”和“广播变量”创建延迟实例化的单例实例, 以便在驱动程序发生故障重新启动后可以重新实例化它们。二.代码实现package org.apache.spark.examples.streamingimport java.io.Fileimport java.nio.charset.Charsetimport com.google.common.io.原创 2020-10-09 17:44:24 · 202 阅读 · 0 评论 -
TF-IDF词频逆文档频率算法
TF-IDF词频逆文档频率(TF-IDF) 是一种特征向量化方法,广泛用于文本挖掘中,以反映术语对语料库中文档的重要性。用t表示术语,用d表示文档,用D表示语料库。TF(t,d) 表示术语频率是术语在文档中出现的次数,而DF(t,D)文档频率是包含术语的文档在语料库中出现的次数。如果我们仅使用术语频率来衡量重要性,那么很容易过分强调那些经常出现但几乎不包含有关文档信息的术语,例如“a”,“the”和“of”。如果术语经常出现在整个语料库中,则表示该术语不包含有关特定文档的特殊信息。逆文档频率度量的是一个术原创 2020-09-17 17:05:36 · 2954 阅读 · 0 评论 -
Spark MLlib之管道
一.ML管道ML管道提供基于DataFrame的统一高级API集,可帮助用户创建和调整实用的机器学习管道。二.管道中的主要概念MLlib对用于机器学习算法的API进行了标准化,从而使将多种算法组合到单个管道或工作流中变得更加容易。DataFrame:此ML API使用DataFrame作为ML数据集,可以保存各种数据类型。例如,一个DataFrame可能有不同的列,用于存储文本,特征向量,真实标签和预测。Transformer:一个Transformer是一种算法,其可以将一个DataFrame原创 2020-09-10 19:20:37 · 422 阅读 · 0 评论 -
GraphX图计算之aggregateMessages算子案例详解
一.简介GraphX中的核心聚合操作为aggregateMessages。该运算符将用户定义的sendMsg函数应用于图形中的每个边三元组,然后使用该mergeMsg函数在其目标顶点处聚合这些消息。class Graph[VD, ED] { def aggregateMessages[Msg: ClassTag]( sendMsg: EdgeContext[VD, ED, Msg] => Unit, mergeMsg: (Msg, Msg) => Msg,原创 2020-09-03 17:39:10 · 792 阅读 · 0 评论 -
基于GraphX实现社交网络分析
一.社交网络分析的主要应用在分析复杂的社会、技术以及信息系统时,我们常把这些系统描述成网络的形式。在这样的关系网络中,节点代表一个成员,而边就代表成员之间的关系。在现实生活中,一个人可能从属于不同的团体,比如其工作的部门、生活的小区、同学圈子等等。如果能把这些不同的圈子自动分析出来,大到舆情监控,小到推荐好友以及扩展新用户、精准广告投放等,这些场景都能通过社交网络分析来提升效果。结合目前日益火爆的“大数据”,这就是应用大数据来解决实际问题的一个很好的例子。所谓圈子,就是把人归属到 不同的群体中。落实到算原创 2020-08-20 15:43:51 · 1353 阅读 · 0 评论 -
Spark GraphX图计算入门
一.什么是图计算图计算,可以简单理解为以图这种数据结构为基础,整合相关算法来实现对应应用的计算模型。社交网络中人与人之间的关系,如果用计算机数据结构表示,最合适的就是图了。其中图的顶点表示社交中的人,边表示人与人之间的关系。所以要做社交网络分析,先要了解图计算,这是整个分析的基础。也正如此,Spark的图计算库叫GraphX。二.图的基本概念图是基础的数据结构,和链表、树不同,它是一种非线性数据结构。其基本结构很简单,如下图:一个图由定点集V和定点间的关系集合E组成,可以用二元组定义为G=(V,E原创 2020-08-17 19:03:24 · 2402 阅读 · 0 评论 -
Spark Streaming之容错&高可用
一.背景Spark的RDD的基本容错语义:RDD是一个不变的,确定性可重新计算的分布式数据集。每个RDD都会记住在容错输入数据集上用于创建它的确定性操作的血缘关系。如果由于工作节点故障而导致RDD的任何分区丢失,则可以使用操作血缘关系从原始的容错数据集中重新计算该分区。假设所有RDD转换都是确定性的,则最终转换后的RDD中的数据将始终相同,而不管Spark集群中的故障如何。Spark在容错文件系统【例如HDFS或S3】中的数据上运行。因此,从容错数据生成的所有RDD也是容错的。但是,Spark原创 2020-07-31 18:14:21 · 228 阅读 · 0 评论 -
Spark Streaming之内存调优
一.内存调优Spark Streaming应用程序所需的集群内存大小在很大程度上取决于所使用的转换类型。例如,如果要对最后10分钟的数据使用窗口操作,则集群应具有足够的内存以将10分钟的数据保存在内存中。或者,如果想使用updateStateByKey操作大量的kv类型数据,则所需的存储空间会很大。相反,如果想执行一个简单的map-filter-store操作,则所需的内存将很少。通常,由于通过接收器接收的数据存储在StorageLevel.MEMORY_AND_DISK_SER_2中,因此无法容纳在内原创 2020-07-27 19:10:28 · 732 阅读 · 0 评论 -
Spark内存管理及调优
一.对象存储概述在调整内存使用中有三个方面需要考虑:对象存储所使用的内存【可能希望在内存中存储整个数据集,以方便使用】、访问这些对象的成本及垃圾回收的开销【对象更新频繁】。默认情况下,Java对象的访问速度很快,但是与其字段内的原始数据相比,它们很容易消耗2-5倍的空间。原因如下:每个不同的Java对象都有一个对象头,大约16个字节,其中包含诸如指向其类的指针之类的信息。对于其中数据很少的对象【例如一个Int字段】,该对象头大小可能大于数据本身。Java String类型相对于原始字符串数据有大约原创 2020-07-24 17:34:34 · 324 阅读 · 0 评论 -
Spark Streaming之性能调优
一.简介要在集群上的Spark Streaming应用程序中获得最佳性能,需要进行一些调整。可以调整以提高应用程序性能的许多参数和配置。从高层次上讲,需要考虑两件事:通过有效地使用群集资源来减少每批数据的处理时间。设置正确的批处理大小,以便可以按接收到的批处理速度处理一批数据【也就是说,数据处理跟上数据摄取的速度】。由于大多数Spark计算的内存性质,Spark程序可能会受到群集中任何资源【CPU,网络带宽或内存】的瓶颈。通常,如果数据适合内存,则瓶颈是网络带宽,但是有时,还需要进行一些调整,例原创 2020-07-23 19:12:11 · 273 阅读 · 0 评论 -
Spark Streaming应用程序【部署、升级、监控】
一.部署应用要部署运行Spark Streaming应用程序,需要具备以下条件。使用集群管理器进行集群部署,这是任何Spark应用程序的一般要求。将应用程序JAR打包 ,必须将流式应用程序编译为JAR。如果spark-submit用于启动应用程序,则无需在JAR中提供Spark和Spark Streaming。但是,如果应用程序使用高级数据源【例如Kafka】,则必须将它们链接到的额外工件及其依赖项打包在用于部署应用程序的JAR中。例如,使用的应用程序KafkaUtils 必须将spark-stre原创 2020-07-22 20:29:29 · 377 阅读 · 0 评论 -
Spark Streaming之检查点
一.缓存/持久化与RDD相似,DStream也允许开发人员将流的数据持久存储在内存中。也就是说,在DStream上使用persist()方法将自动对该DStream的每个RDD持久存储在内存中。如果DStream中的数据将被多次计算(例如,对同一数据进行多次操作),这将很有用。对于基于窗口操作reduceByWindow和reduceByKeyAndWindow以及基于状态操作的updateStateByKey而言,这都是隐含的。因此,由基于窗口操作生成的DStream会自动保存在内存中,而无需开发人员调原创 2020-07-21 17:46:03 · 440 阅读 · 0 评论 -
SparkStreaming中使用DataFrame和SQL操作
一.简介可以轻松地对流数据使用DataFrames和SQL操作。StreamingContext和其使用的SparkContext必须来自同一个SparkSession。以便可以在驱动程序故障时重新启动它。这是通过创建SparkSession的延迟实例化单例实例来完成的。在下面的示例中,修改了前面的单词计数示例,以使用DataFrames和SQL生成单词计数。每个RDD都转换为一个DataFrame,注册为临时表,然后使用SQL查询。二.代码实战package spark2.streamingim原创 2020-07-13 15:50:00 · 759 阅读 · 0 评论 -
SparkStreaming之数据输出
一.简介输出操作允许将DStream的数据推出到外部系统,例如数据库或文件系统。由于输出操作实际上允许外部系统使用转换后的数据,因此它们会触发所有DStream转换的实际执行【类似于RDD的操作】。二.算子翻译:...原创 2020-07-11 18:23:50 · 672 阅读 · 0 评论 -
Spark获取HBase海量数据方式之Scan
一.简介Scan扫描,类似于数据库系统中的游标,底层依赖顺序存储的数据结构。扫描操作的作用跟get()方式非常类似,但由于扫描操作的工作方式类似于迭代器,所以用户无需调用scan()方法创建实例,只需调用HTable的getScanner()方法【或者使用new Scan()】,此方法在返回真正的扫描器scanner实例的同时,用户也可以使用它的迭代来获取数据。如下:ResultScanner getScanner(Scan scan) throws IOExceptionResultScanner原创 2020-07-07 20:13:08 · 1078 阅读 · 1 评论 -
SparkStreaming DStream关联操作【流流关联、流数据集关联】
一.流流关联1.普通流流连接 val lines = ssc.socketTextStream("master",9999) val words = lines.flatMap(_.split(" ")) .map(word => (word,1)) .reduceByKey(_ + _) val result = words.join(words)在此,在每个批处理间隔中,stream1的RDD将与stream2的RDD关联在一起。也可以做l原创 2020-07-04 17:38:20 · 922 阅读 · 0 评论 -
Spark ML基本算法【总结器】
一.简介通过使用Summarizer提供矢量列【向量、矩阵】汇总统计Dataframe。可用的指标是按列的最大值,最小值,平均值,总和,方差,std和非零数,以及总数。二.代码实战【以均值、方差为例】package spark2.mlimport org.apache.log4j.{Level, Logger}import org.apache.spark.ml.linalg.{Vector, Vectors}import org.apache.spark.sql.SparkSessioni原创 2020-07-03 15:03:44 · 3223 阅读 · 0 评论 -
Spark ML常见异常【Vector】
一.常见分析在Spark 机器学习中,Vector向量和Metricx矩阵是最常用的两种数据类型。特别是Vector向量类型,在使用Vector向量类型时,默认是不会导入Spark定义的Vector类型的。默认使用scala.collection.immutable.Vector,此时使用Spark ml算法就会报类型异常。代码:val (meanVal, varianceVal) = df.select(metrics("mean", "variance").summary($"features",原创 2020-07-03 14:20:10 · 827 阅读 · 0 评论 -
Spark ML基本算法【ChiSquareTest卡方检验】
一.简介假设检验是一种强大的统计工具,可用来确定结果是否具有统计学意义,以及该结果是否偶然发生。spark.ml当前支持Pearson的卡方测试独立性。ChiSquareTest针对标签上的每个功能进行Pearson的独立性测试。对于每个要素,(要素,标签)对将转换为列联矩阵,针对该列矩阵计算卡方统计量。所有标签和特征值必须是分类的。二.代码实战package spark2.mlimport org.apache.log4j.{Level, Logger}import org.apache.s原创 2020-07-02 20:38:59 · 1547 阅读 · 0 评论 -
Spark1.x升级Spark2.x常见异常Kafka篇【TopicMetadataRequest】
一.原因分析当Spark从1.x升级到2.x时,如果使用SparkStreaming加载Kafka的数据,即使Kafka版本没有变化【一般会有所升级】,对应的spark-streaming-kafka也必须升级到对应版本,访问方式也会有所变化。此处是从Spark1.6.0升级到Spark2.4.3,Kafka略有升级【从2.1.0升级到2.2.1】,初始使用的是:import org.apache.spark.streaming.kafka.KafkaUtilsval dframe = Kafka原创 2020-07-01 14:18:56 · 391 阅读 · 2 评论 -
Spark报Total size of serialized results of 12189 tasks is bigger than spark.driver.maxResultSize
一.异常信息Total size of serialized results of 12189 tasks is bigger than spark.driver.maxResultSize 1024M.Total size of serialized results of 12082 tasks is bigger than spark.driver.maxResultSize 1024M.Total size of serialized results of 12131 tasks is bigg原创 2020-06-29 17:21:54 · 5395 阅读 · 0 评论 -
Spark ML基本算法【Correlation相关性】
一.简介计算两个系列数据之间的相关性是“统计”中的常见操作。spark.ml 提供了很多系列中的灵活性,计算两两相关性。目前支持的相关方法是Pearson和Spearman的相关。Correlation 使用指定的方法为向量的输入数据集计算相关矩阵。输出将是一个DataFrame,其中包含向量列的相关矩阵。二.代码实战package big.data.analyse.mlimport org.apache.log4j.{Level, Logger}import org.apache.spark原创 2020-06-25 12:01:58 · 2778 阅读 · 0 评论 -
Spark 机器学习库【MLlib】编程指南
一.机器学习库MLlib是Spark的机器学习库【ML】。其目标是使实用的机器学习算法变得可扩展且容易使用。在较高级别,它提供了以下工具:机器学习算法:常见的机器学习算法,例如分类,回归,聚类和协同过滤。特征化:特征提取,变换,降维和选择。管道:用于构建,评估和调整ML管道的工具。持久性:保存和加载算法、模型和管道。实用程序:线性代数,统计信息,数据处理等。二.基于DataFrame的API基于MLlib RDD的API现在处于维护模式。从Spark 2.0开始,软件包中基于RDD的A原创 2020-06-23 21:30:13 · 2040 阅读 · 0 评论 -
Spark2.x常见异常【InvalidPathException】
一.异常详细信息java.nio.file.InvalidPathException: Malformed input or input contains unmappable characters:./Spark2机器学习.jar...二.原因分析及解决方案由于中文名的文件,导致编译失败,解决方法如下:jar包的明细都使用英文或数字,规避使用中文。设置环境变量,指定编码:file.encoding = UTF-8。...原创 2020-06-22 17:26:29 · 479 阅读 · 0 评论 -
Spark Streaming窗口函数
一.简介Spark Streaming还提供了窗口计算,可以在数据的滑动窗口上应用转换。下图说明了此滑动窗口。如该图所示,每当窗口滑动在源DStream,落入窗口内的源RDDS被组合及操作以产生RDDS的窗口DStream。在这种特定情况下,该操作将应用于数据的最后3个时间单位,并以2个时间单位滑动。这表明任何窗口操作都需要指定两个参数。窗口长度 - 窗口的持续时间。滑动间隔 -进行窗口操作的间隔。这两个参数必须是源DStream的批处理间隔的倍数。让我们用一个例子来说明窗口操作。每10秒原创 2020-06-20 11:49:09 · 646 阅读 · 0 评论 -
Sparkstreaming常用算子详解
一.基本算子二.updateStateByKeyupdateStateByKey操作可以保持任意状态,同时不断用新信息更新它。要使用此功能,必须执行两个步骤。定义状态-状态可以是任意数据类型。定义状态更新功能-使用功能指定如何使用输入流中的先前状态和新值来更新状态。在每个批次中,Spark都会对所有现有密钥应用状态更新功能,而不管它们是否在批次中具有新数据。如果更新函数返回,None将删除键值对。让我们用一个例子来说明。假设要保持在文本数据流中看到的每个单词的连续计数。此处,运行计数是状态原创 2020-06-20 11:32:41 · 1740 阅读 · 0 评论 -
Spark2.x之SQL/join关联报CROSS JOIN错误
一.算子join在Spark中,两个dataframe关联分为使用算子join关联和使用视图SQL关联两种。在使用join算子关联时,一般的关联语句是这样的:words_df.join(words_df, words_df("word") === words_df("word")).show()words_df.join(words_df, words_df("word") === words_df("word"), joinType = "left").show()效果:当没有明确的关联字段原创 2020-06-18 20:38:15 · 2145 阅读 · 1 评论 -
Spark1.x升级Spark2.x常见异常HBase篇【hbase.rpc.timeout】
一.场景分析大数据环境频繁使用metastore连接HBase加载数据时,偶尔会抛出hbase.rpc.timeout异常导致任务直接失败的情况。异常信息:Caused by: org.apache.hadoop.hbase.ipc.CallTimeoutException: Call id=2, waitTime=600020, operationTimeout=600000 expired. at org.apache.hadoop.hbase.ipc.Call.checkAndSetTi原创 2020-06-11 19:23:53 · 543 阅读 · 0 评论 -
Spark1.x升级Spark2.x常见异常HBase篇【CallQueueTooBigException】
一.HBase之CallQueueTooBigException查看RpcServer.java【路径:hbase-2.1.0-src\hbase-2.1.0\hbase-server\src\main\java\org\apache\hadoop\hbase\ipc】源代码可知,报CallQueueTooBigException异常的原因是,RPC队列过大!具体到此处的原因是:Spark升级到2.x版本后,性能大幅提升,同时因HBase升级大2.1导致使用Spark往HBase同步数据的效率大幅增加,进原创 2020-06-11 17:42:37 · 691 阅读 · 0 评论 -
Spark Streaming编程指南【快速入门】
一.概述Spark Streaming是核心Spark API的扩展,可实现实时数据流【微批处理】的可伸缩,高吞吐量,容错流处理。数据可以从像kafka,flume,kinesis或TCP套接字许多来源摄入,并且可以使用高级函数例如map,reduce,join和window来表达复杂的算法。最后,可以将处理后的数据推送到文件系统,数据库和实时仪表板。实际上,可以在数据流上应用Spark的机器学习和 图计算算法。在内部,Spark Streaming接收实时输入数据流,并将数据分成批处理,然后由Spa原创 2020-06-08 15:14:37 · 189 阅读 · 0 评论 -
Spark结构化流之join
一.join操作结构化流支持将流数据集/数据帧与静态数据集/数据帧以及另一个流数据集/数据帧连接在一起。流连接的结果是增量生成的,类似于流聚合的结果。请注意,在所有受支持的联接类型中,使用流Dataset/DataFrame进行联接的结果将与使用包含流中相同数据的静态Dataset/DataFrame进行联接的结果完全相同。二.流静态联接自从Spark 2.0引入以来,结构化流已支持流和静态DataFrame / Dataset之间的联接(内部联接和某种类型的外部联接)。如下:val staticD原创 2020-06-06 21:31:05 · 627 阅读 · 0 评论 -
Spark结构化流之水印
一.处理后期数据和加水印现在考虑如果存在事件迟到了应用程序会发生什么。例如,应用程序在12:11接收在12:04(即事件时间)生成的单词。应用程序应使用12:04而不是12:11来更新窗口的旧计数12:00 - 12:10。这在基于窗口的分组中很自然地发生,结构化流可以长时间保持部分聚合的中间状态,以便后期数据可以正确更新旧窗口的聚合,如下所示。但是,要连续几天运行此查询,系统必须限制其累积的中间内存状态量。这意味着系统需要知道何时可以从内存中删除旧状态聚合,因为应用程序将不再接收该聚合的最新数据。为原创 2020-06-06 16:13:26 · 2264 阅读 · 0 评论 -
Spark结构化流之事件时间窗口操作
滑动事件时间窗口上的聚合对于结构化流而言非常简单,并且与分组聚合非常相似。在分组聚合中,用户指定的分组列中为每个唯一值维护聚合值(例如,计数)。在基于窗口的聚合的情况下,行事件时间所属的每个窗口都会维护聚合值。流现在包含行以及生成行的时间。而不是运行字数统计,我们希望在10分钟的窗口内对字数进行计数,每5分钟更新一次。也就是说,在10分钟窗口12:00-12:10、12:05-12:15、12:10-12:20等之间接收的单词中的单词计数。请注意,12:00-12:10表示数据12:00之后但12:10之原创 2020-06-02 19:29:28 · 984 阅读 · 0 评论 -
Spark结构化流编程【Dataset、DataFrame】
一.DataFrame和DataSet的API从Spark 2.0开始,DataFrame和Dataset可以表示静态的有界数据以及流式无界数据。与静态数据集/数据框类似,可以使用公共入口点SparkSession (Scala / Java / Python / R docs)从流源创建流式数据框/数据集,并对它们应用与静态数据框/数据集相同的操作。二.创建DataFrame和DataSet可以通过由返回的DataStreamReader接口(Scala / Java / Python文档)的Spa原创 2020-05-30 18:59:49 · 395 阅读 · 0 评论 -
Spark结构化流编程指南【基础信息】
一.概述结构化流是基于Spark SQL引擎构建的可伸缩且容错的流处理引擎。可以像对静态数据进行批处理计算一样来表示流计算。当流数据继续到达时,Spark SQL引擎将负责逐步递增地运行它并更新最终结果。可以在Scala,Java,Python或R中使用Dataset / DataFrame API来表示流聚合,事件时间窗口,流到批处理联接等。计算在同一优化的Spark SQL引擎上执行。最后,系统通过检查点和预写日志来确保端到端的一次容错保证。简而言之,结构化流提供了快速,可扩展,容错,端到端的精确一次原创 2020-05-25 21:15:37 · 294 阅读 · 0 评论 -
Spark性能调优
一.缓存对于某些工作负载,可以通过在内存中缓存数据或打开某些实验选项来提高性能。Spark SQL可以通过调用spark.catalog.cacheTable(“tableName”)或使用内存列式格式缓存表dataFrame.cache()。然后,Spark SQL将仅扫描所需的列,并将自动调整压缩以最大程度地减少内存使用和GC压力。可以调用spark.catalog.uncacheTable(“tableName”)从内存中删除表。可以在SparkSession上使用setConf设置或SET k原创 2020-05-23 18:23:46 · 484 阅读 · 0 评论 -
Spark内置数据结构之间的差异【RDD、DataFrame、Dataset】
Dataset是数据的分布式集合。Dataset是Spark 1.6中添加的新接口,它具有RDD的优点(强类型输入,使用强大的lambda函数的能力)以及Spark SQL的优化执行引擎的优点。Dataset可以被构造从JVM对象,然后使用功能性的转换(操作map,flatMap,filter等等)。Dataset API在Scala和 Java中可用。Python不支持Dataset API。但是由于Python的动态特性,Dataset API的许多优点已经可用(即,可以自然地通过名称访问行的字段 ro原创 2020-05-23 11:35:08 · 306 阅读 · 0 评论 -
Spark RDD编程指南
一.概述在较高级别上,每个Spark应用程序都包含一个驱动程序,该程序运行用户的main功能并在集群上执行各种并行操作。Spark提供的主要抽象是弹性分布式数据集(RDD),它是跨集群节点划分的元素的集合,可以并行操作。通过从Hadoop文件系统(或任何其他Hadoop支持的文件系统)中的文件或驱动程序中现有的Scala集合开始,并进行转换来创建RDD。用户还可以要求Spark将RDD 保留在内存中,以使其能够在并行操作中有效地重用。最后,RDD自动从节点故障中恢复。Spark中的第二个抽象是可以在并行原创 2020-05-21 14:15:20 · 226 阅读 · 0 评论 -
Spark1.x升级Spark2.x常见异常【map】
一.创建Spark入口相较于Spark1.x,Spark2.x最明显的区别就是程序执行入口的区别了,从SparkContext变为SparkSession。相较于SparkContext,SparkSession对SparkContext进行了二次封装,把原有Spark1.x中的SQLContext和HiveContext进行了合并,默认为SQLContext,当需要访问Hive时,只需开启对Hive的支持即可【.enableHiveSupport(),当然hive的相关配置还是要设置的】,如下:原创 2020-05-19 20:39:54 · 530 阅读 · 0 评论