Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory management 火花“;遗嘱执行人损失失败如何解决?_Memory Management_Apache Spark_Out Of Memory_Pyspark - Fatal编程技术网

Memory management 火花“;遗嘱执行人损失失败如何解决?

Memory management 火花“;遗嘱执行人损失失败如何解决?,memory-management,apache-spark,out-of-memory,pyspark,Memory Management,Apache Spark,Out Of Memory,Pyspark,我已经查阅了关于“ExecutorLostFailure”的其他一些答案,其中大多数答案是: **一,。没有答案** ** 2. 坚持增加执行器内存和内核数量** 以下是我指的一些: 还有其他解决办法吗?我已经尝试了这两种方法,但我不清楚如何在我的SparkContext中正确估计每个(内存和内核)分配多少 该错误发生在saveAsTextFile操作中。谢谢。根据我的经验,增加执行器内存会有所帮助。但我认为这是一个幼稚的解决方案,通常根本的问题仍然存在 我之所以这么说,是因为Spark最重要

我已经查阅了关于“ExecutorLostFailure”的其他一些答案,其中大多数答案是:

**一,。没有答案** ** 2. 坚持增加执行器内存和内核数量**

以下是我指的一些:

还有其他解决办法吗?我已经尝试了这两种方法,但我不清楚如何在我的
SparkContext
中正确估计每个(内存和内核)分配多少


该错误发生在
saveAsTextFile
操作中。谢谢。

根据我的经验,增加执行器内存会有所帮助。但我认为这是一个幼稚的解决方案,通常根本的问题仍然存在

我之所以这么说,是因为Spark最重要的功能之一是,它允许您对太大而无法放入内存的数据集执行计算。理论上,您可以使用一个具有2GB内存的执行器在1TB数据集上执行大多数计算

在我遇到的每一个OOM案例中,它都是以下两个原因之一:

1.执行器内存开销不足 这仅适用于使用资源管理器(如Mesos或Thread)的情况。用此检查指南

2.您在转换中所做的某些事情会导致RDD变得非常“水平”。 回想一下,我说过Spark可以处理太大而无法放入内存的数据集。需要注意的是,数据集必须是垂直可并行的——想想一个有10^8行的文本文件,其中每行包含一个相对较小的数据点(例如浮点列表、JSON字符串、一个句子等)。Spark随后将对数据集进行分区,并向每个执行者发送适当数量的

当单行非常大时,就会出现问题。这不太可能通过正常的
map
类操作发生(除非您正在做一些非常奇怪的事情),但通过聚合类型操作
groupByKey
reduceByKey
非常容易做到。考虑下面的例子:

数据集(名称、年龄):

如果我随后使用
age作为键执行
groupByKey
,我将以以下形式获取数据:

36  [Kelly, Jane]
30  [John]
48  [Steve]
如果初始数据集中的行数非常大,则结果数据集中的行可能非常长。如果它们足够长,则可能太大,无法装入执行器内存

解决方案是什么?
这取决于你的申请。在某些情况下,这确实是不可避免的,您可能需要增加执行器内存。但通常可以重新构造算法以避免问题,例如,用
countByKey
替换
groupByKey
,或者丢弃发生率非常高的数据点(在一个案例中,我观察到,是一个机器人生成了数百万个请求,导致了这个问题。这些请求可以安全地丢弃,而不会影响分析)。

根据我的经验,增加执行器内存会有所帮助。但我认为这是一个幼稚的解决方案,通常潜在的问题仍然存在

我之所以这么说,是因为Spark最重要的功能之一是,它允许您在太大而无法放入内存的数据集上执行计算。理论上,您可以在1TB数据集上执行大多数计算,而单个执行器的内存为2GB

在我遇到的每一个OOM案例中,它都是以下两个原因之一:

1.执行器内存开销不足 这仅适用于使用资源管理器(如Mesos或Thread)的情况。用此检查指南

2.您在转换中所做的某些事情会导致RDD变得非常“水平”。 回想一下,我说过Spark可以处理太大而无法放入内存的数据集。需要注意的是,数据集必须是垂直可并行的——想想一个有10^8行的文本文件,其中每行包含一个相对较小的数据点(例如浮点列表、JSON字符串、一个句子等)。Spark随后将对数据集进行分区,并向每个执行者发送适当数量的

当单行非常大时,就会出现问题。这不太可能通过正常的
map
类操作发生(除非您正在做一些非常奇怪的事情),但通过聚合类型操作
groupByKey
reduceByKey
非常容易做到。考虑下面的例子:

数据集(名称、年龄):

如果我随后使用
age作为键执行
groupByKey
,我将以以下形式获取数据:

36  [Kelly, Jane]
30  [John]
48  [Steve]
如果初始数据集中的行数非常大,则结果数据集中的行可能非常长。如果它们足够长,则可能太大,无法装入执行器内存

解决方案是什么?
这取决于你的申请。在某些情况下,这确实是不可避免的,您可能需要增加执行器内存。但通常可以重新构造算法以避免问题,例如,用
countByKey
替换
groupByKey
,或者丢弃发生率非常高的数据点(在一个案例中,我观察到,是一个机器人生成了数百万个请求。这些请求可以安全地丢弃,而不会影响分析)。

增加内存,直到您停止丢失执行器为止,当然:)。事实上,解决办法要麻烦得多。你必须弄清楚为什么你会失去遗嘱执行人,然后设法解决这个问题。您应该从executor日志开始,但它们可能不会告诉您太多。这可能是非常困难的侦查工作,需要对整个系统有深入的了解。祝你好运我要补充的是,许多ExecutorLostFailure(几乎总是OOM异常的结果)可以通过简单地增加内存中的分区数量来解决