今天在用spark处理数据的时候,遇到两个小问题,特此笔记一下。
两个问题都与网络交互有关,大致处理场景是,在driver端会提前获取组装一批数据,然后把这些数据发送executor端进行后续处理。
问题一:序列化异常
driver有一个case class类需要封装一些数据发送到executor上,原来都是scala的类,直接发送到executor上执行没问题,而且也没加序列化的注解,原因是因为scala会自动给函数方法序列化,因为这个类出现在函数中,所以也没事,但今天在这个类里面又加了一个java的bean,结果就出现了异常:
````
java.io.NotSerializableException
````
原因是新加的java bean没有序列化,所以导致了这个问题,scala的函数序列化可能并不是深度序列化,不会对类属性里面的类再次进行序列化,所以解决办法就是让这个java bean实现java的序列化接口:
````
Bean implements Serializable
````
问题二:driver端发送的数据太大导致超过spark默认的传输限制
异常如下:
````
User class threw exception: java.util.concurrent.ExecutionException:
org.apache.spark.SparkException
: Job aborted due to stage failure: Serialized task 523:49 was 146289487 bytes, which exceeds max allowed:
spark.rpc.message.maxSize (134217728 bytes).
Consider increasing spark.rpc.message.maxSize
or using broadcast variables for large values.
````
从上面的异常提示,已经很明显了,就是默认driver向executor上提交一个任务,它的传输数据不能超过128M,如果超过就抛出上面的异常。
如何解决:
方法一:使用广播变量传输
方法二:调大spark.rpc.message.maxSize的值,默认是128M,我们可以根据需要进行适当调整
在使用spark-submit提交任务的时候,加上配置即可:
````
--conf "spark.rpc.message.maxSize=512" //代表每个分区允许发送的最大值是512M
````
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
分享到:
相关推荐
Spark是Apache软件基金会下的一个开源大数据处理框架,它以其高效的计算性能、易用性以及对迭代计算的支持而闻名。Spark的核心在于它的弹性...通过深入学习这些内容,你可以更好地理解和运用这两个强大的大数据工具。
接着,Driver进程的启动分为client端和Master端两个阶段。在client端,用户提交的Spark应用会被转化为一个Job,然后发送给Master;在Master端,接收到Job后,会根据配置信息创建RDD和DAG,并将任务调度给Worker执行...
Spark 学习笔记 Spark 是一个基于内存的分布式计算框架,它提供了高效、灵活、可扩展的数据处理解决方案。Spark 的核心组件是 Resilient Distributed Dataset (RDD),它是一个弹性的分布式数据集合,提供了高效的...
Spark还引入了两种共享变量类型:广播变量和累加器。广播变量允许在整个集群中缓存一个只读的值,减少数据传输开销;累加器则用于实现累加操作,如计数和求和,但只能在任务内部进行写操作,对驱动程序是只读的。 ...
尚硅谷的Spark资料笔记代码提供了一个深入学习和理解Spark的宝贵资源库,涵盖理论知识、实践案例以及代码示例。 一、Spark核心概念 Spark的核心在于其弹性分布式数据集(Resilient Distributed Datasets,简称RDD)...
在 Spark 调度中最重要的是 DAGScheduler 和 TaskScheduler 两个调度器,其中,DAGScheduler 负责任务的逻辑调度, 将作业拆分为不同阶段的具有依赖关系的任务集。TaskScheduler 则负责具体任务的调度执行...
- **任务执行**:Spark采用DAG(有向无环图)来优化任务执行流程,而MapReduce则是简单的Map和Reduce两个阶段。 - **应用场景**:Spark更适合需要迭代处理和复杂查询的应用场景,而MapReduce则适合于简单的批量处理...
本学习笔记将深入探讨这两个工具的核心概念、应用场景以及如何将它们结合使用。 **Hadoop** 是一个开源框架,主要用于分布式存储和计算。它的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce。HDFS...
Spark考试(练习题)编程题笔记! 一、RDD简介 RDD(Resilient Distributed DataSet)是 Spark 中的核心概念,表示弹性分布式数据集。它是容错的、并行的数据结构,可以让用户将数据存储到磁盘和内存中,并且还能...
本篇笔记主要探讨Spark中的共享变量、RDD持久化、checkpoint机制、运行模式以及任务调度等相关知识点。 1. **共享变量** - **累加器(Accumulator)**:累加器是一种只能增加不能减少的共享变量,常用于统计任务中...
1. **通信框架**: Spark采用了**Akka** 和 **Netty** 这两种成熟的通信技术,这些技术已经被广泛应用于生产环境,具有稳定性和高效性。 2. **Shuffle实现**: Spark中的Shuffle功能主要借鉴了**MapReduce**的设计...
Scala与Spark是大数据处理领域中的重要工具,它们的结合使用为高效的数据分析提供了可能。Scala是一种多范式编程语言,以其强大的函数式编程特性而受到...建议仔细阅读和实践其中的内容,以便更好地掌握这两个工具。
标题中的"Spark-学习.rar"表明这是一个关于...总的来说,"Spark-学习.rar"的两个文件为我们提供了一个全面了解和学习Spark的起点,通过它们,我们可以逐步掌握Spark的核心概念和技术,并提升大数据处理和分析的能力。
随着许多应用程序开始在Spark上构建,如何在生产环境中高效运行Spark应用程序成为一个棘手的问题。挑战包括内存溢出、应用程序运行缓慢、未满足服务水平协议(SLA)、资源浪费和集群吞吐率下降等问题。 3. Spark...
SparkMLlib学习笔记 SparkMLlib是 Apache Spark 机器学习库,提供了一个统一的 API,用于机器学习任务的开发。SparkMLlib 提供了多种数据类型,包括 Vector、LabeledPoint 和 Matrix 等。这些数据类型是机器学习...
标题 "scikit-learn-to-spark-ml" 暗示了这个项目是关于比较两个流行的机器学习库:scikit-learn和Apache Spark MLlib的。在这个场景中,"scikit-learn" 是一个广泛使用的Python库,适用于数据科学中的各种机器学习...
3. Spark Notebook的应用:Spark Notebook是一个基于Web的交互式笔记本,它可以用于数据探索、分析和机器学习等任务。它提供了 Scala 和 Python 两种编程语言的支持,并且支持模板、安全登录集成和数据发现等功能。 ...
在大数据处理领域,Hadoop和Spark是两个至关重要的框架,它们为海量数据的存储、管理和分析提供了高效解决方案。本文将围绕“Hadoop,SPARK开发学习笔记”这一主题,深入探讨Hadoop的组件HDFS(分布式文件系统)、...