Pyspark:TaskMemoryManager:分配页面失败:在错误分析中需要帮助

Posted

技术标签:

【中文标题】Pyspark:TaskMemoryManager:分配页面失败:在错误分析中需要帮助【英文标题】:Pyspark: TaskMemoryManager: Failed to allocate a page: Need help in Error Analysis 【发布时间】:2016-10-10 17:48:10 【问题描述】:

我在独立集群模式下运行 spark 作业时遇到这些错误。

我的 spark 工作的目标是:

运行一些groupbycount, 和joins 得到最终的df,然后是df.toPandas().to_csv()

输入数据集为 524 Mb。我得到的错误:

WARN TaskMemoryManager: 分配页面失败(33554432 字节),重试。

重复上述多次后,又出现新错误

    WARN NettyRpcEnv:忽略失败:java.util.concurrent.TimeoutException:无法在 10 秒内收到任何回复

    org.apache.spark.rpc.RpcTimeoutException:期货在 [10 秒] 后超时。此超时由 spark.executor.heartbeatInterval 控制

    在 org.apache.spark.rpc.RpcTimeout。 org$apache$spark$rpc$RpcTimeout$$createRpcTimeoutException

    ExecutorLostFailure(其中一个正在运行的任务导致executor driver退出)原因:Executor heartbeat在158295ms后超时

    处理来自 ('127.0.0.1', 49128) 的请求时发生异常 Traceback(最近一次调用最后一次):

    文件“/home/stp/spark-2.0.0-bin-hadoop2.7/python/pyspark/accumulators.py”,第 235 行,在句柄中 num_updates = read_int(self.rfile) 文件“/home/stp/spark-2.0.0-bin-hadoop2.7/python/pyspark/serializers.py”,第 545 行,在 read_int 引发 EOFError EOF错误

    终于###********##

    py4j.protocol.Py4JNetworkError: 尝试连接 Java 服务器时出错 (127.0.0.1:38073)

首先想到,我认为该错误可能是由于内存错误(TaskMemoryManager)和总共 16gb 造成的,该进程消耗最大 6gb,剩余 9+gb 空闲。我也将驱动程序内存设置为10G。所以通过。

但是,当我对最终的数据帧执行 count() 或 show() 时,这是一个成功的操作。但是在执行 toCsv 时,它会抛出上述错误/警告。

实际上并不了解/猜测可能导致问题的原因。

请帮我分析上述错误。欢迎任何帮助/评论。谢谢。

【问题讨论】:

【参考方案1】:

在我们的例子中,我们有很多较小的表(

spark.driver.extraJavaOptions -XX:+UseG1GC
spark.executor.extraJavaOptions  -XX:+UseG1GC
spark.sql.autoBroadcastJoinThreshold    -1

或者作为替代方案,您可以调整 autoBroadcast 的阈值大小并查看它是否可以解决问题。

【讨论】:

值得分析连接中的表大小并采取适当的措施。对于某些人来说,它可能不起作用。但是,为我工作。 新来的 spark,你能解释一下这些不同的选项在做什么吗? IE。他们打算解决什么问题? 发现这个有用:github.com/vaquarkhan/vaquarkhan/wiki/… 这对我来说也适用于本地模式和两个小数据集

以上是关于Pyspark:TaskMemoryManager:分配页面失败:在错误分析中需要帮助的主要内容,如果未能解决你的问题,请参考以下文章

pyspark.sql.functions.col 和 pyspark.sql.functions.lit 之间的 PySpark 区别

Pyspark 安装错误:没有名为“pyspark”的模块

Pyspark:将 sql 查询转换为 pyspark?

Pyspark - ImportError:无法从“pyspark”导入名称“SparkContext”

Pyspark:基于所有列减去/差异 pyspark 数据帧

在 PySpark 的两个不同 pyspark.sql.dataframes 中的两列中创建一个 pyspark.sql.dataframe