Pyspark,执行者在执行连接时失去连接

问题描述

我的mesos-spark群集:

enter image description here

每次连接后我尝试执行.count()时执行器都崩溃了,没有连接的计数效果很好,不知道为什么,但是在失败的查询中我看到了

enter image description here

在执行程序日志中:

enter image description here

我看不到OOM的特定问题,这是怎么回事?似乎只有在建立连接时才会发生。

按照@busfighter的建议进行操作,并在加入和使用coalesce()减少分区之前,将数据帧设置为StorageLevel.MEMORY_ONLY。 还是一样的错误

编辑1

尝试所有评论,一无所有:

  1. 保存数据
  2. 重新分区为12个分区(以前是200个分区),要补充一点的是,在检查spark / jobs Web UI之后,执行者永远不会被我的集群上的Spark(Mesos)特别删除
  3. 将值spark.sql.autobroadcastJoinThreshold更改为认值小20个

编辑2

在任何时候,当任务失败时,执行器都将被删除,它们只是在随机播放上超时:

enter image description here

编辑3

看到数据崩溃时,它的数据量确实很小,感觉丢失了,并且由于OOM而找不到执行器日志来查看它是否被杀死:

enter image description here

编辑4

一些重要说明:

  • 只有1个从属(可以花费更多时间),但工作正常,但不会崩溃,我认为这不是OOM问题。
  • 代码的其他部分,不涉及联接数据(仅读取和转换工作即可)

在PySpark上使用的配置

conf = (SparkConf()
        .setAppName('daily_etl')
        .setMaster(XXXXX)
        .set("spark.jars.packages","org.mongodb.spark:mongo-spark-connector_2.11:2.4.1")
        .set('spark.mesos.executor.home','/opt/spark')
        )

spark = SparkSession.builder\
    .config(conf=conf) \
    .getorCreate()

编辑5

错误的屏幕截图:

enter image description here

编辑6

添加Mesos UI的屏幕截图

enter image description here

编辑7

设法缩小问题的范围,由于某种原因,BlockManager正在侦听本地主机,因此其他执行程序无法连接:

enter image description here

不知道为什么,但会创建另一个主题

解决方法

请尝试以下操作:

conf = (SparkConf()
        .setAppName('daily_etl')
        .setMaster(XXXXX)
        .set("spark.jars.packages","org.mongodb.spark:mongo-spark-connector_2.11:2.4.1")
        .set("spark.mesos.executor.home","/opt/spark")
        .set("spark.driver.memory","16G")
        .set("spark.executor.memory","8G")
        .set("spark.sql.autoBroadcastJoinThreshold","-1")
        )

也许还会进行分区

df = df.repartition(2000)

值取决于群集