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

Sat*_*tya 4 python apache-spark apache-spark-sql pyspark spark-dataframe

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

我的火花工作旨在:

  • 跑一些groupby,
  • count,
  • joins获得决赛df然后df.toPandas().to_csv().

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

WARN TaskMemoryManager:无法分配页面(33554432字节),请重试.

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

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

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

  3. 在org.apache.spark.rpc.RpcTimeout.组织$阿帕奇$火花$ RPC $ RpcTimeout $$ createRpcTimeoutException

  4. ExecutorLostFailure(由其中一个正在运行的任务导致执行程序驱动程序退出)原因:执行程序心跳超时158295 ms后超时

  5. 处理来自('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 EOFError

  6. 最后 ###********##

    py4j.protocol.Py4JNetworkError:尝试连接到Java服务器时发生错误(127.0.0.1:38073)

首先想到的是,我假设,错误可能是由于内存错误(TaskMemoryManager)而来自Total 16gb,这个过程消耗了最大6 gb,剩下9 + gb空闲.我还将驱动程序内存设置为10G.通过.

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

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

请帮我分析一下上面的错误.欢迎任何帮助/评论.谢谢.

use*_*613 9

在我们的例子中,我们有很多小表(<10 MB).因此我们决定禁用广播,此外还开始使用G1GC进​​行垃圾收集.将这些条目添加到$ SPARK_HOME/conf中的spark-defaults.conf文件中

spark.driver.extraJavaOptions -XX:+UseG1GC
spark.executor.extraJavaOptions  -XX:+UseG1GC
spark.sql.autoBroadcastJoinThreshold    -1
Run Code Online (Sandbox Code Playgroud)

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