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 工作的目标是:
运行一些groupby
,
count
,
和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 - ImportError:无法从“pyspark”导入名称“SparkContext”
Pyspark:基于所有列减去/差异 pyspark 数据帧
在 PySpark 的两个不同 pyspark.sql.dataframes 中的两列中创建一个 pyspark.sql.dataframe