Spark
文章平均质量分 88
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。
@SmartSi
Stay Hungry, Stay Foolish
展开
-
Spark 学习笔记
Spark 系统性学习笔记系列原创 2022-07-31 17:36:50 · 1211 阅读 · 0 评论 -
Apache Spark 流应用程序新的可视化
这篇博文将重点介绍为理解 Spark Streaming 应用程序而引入的新的可视化功能。让我们通过从头到尾分析 Streaming 应用程序的例子详细看一下上面这些新的功能。翻译 2024-08-18 17:29:26 · 55 阅读 · 0 评论 -
为什么不能在 Spark 中定义全局变量?
估计有细心的同学可能发现了一个小问题,那就是,当我在用「全局变量」时,这个变量的定义,是在类中的。而在定义「累加器」时,是在 main 函数中的。你可能好奇,如果我把第1个程序中,「全局变量」定义的位置,也给挪到 main 函数中,是不是就能识别了呢?其实这个我也实测了,一样不能,原因还是那句话:driver 端的(普通)对象,executor 端直接识别不了。这,就是为什么要用到「累加器」的原因。为什么不能在 Spark 中定义全局变量?转载 2024-08-18 10:32:21 · 53 阅读 · 0 评论 -
Spark 性能调优之序列化
Kryo默认序列化实例时在前面会写上类名,比如java.lang.Double,类名越长,额外的存储开销越大。为了解决这个问题,Kryo允许将类名注册进映射表里,通过分配数字ID来替换冗长的类名,比如java.lang.Double使用数字0来代替。这种方式节省了储存空间,但代价是我们必须手动将所有性能相关的类名注册。spark使用Twitter chill注册了常用的Scala类,也对自己的常用类都进行了注册,具体见KryoSerializer.scala。原创 2024-08-18 08:26:01 · 795 阅读 · 0 评论 -
Spark 入门 理解闭包
Spark 的难点之一就是理解跨集群执行代码时变量和方法的作用域和生命周期。在 RDD 操作中修改作用域之外的变量经常会造成混乱。在下面的例子中,我们将看看使用foreach()来增加计数器的代码,其他操作也会出现类似的问题。原创 2024-08-15 07:37:00 · 571 阅读 · 0 评论 -
Spark 3.1.3 top 使用 Comparator 抛出 java.io.NotSerializableException 异常
这种问题一般都是对象没有序列化导致的原创 2023-11-20 07:47:26 · 238 阅读 · 0 评论 -
Spark SQL 数据源 Load 与 Save 函数
Spark SQL 支持通过 DataFrame 接口操作各种数据源。可以使用关系变换,也可以创建临时视图来操作 DataFrame。将 DataFrame 注册为临时视图可以允许你在其数据上运行 SQL 查询。本节介绍使用 Spark Data Sources 加载和保存数据的通用方法。可以通过 load 方法从文件中加载数据创建 DataFrame,同时也可以使用 save 方法将 DataFrame 中的数据保存到文件中,具体如下所示。原创 2023-10-26 08:22:26 · 206 阅读 · 0 评论 -
Spark SQL DataFrame 与 RDD 交互
Spark SQL 支持两种不同的方法将现有 RDD 转换为 Datasets。翻译 2023-10-14 15:28:14 · 94 阅读 · 0 评论 -
Spark SQL 如何使用 DataSets
开发人员一直非常喜欢 Apache Spark,因为它可以提供简单且功能强大的 API,这些特性的组合可以用最少的代码实现复杂的分析。我们通过引入 DataFrames 和 Spark SQL 继续推动 Spark 的可用性和性能。这些是用于处理结构化数据(例如数据库表,JSON文件)的高级 API,这些 API 可让 Spark 自动优化存储和计算。翻译 2023-10-14 09:10:50 · 109 阅读 · 0 评论 -
Spark SQL 如何使用 DataFrame
在 Spark 中,DataFrame 是被组织成命名列的分布式数据集合。在概念上等同于关系数据库中的表或 R/Python 中的 data frame,但经过了优化器的优化。DataFrame 可以从各种来源构建,例如:结构化数据文件,Hive 表,外部数据库或现有的 RDD。如下示例展示了如何在 Java 中构建 DataFrame。Scala 和 Python 中提供了类似的API。.builder()// 创建DataFrame。翻译 2023-10-14 08:42:04 · 160 阅读 · 0 评论 -
Spark 2.0 如何使用 SparkSession
除了有时限的交互之外,SparkSession 提供了一个单一的入口来与底层的 Spark 功能进行交互,并允许使用 DataFrame 和 Dataset API 对 Spark 进行编程。最重要的是减少了开发人员在与 Spark 进行交互时必须了解和构造概念的数量。在这篇文章中我们将探讨 Spark 2.0 中的 SparkSession 的功能。翻译 2023-10-13 07:40:30 · 287 阅读 · 0 评论 -
Spark SQL 入门
Spark SQL 是用于结构化数据处理的 Spark 模块。与基本的 Spark RDD API 不同,Spark SQL 提供的接口为 Spark 提供了有关数据和计算的更多结构化信息。在内部,Spark SQL 使用这些额外的信息执行优化。Spark 提供了几种与 Spark SQL 进行交互的方法,包括SQL和。当计算结果时会使用相同的执行引擎进行计算,与你用来表达计算的 API 和语言无关。这种统一意味着开发人员可以轻松地在不同 API 之间来回切换,从而提供了表达给定转换操作最自然的方式。翻译 2023-10-10 08:44:40 · 88 阅读 · 0 评论 -
Spark 入门 如何使用累加器 Accumulator
自定义累加器类型的功能在 1.x 版本中就已经提供了,但是使用起来比较麻烦,在 Spark 2.0.0 版本后,累加器的易用性有了较大的改进,而且官方还提供了一个新的抽象类 AccumulatorV2 来提供更加友好的自定义类型累加器的实现方式。官方同时给出了一个实现的示例:CollectionAccumulator,这个类允许以集合的形式收集 Spark 应用执行过程中的一些信息。例如,我们可以用这个类收集 Spark 处理数据过程中的非法数据或者引起异常的异常数据,这对我们处理异常时很有帮助。原创 2023-10-09 08:57:59 · 248 阅读 · 0 评论 -
Spark 入门 Shuffle 操作
Spark 中的某些操作会触发一个称为shuffle的事件。shuffle是 Spark 重新分配数据的一种机制,以便对不同分区上的数据进行分组。这通常跨 Executors 和机器进行数据复制,使得shuffle成为一项复杂而代价比较大的操作。翻译 2023-09-25 08:01:40 · 118 阅读 · 0 评论 -
Spark 内部原理 运行模式
Spark 的运行模式又是什么样的呢?通过本文以下的讲解大家可以详细的学习了解。转载 2023-09-16 15:34:47 · 101 阅读 · 0 评论 -
Spark 入门 共享变量
通常情况下,传递给 Spark 操作(例如 map 或 reduce)的函数是在远程集群节点上执行的。函数中使用的变量,在多个节点上执行时是同一变量的多个副本。这些变量被拷贝到每台机器上,并且在远程机器上对变量的更新不会回传给 Driver。跨任务支持通用的,可读写的共享变量效率是非常低的。所以,Spark 提供了两种类型的共享变量:广播变量(broadcast variables)和累加器(accumulators)。翻译 2023-09-13 07:58:21 · 187 阅读 · 0 评论 -
Spark Streaming在小米数据流应用中的Checkpoint相关问题
我们都希望 Spark Streaming 作业能够长时间运行下去,但是总会有一些意想不到的异常会导致作业退出(比如依赖的服务出现了异常),或者我们需要对作业进行升级重启,这个时候就需要用到 Checkpoint 了。使用 Spark Streaming 的同学应该对 Checkpoint 的用法有了一定的了解,我们这里只简单介绍下 Checkpoint 的原理。Spark Streaming 有两类 Checkpoint,一类是 Metadata Checkpoint,来加强作业的容错性;转载 2023-09-12 21:36:21 · 97 阅读 · 0 评论 -
携程如何基于 Spark Streaming 构建实时计算平台
随着互联网技术的迅速发展,用户对于数据处理的时效性、准确性与稳定性要求越来越高,如何构建一个稳定易用并提供齐备的监控与预警功能的实时计算平台也成了很多公司一个很大的挑战。自2015年携程实时计算平台搭建以来,经过两年多不断的技术演进,目前实时集群规模已达上百台,平台涵盖各个SBU与公共部门数百个实时应用,全年JStorm集群稳定性达到100%。转载 2023-09-10 17:36:14 · 117 阅读 · 0 评论 -
Spark Streaming 如何使用 MapWithState 实现有状态应用
有时候可能需要依赖流中前几个批次中的元素来计算当前批次的结果。例如,计算流中所有元素的和,计算当前元素值与之前元素的差值。这种运算会在遍历整个流的期间不断更新计算状态。在 Spark Streaming 中提供了和 MapWithState 函数来实现。本文主要介绍如何使用 MapWithState 函数实现有状态应用。原创 2023-09-10 09:05:55 · 166 阅读 · 0 评论 -
Spark Streaming 如何使用 UpdateStateByKey 实现有状态应用
有时候可能需要依赖流中前几个批次中的元素来计算当前批次的结果。例如,计算流中所有元素的和,计算当前元素值与之前元素的差值。这种运算会在遍历整个流的期间不断更新计算状态。在 Spark Streaming 中提供了 updateStateByKey 和 MapWithState 函数来实现。本文主要介绍如何使用 updateStateByKey 函数实现有状态应用。原创 2023-09-09 15:44:59 · 179 阅读 · 0 评论 -
Spark Streaming 2.2.0 与 Kafka 0.8 整合
在这篇文章我们主要讲解一下如何配置 Spark Streaming 来接收 Kafka 的数据,一共有两种方法:一种是使用 Receivers 和 Kafka 高级API的旧方法。另一种是不使用 Receivers 的新方法(在 Spark 1.3 中引入)翻译 2023-09-05 08:10:58 · 91 阅读 · 0 评论 -
Spark Streaming Kafka 偏移量 Offset 管理
Spark Streaming 与 Kafka 的集成允许用户从 Kafka 单个 Topic 甚至多个 Topic 中读取消息。Kafka Topic 通过存储消息的分布式分区来接收消息。每个分区按顺序维护接收到的消息,并用偏移量 Offset 来标识。开发人员可以在 Spark Streaming 作业中通过偏移量 Offset 来控制数据读取的位置,但是这需要好的偏移量 Offset 管理机制。管理偏移量 Offset 对于保证流式应用程序在整个生命周期中数据的连贯性是非常有益的。原创 2022-10-12 22:42:41 · 1047 阅读 · 0 评论 -
Spark Streaming 基于 Direct API 优化与 Kafka 集成
Apache Kafka 正在迅速成为最受欢迎的开源流处理平台之一。我们在 Spark Streaming 中也看到了同样的趋势。因此,在 Apache Spark 1.3 中,我们专注于对 Spark Streaming 与 Kafka 集成进行重大改进。在本文中,我们将更详细地讨论这些改进。翻译 2022-10-10 16:37:18 · 185 阅读 · 0 评论 -
Spark Streaming 容错改进与零数据丢失
实时流处理系统必须可以 7*24 小时工作,因此它需要具备从各种系统故障中恢复的能力。最开始,Spark Streaming 支持从 Driver 和 Worker 故障中恢复。然而,从有些数据源导入数据时可能存在故障恢复以后丢失数据的情况。在 Spark 1.2 版本中,我们已经在 Spark Streaming 中对预写日志作了初步支持,改进了恢复机制,使得更多数据源零数据丢失有了可靠的保证。本文将详细地描述这个特性的工作机制,以及开发者如何在 Spark Streaming 应用中使用这个机制。翻译 2022-10-10 16:01:15 · 349 阅读 · 0 评论 -
Spark Streaming 2.2.0 性能调优
Spark Streaming 应用程序要获得最佳性能需要做一些调整优化。这篇文章我们介绍可以提高你应用程序性能的参数以及配置。翻译 2022-10-10 13:26:42 · 231 阅读 · 0 评论 -
Spark Streaming 第一个程序 WordCount
Spark Streaming 是 Spark Core API 的一个扩展,它对实时流式数据的处理具有可扩展性、高吞吐量、可容错性等特点。数据可以从诸如 Kafka,Flume,Kinesis 或 TCP 套接字等许多源中提取,并且可以使用由诸如 map,reduce,join 或者 window 等高级函数组成的复杂算法来处理。最后,处理后的数据可以推送到文件系统、数据库、实时仪表盘中。事实上,你可以将处理后的数据应用到 Spark 的机器学习算法、 图处理算法中去。内部工作原理如下图所示。原创 2022-10-09 18:34:20 · 334 阅读 · 0 评论 -
Spark 在 Yarn 上运行 Spark 应用程序
在Yarn上运行Spark提供了与其他Hadoop组件最紧密的集成,也是在已有Hadoop集群上使用Spark的最简单的方法。为了在Yarn上运行Spark应用程序,Spark提供了两种部署模式Client模式和Cluster模式。Client模式的Driver在客户端运行,而Cluster模式的Driver在Yarn的ApplicationMaster上运行。...原创 2022-07-29 23:11:02 · 1776 阅读 · 0 评论 -
Spark 3.1.3 HADOOP_CONF_DIR or YARN_CONF_DIR must be set
上面错误提示其实已经说的很明白了,在运行环境中缺少了HADOOP_CONF_DIR或者YARN_CONF_DIR环境变量配置。配置完重新运行脚本即可。原创 2022-07-28 22:48:01 · 675 阅读 · 0 评论 -
Spark 安装与启动
如果你事先安装了Spark对应版本的Hadoop,那么可以选择forHadoopx.x类型,如果你安装的Hadoop版本没有对应的Spark,可以选择Pre-builtwithuser-providedApacheHadoop类型。选择Spark版本和Package类型之后,自动会为你生成spark-3.1.3-bin-hadoop2.7.tgz包地址,直接点击下载即可。Spark版本选择的不同,提供的Package类型也会不一样。...原创 2022-07-20 23:17:55 · 5950 阅读 · 1 评论 -
Spark 应用程序部署工具spark-submit
1. 简介Spark的bin目录中的spark-submit脚本用于启动集群上的应用程序。 可以通过统一的接口使用Spark所有支持的集群管理器,因此不必为每个集群管理器专门配置你的应用程序(It can use all of Spark’s supported cluster managers through a uniform interface so you don’t have to co......原创 2017-02-16 20:08:53 · 6518 阅读 · 0 评论 -
Spark 3.1.3 java.lang.NoSuchFieldError: JAVA_9
确实没有JAVA_9,大概率是版本不一致造成的。通过commons-lang3的ReleaseNotes了解到,从3.5版本开始Java9引入了一个新的版本字符串Schema,具体细节可以参考。是否是由于多个版本冲突导致,可以自己再分析一下。...原创 2022-07-21 08:36:27 · 1531 阅读 · 0 评论 -
Spark内部原理之运行原理一
原文来源于:Spark内部原理之运行原理一在大数据领域,只有深挖数据科学领域,走在学术前沿,才能在底层算法和模型方面走在前面,从而占据领先地位。Spark的这种学术基因,使得它从一开始就在大数据领域建立了一定优势。无论是性能,还是方案的统一性,对比传统的 Hadoop,优势都非常明显。Spark 提供的基于 RDD 的一体化解决方案,将 MapReduce、Streaming、SQL、Machin...转载 2018-03-15 14:10:54 · 1044 阅读 · 0 评论 -
Spark 入门 RDD操作
Spark2.3.0版本:Spark2.3.0 RDD操作RDD支持两种类型的操作:转移(transformations):从现有数据集创建一个新数据集动作(actions):在数据集上进行计算后将值返回给驱动程序例如,map是一个转移操作,传递给每个数据集元素一个函数并返回一个新RDD表示返回结果。 另一方面,reduce是一个动作操作,使用一些函数聚合RDD的所有元素并将最终结果返回给驱动...翻译 2017-06-13 21:14:25 · 3390 阅读 · 1 评论 -
Spark 入门 弹性分布式数据集(RDD)
创建RDDSpark的核心概念是弹性分布式数据集(RDD),RDD是一个可容错、可并行操作的分布式元素集合。有两种方法可以创建RDD对象:在驱动程序中并行化操作集合对象来创建RDD从外部存储系统中引用数据集(如:共享文件系统、HDFS、HBase或者其他Hadoop支持的数据源)。1. 并行化集合通过在驱动程序中的现有集合上调用JavaSpark...翻译 2017-06-12 20:40:52 · 1217 阅读 · 1 评论 -
Shark, Spark SQL, Hive on Spark以及SQL On Spark的未来
随着Spark SQ的引入以及Hive On Apache Spark的新功能(HIVE-7292)的引入,我们对这两个项目的立场以及它们与Shark的关系有了很多的关注。在今天的Spark Summit上,我们宣布我们正在停止Shark的开发,并将资源全部集中在Spark SQL上,这将为现有Shark用户提供一个Shark特色的圈子(will provide a superset of Sha原创 2017-06-20 20:41:40 · 1470 阅读 · 0 评论 -
Spark 入门 初始化 Spark
1. 初始化Spark程序必须做的第一件事是创建一个JavaSparkContext对象(Scala和Python中是SparkContext对象),它告诉Spark如何访问集群。 要创建SparkContext,您首先需要构建一个包含有关应用程序信息的SparkConf对象。Java版本:private static String appName = "JavaWordCountDemo";p原创 2017-06-08 17:08:36 · 2891 阅读 · 1 评论 -
Spark 入门 引入Spark
Spark 3.1.3 支持用于简洁编写函数的 Lambda表达式,也可以使用 org.apache.spark.api.java.function包中的类翻译 2017-06-08 16:36:51 · 1544 阅读 · 1 评论 -
[Spark]那些年我们遇到的Spark的坑
1. java.lang.NoClassDefFoundError: org/apache/spark/Logging1.1 问题Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/Logging at java.lang.ClassLoader.defineClass1(Native Me原创 2017-06-08 16:24:07 · 12762 阅读 · 1 评论 -
Spark 入门 RDD 持久化
1. 概述Spark中最重要的功能之一是操作时在内存中持久化(缓存)数据集(persisting (or caching) a dataset in memory across operations)。当我们让Spark持久化存储一个RDD时,每个节点都会将其计算的任何分区存储在内存中,并将其重用于该数据集(或从其派生的数据集)的其他行动操作(each node stores any partit翻译 2017-06-16 18:05:41 · 2858 阅读 · 1 评论 -
Spark Streaming 输入DStreams 和 Receivers
1. 输入DStream与Receiver输入DStreams表示从源中获取输入数据流的DStreams。在指南一示例中,lines表示输入DStream,它代表从netcat服务器获取的数据流。每一个输入DStream(除 file stream)都 与一个接收器Receiver相关联,接收器从源中获取数据,并将数据存入Spark内存中来进行处理。 输入DStreams表示从数据源获取的原始数据翻译 2017-03-02 20:41:12 · 1164 阅读 · 1 评论