Spark每日半小时
博主用来自学,给Spark相关知识打基础的
DK_ing
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spark每日半小时(38)——Spark Streaming:性能调优
性能调优从集群上的Spark Streaming应用程序中获得最佳性能需要进行一些调整。在高层次上,我们需要考虑两件事:通过有效使用集群资源减少每批数据的处理时间。 设置正确的批量大小,以便可以像接收到的那样快速处理批量数据(即,数据处理与数据提取保持同步)。减少批处理时间可以在Spark中进行许多优化,以最大限度地缩短每个批处理的处理时间。数据接收中的并行度通过网络接收数...翻译 2019-07-08 15:47:20 · 690 阅读 · 0 评论 -
Spark每日半小时(37)——Spark Streaming:(下)
DataFram和SQL操作我们可以轻松地对流数据使用DataFrames和SQL操作。我们必须使用StreamingContext正在使用地SparkContext创建SparkSession。此外,必须如此,才可以在驱动器故障时重新启动。这是通过创建一个延迟实例化地SparkSession单实例来完成的。这在下示例中得以展示。/** Java Bean class for conve...翻译 2019-07-08 14:39:41 · 290 阅读 · 0 评论 -
Spark每日半小时(36)——Spark Streaming:(上)
DStream的转换与RDD类似,转换允许修改来自输入DStream的数据。DStream支持普通Spark RDD上可用的许多转换。一些常见的如下。转换 含义 map(func) 通过将源DStream的每个元素传递给函数func来返回一个新的DStream flatMap(func) 与map类似,但每个输入项可以映射到0个或更多输出项。 filter(f...翻译 2019-07-07 22:02:15 · 296 阅读 · 0 评论 -
Spark每日半小时(35)——Spark Streaming:基本概念
接下来,我们将超越简单的示例,详细介绍Spark Streaming的基础知识。链接与Spark类似,Spark Streaming可以通过Maven Central获得。要编写自己的Spark Streaming程序,必须将以下依赖项添加到Maven项目中。<dependency> <groupId>org.apache.spark</grou...翻译 2019-07-06 14:45:16 · 327 阅读 · 0 评论 -
Spark每日半小时(34)——Spark Streaming:概览、示例
概览Spark Streaming是核心Spark API的扩展,可实现实时数据流的可扩展,高吞吐量,容错流处理。数据可以从许多来源(如Kafka,Flume,Kinesis或TCP Socket)中提取,并且可以使用以高级函数表示的复杂算法进行map处理,例如reduce,join和window。最后,处理后的数据可以推送到文件系统,数据库和实时仪表盘。实际上,我们可以在数据流上应用Spar...翻译 2019-07-06 09:55:15 · 312 阅读 · 0 评论 -
Spark每日半小时(33)——结构化流式编程:流式查询的启动、管理、监控以及Checkpointing
启动流式查询一旦定义了最终结果DataFrame/Dataset,剩下的的就是开始流式计算。为此,我们必须使用Dataset.writeStream()方法返回的的DataStreamWriter。我们必须在此界面中指定以下一项或多项参数。输出接收器的详细信心:数据格式,位置等。 输出模式:指定写入输出接收器的内容。 查询名称:可选,指定查询的唯一名称以进行标识。 触发间隔:可选,如...原创 2019-07-04 16:27:41 · 745 阅读 · 0 评论 -
Spark每日半小时(32)——结构化流式编程:Dataset/DataFrame API3
流式重复数据删除我们可以使用事件中的唯一标识符对数据流中的记录进行重复数据删除。这与使用唯一标识列的静态重复数据删除完全相同。该查询将存储来自先前记录的必要数据量,以便它可以过滤重复记录。与聚合类似,我们可以使用带或不带水印的重复数据删除。使用水印:如果重复记录的到达时间有上线,则可以再事件时间列上定义水印,并使用guid和事件时间列进行重复数据删除。该查询将使用水印从过去的记录中删除旧的...原创 2019-07-04 14:23:35 · 259 阅读 · 0 评论 -
Spark每日半小时(31)——结构化流式编程:Dataset/DataFrame API2:Join
结构化流式传输支持将Dataset/DataFrame与静态Dataset/DataFrame以及另一个流式Dataset/DataFrame连接起来。流连接的结果以递增方式生成,类似于上一节中的流聚合的结果。本节,我们将探讨再上述情况下支持哪种类型的连接(即内部,外部等)。注意,在所有受支持的连接类型中,与流式Dataset/DataFrame的连接结果与使用包含流中相同数据的静态Dataset...原创 2019-07-02 11:06:21 · 413 阅读 · 0 评论 -
Spark每日半小时(30)——结构化流式编程:Dataset/DataFrame API1:基本操作
从Spark 2.0开始,DataFrames和Dataset可以表示静态的,有界的数据,以及流式无界数据。与静态Dataset/DataFrame类似,我们可以使用公共入口点SparkSession从流源创建流式Dataset/DataFrame,并对它们应用与静态Dataset/DataFrame相同的操作。如果我们不熟悉Dataset/DataFrame,可以看之前Spark SQL内容熟悉...原创 2019-06-28 09:26:26 · 494 阅读 · 0 评论 -
Spark每日半小时(29)——结构化流式编程:编程模型
编程模型结构化流中的关键思想是将实时数据流视为连续追加的表。这导致新的流处理模型非常类似于批处理模型。我们将流式计算表示为静态表上的标准处理查询,Spark将其作为无界输入表上的增量查询运行。接下来我们更详细的去了解这个模型。基本概念将输入数据流视为“输入表”。到达流的每个数据项都像一个新行被附加到输入表。对输入的查询将生成“结果表”。每个出发间隔(例如,每1秒),新行将附加到...原创 2019-06-28 09:17:55 · 320 阅读 · 0 评论 -
Spark每日半小时(28)——结构化流式编程:概览、示例
概览结构化流是一种基于Spark SQL引擎的可扩展且容错的流式处理引擎。我们可以像表达静态数据的批处理计算一样表达流式计算。Spark SQL引擎将负责逐步和连续地运行它,并在流数据持续到达时更新最终结果。我们可以使用Scala,Java,Python或R中地Dataset/DataFrame API来表示流聚合,事件事件窗口,流到批处理连接等。计算在同一优化的Spark SQL引擎上执行。...原创 2019-06-27 17:02:29 · 426 阅读 · 0 评论 -
Spark每日半小时(27)——Spark SQL性能调优
对于某些工作负载,可以通过在内存中缓存数据或打开一些实验选项来提高性能。在内存中缓存数据Spark SQL可以通过调用spark.catalog.cacheTable("tableName")或者使用内存中的列式格式来缓存表dataFrame.cache()。然后,Spark SQL将仅扫描所需的列,并自动调整压缩以最小化内存使用和GC压力。我们可以调用spark.catalog.unca...原创 2019-06-27 15:55:39 · 373 阅读 · 0 评论 -
Spark每日半小时(26)——数据源:JDBC到其他数据库、故障排除
Spark SQL还包括一个可以使用JDBC从其他数据库读取数据的数据源。与使用JdbcRDD相比,此功能应该更受欢迎。这是因为结果作为DataFrame返回,可以在Spark SQL中轻松处理,也可以与其他数据源连接。JDBC数据源也更易于使用Java或Python,因为它不需要用户提供ClassTag。(注意,这与Spark SQL JDBC服务器不同,后者允许其他应用程序使用Spark SQ...原创 2019-06-26 12:44:36 · 446 阅读 · 1 评论 -
Spark每日半小时(25)——数据源:ORC文件、JSON数据集、Hive表
ORC文件从Spark2.3开始,Spark支持带有ORC文件的新ORC文件格式的矢量化ORC阅读器。为此,新添加了以下配置。矢量化读取器用于本机ORC表(例如:使用USING ORC子句创建的)当spark.sql.orc.impl被设置为native并且spark.sql.orc.enableVectorizedReader被设置成true。对于Hive ORC serde表(例如,使用该...原创 2019-06-25 22:08:37 · 2699 阅读 · 0 评论 -
Spark每日半小时(24)——数据源:一般文件加载保存方法、Parquet文件
Spark SQL支持通过DataFrame接口对各种数据源进行操作。DataFrame可以使用关系转换进行操作,也可以用于创建临时视图。将DataFrame注册为临时视图允许您对其数据运行SQL查询。通用加载/保存功能在最简单的形式中,默认数据源(parquet除非另有配置spark.sql.sourcess.default)将用于所有操作。 Dataset<R...原创 2019-06-24 11:51:41 · 697 阅读 · 0 评论 -
Spark每日半小时(23)——SparkSQL概览及入门
上面讲了Spark结构化数据的一些点,今天就正式走入Spark官方文档的学习了。发现由于版本问题,老书真的是不能看了。今天正好根据Spark变成指南的SparkSQL开始进入正题,嗯嗯,很合适。概览SparkSQL是用于结构化数据处理的Spark模块。与基本的Spark RDD API不同,Spark SQL提供的接口为Spark提供了有关数据结构和正在执行的计算的更多信息。在内部,Spa...原创 2019-06-22 14:26:14 · 388 阅读 · 0 评论 -
Spark每日半小时(22)——Spark SQL中的结构化数据
SparkSQL是在Spark1.0中新加入Spark的组件,并快速成为了Spark中较受欢迎的操作结构化和半结构化数据的方式。结构化数据指的是有结构信息的数据——也就是所有的数据记录都具有一致字段结构的集合。Spark SQL支持多种结构化数据源作为输入,而且由于Spark SQL知道数据的结构信息,它还可以从这些数据源中只读出所需字段。在各种情况下,我们把一条SQL查询给Spark SQL...原创 2019-06-21 10:50:48 · 457 阅读 · 0 评论 -
Spark每日半小时(21)——文件系统
本地/“常规”文件系统Spark支持从本地文件系统中读取文件,不过它要求文件在集群中所有节点的相同路径下都可以找到。一些像NFS、AFS以及MapR的NFS layer这样的网络文件系统会把文件以常规文件系统的形式暴露给用户。如果你的数据已经在这些系统中,那么你只需要指定输入为一个file://路径;只要这个文件系统挂载在每个节点的同一个路径下,Spark就会自动处理JavaRDD&...原创 2019-06-20 22:00:11 · 582 阅读 · 0 评论 -
Spark每日半小时(20)——文件压缩
在大数据工作中,我们经常需要对数据进行压缩以节省空间和网络传输开销。对于大多数Hadoop输出格式来说,我们可以指定一种压缩编解码器来压缩数据。我们已经提过,Spark原生的输入方式(textFile和sequenceFile)可以自动处理一些类型的压缩。在读取压缩后的数据时,一些压缩编解码器可以推测压缩类型。这些压缩选项只适用于支持压缩的Hadoop格式,也就是那些写出到文件系统的格式。写入...原创 2019-06-19 15:22:25 · 606 阅读 · 0 评论 -
Spark每日半小时(19)——CSV、SequenceFile、对象文件
CSV逗号分隔值(CSV)文件每行都有固定数目的字段,字段间用逗号隔开(在制表符分隔值文件,即TSV文件中用制表符隔开)。记录通常是一行一条,不过也不总是这样,有时也可以跨行。CSV文件和TSV文件有时支持的标准不一致,主要是在处理换行符、转义字符、非ASCII字符、非整数值等方面。CSV原生并不支持嵌套字段,所以需要手动组合和分解特定的字段。与JSON中的字段不一样的是,这里的每条记录都...原创 2019-06-19 13:55:10 · 702 阅读 · 0 评论 -
Spark每日半小时(18)——JSON
JSON是一种使用较广的半结构化数据格式。读取JSON数据的最简单的方式是将数据作为文本文件读取,然后使用JSON解析器来对RDD中的值进行映射操作。类似地,也可以使用我们喜欢的JSON序列化库来将数据转为字符串,然后将其写出去。在Java和Scala中也可以使用一个自定义Hadoop格式来操作JSON数据。读取JSON将数据作为文本文件读取,然后对JSON数据进行解析,这样的方法可以在所...原创 2019-06-18 21:10:31 · 439 阅读 · 0 评论 -
Spark每日半小时(17)——文本文件
在Spark中读写文本文件很容易。当我们将一个文本文件读取为RDD时,输入的每一行都会成为RDD的一个元素。也可以将多个完整的文本文件一次性读取为一个pairRDD,其中键是文件名,值是文件内容。1、读取文本文件只需要使用文件路径作为参数调用SparkContext中的textFile()函数,就可以读取一个文本文件,如下例。如果要控制分区数的话,可以指定minPartitions。...原创 2019-06-16 19:01:04 · 311 阅读 · 0 评论 -
Spark每日半小时(16)——数据读取与保存概览
动机我们已经学了很多在Spark中对已分发的数据执行的操作。到目前为止,所展示的示例都是从本地几个或者普通文件中进行数据读取和保存的。但有时候,数据量可能大到无法放在一台机器中,这时就需要探索别的数据读取和保存的方法了。Spark支持很多种输入输出源。一部分原因是Spark本身是基于Hadoop生态圈而构建,特别是Spark可以通过Hadoop mr所使用的InputFormat和Outp...原创 2019-06-12 22:42:12 · 334 阅读 · 0 评论 -
Spark每日半小时(15)——自定义分区方式
虽然Spark提供的HashPartitioner与RangePartitioner已经能够满足大多数用例,但Spark还是允许你通过提供一个自定义的Partitioner对象来控制RDD的分区方式。这可以让你利用领域知识进一步减少通信开销。举个例子,假设我们要在一个网页的集合上运行前一节中的PageRank算法。在这里,每个页面的ID(RDD中的键)是页面的URL。当我们使用简单的哈希函数进...原创 2019-06-09 23:18:31 · 466 阅读 · 0 评论 -
Spark每日半小时(14)——影响分区方式的操作以及示例
影响分区方式的操作Spark内部知道各操作会如何影响分区方式,并将会对数据进行分区的操作的结果RDD自动设置为对应的分区器。例如,如果你调用join()来连接两个RDD;由于键相同的元素会被哈希到同一台机器上,Spark知道输出结果也是哈希分区的,这样对连接的结果进行诸如reduceByKey()这样的操作时就会明显变快。不过,转化操作的结果并不一定会按已知的分区方式分区,这时输出的RDD...原创 2019-06-06 11:36:25 · 332 阅读 · 0 评论 -
Spark每日半小时(13)——获取分区信息以及分区获益的操作
获取RDD的分区方式在Java中,你可以使用RDD的partitioner()方法来获取RDD的分区方式。它会返回一个Optional<Partitioner>对象,这是用来存放可能存在的对象的容器类。你可以对这个Optional对象调用isPresent()方法来检查其中是否有值,调用get()来获取其中的值。如果存在值的话,这个值会是一个Partitioner对象。这本质上是一...原创 2019-06-06 09:49:37 · 490 阅读 · 0 评论 -
Spark每日半小时(12)——数据分区实现方式
在分布式程序中,通信的代价是很大的,因此控制数据分布以获得最少的网络传输可以极大地提升整体性能。和单节点的程序需要为记录集合选择合适的数据结构一样,Spark程序可以通过控制RDD分区方式来减少通信开销。分区并不是对所有应用都有好处——如果给定RDD只需要被扫描一次,我们完全没有必要对其预先进行分区处理。只有当数据集多次在诸如连接这种基于键的操作中使用时,分区才会有帮助。我们会给出一些小李子来说明...原创 2019-06-06 09:36:37 · 432 阅读 · 0 评论 -
Spark每日半小时(11)——PairRDD的行动操作
和转化操作一样,所有基础RDD支持的传统行动操作也都在pairRDD上可用。PairRDD提供了一些额外的行动操作,可以让我们充分利用数据的键值对特性。这些操作列在下表。PairRDD的行动操作(以键值对集合{(1,2),(3,4),(3,6)}为例) 函数 描述 示例 结果 countByKey() 对每个键对应的元素分别计数 rdd.countByKey...原创 2019-06-05 11:12:04 · 268 阅读 · 0 评论 -
Spark每日半小时(10)——PairRDD的连接、数据排序
连接将有键的数据与另一组有键的数据一起使用是对键值对数据执行的最有用的操作之一。连接数据可能是pairRDD最常用的操作之一。连接方式多种多样:右外连接、左外连接、交叉连接以及内连接。普通的join操作符表示内连接。只有在两个pairRDD中都存在的键才叫输出。当一个输入对应的某个键有多个值时,生成的pairRDD会包括来自两个输入RDD的每一组相对应的记录。有时,我们不希望结果汇总的...原创 2019-06-05 11:04:44 · 441 阅读 · 0 评论 -
Spark每日半小时(9)——PairRDD的数据分组
对于有键的数据,一个常见的用例是将数据根据键进行分组——比如查看一个顾客的所有订单。groupByKey()如果数据已经以预期的方式提取了键,groupByKey()就会使用RDD中的键来对数据进行分组。对于一个由类型K的键和类型V的值组成的RDD,所得到的结果RDD类型回事[K, Iterable[V]]。groupBy()可以用于未成对的数据上,也可以根据除键相同以外的条件进行分组...原创 2019-06-05 10:03:32 · 410 阅读 · 0 评论 -
Spark每日半小时(8)——PairRDD的聚合操作
当数据集以键值对形式组织的时候,聚合具有相同键的元素进行一些统计是很常见的操作。前面讲解过基础RDD上的fold()、combine()、reduce()等行动操作,pairRDD上则有响应的针对键的转化操作。Spark有一组类似的操作,可以组合具有相同键的值。这些操作返回RDD,因此他们是转化操作而不是行动操作。reduceByKey()reduceByKey()与reduce()相当类...原创 2019-06-04 22:45:03 · 650 阅读 · 0 评论 -
Spark每日半小时(7)——PairRDD的转化操作
今天,我准备列出PairRDD的标准RDD转化操作的函数列表。之后会具体分析,之前我们讨论过的有关传递函数的规则也同样适用于pairRDD。由于pairRDD中包含二元组,所以需要传递的函数应当操作二元组而不是独立的元素。下面我会总结对pairRDD的一些转化操作。PairRDD的转化操作(以键值对集合{(1,2),(3,4),(3,6)}为例) 函数名 目的 示例 结果...原创 2019-06-03 20:18:23 · 454 阅读 · 0 评论 -
Spark每日半小时(6)——创建PairRDD
动机Spark为包含键值对类型的RDD提供了一些专有的操作。这些RDD被称为pairRDD。PairRDD是很多程序的构成要素,因为它们提供了并行操作各个键或跨节点重新进行数据分组的接口操作。例如,pairRDD提供reduceByKey()方法,可以分别归约每个键对应的数据,还有join()方法,可以把两个RDD中键相同的元素组合到一起,合并为一个RDD。我们通常从一个RDD中提取某些字段,...原创 2019-06-03 11:37:23 · 808 阅读 · 0 评论 -
Spark每日半小时(5)——持久化(缓存)
如前所述,SparkRDD是惰性求值的,而有时我们希望能多次使用同一个RDD。如果简单地对RDD调用行动操作,Spark每次都会重算RDD以及它的所有依赖。这在迭代算法中消耗格外大,因为迭代算法常常会多次使用同一组数据。下例就是先对RDD作一次计数、再把该RDD输出的一个小例子。 SparkConf conf = new SparkConf().setMaster("local...原创 2019-06-03 10:53:52 · 374 阅读 · 0 评论 -
Spark每日半小时(4)——Spark基础参数传值
向Spark传递参数Spark的大部分转化操作和一部分行动操作,都需要依赖用户传递的函数来计算。在我们支持的三种主要语言中,向Spark传递函数的方式略有区别。这里主要写Java在Java中,函数需要作为实现了Spark的org.apache.spark.api.java.function包中的任一函数接口的对象来传递。根据不同的返回来行,我们定义了一些不懂的接口。我们把最基本的一些函数接...原创 2019-06-02 17:27:04 · 1282 阅读 · 0 评论 -
Spark每日半小时(3)——Spark数据抽象RDD
RDD基础在Spark中的RDD就是一个不可变的分布式对象集合。每个RDD都被分为多个分区,这些分区运行在集群中的不同节点上。RDD可以包含Java、Scala、Python中任意类型的对象,甚至可以包含用户自定义的对象。RDD的两种创建方法:读取一个外部数据集 驱动器程序里分发驱动器程序中的对象集合。JavaRDD<String> lines = sc.textFi...原创 2019-05-30 22:45:15 · 415 阅读 · 0 评论 -
Spark每日半小时(2)——初识Spark基于Java的开发
初识Spark的Java这节主要带大家更好的步入Spark大堂,所以用一个,Spark官网提供的一个简单例子,给大家演示Spark关于java的开发。这里我们用到的Maven工程,管理Spark的依赖:<dependency> <groupId>org.apache.spark</groupId> <artifactId>...原创 2019-05-29 20:46:31 · 843 阅读 · 0 评论 -
Spark每日半小时(1)——Spark数据分析导论
1、Spark是什么?Spark是一个用来实现快速而通用的集群计算平台。在速度方面,Spark扩展了广泛使用的MR(MapReduce以后就叫mr)计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理。在处理大规模数据集时,速度是非常重要地。速度快就意味着我们可以进行交互式地数据操作,否则我们每次操作就需要等待数分钟甚至数小时。Spark的一个主要特点就是能够在内存中进行计算,因而...原创 2019-05-27 20:54:35 · 374 阅读 · 0 评论
分享