Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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

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
Java Pyspark,执行器在执行连接时失去连接_Java_Apache Spark_Pyspark_Mesos - Fatal编程技术网

Java Pyspark,执行器在执行连接时失去连接

Java Pyspark,执行器在执行连接时失去连接,java,apache-spark,pyspark,mesos,Java,Apache Spark,Pyspark,Mesos,我的mesos spark群集: 每次我尝试在连接后执行.count()时,执行器都会崩溃,没有连接的计数工作得很好,不确定原因,但在失败的查询中,我看到: 在执行者日志中: 我没有看到具体的OOM问题,这里有什么交易?似乎只有在进行连接时才会发生这种情况 遵循@busfighter的建议,仅在使用coalesce()连接和减少分区之前,才将数据帧设置为StorageLevel.MEMORY_。 还是一样的错误 编辑1 尝试了所有评论,但没有: 将数据保存到内存 重新分区为12个分区(WA

我的mesos spark群集:

每次我尝试在连接后执行.count()时,执行器都会崩溃,没有连接的计数工作得很好,不确定原因,但在失败的查询中,我看到:

在执行者日志中:

我没有看到具体的OOM问题,这里有什么交易?似乎只有在进行连接时才会发生这种情况

遵循@busfighter的建议,仅在使用coalesce()连接和减少分区之前,才将数据帧设置为StorageLevel.MEMORY_。 还是一样的错误

编辑1

尝试了所有评论,但没有:

  • 将数据保存到内存
  • 重新分区为12个分区(WAS200),在检查spark/jobs web UI后,执行器不会被我集群上的spark(Mesos)专门删除
  • 将spark.sql.autoBroadcastJoinThreshold值更改为比默认值小20
  • 编辑2

    在任何给定点上,当任务失败时,执行器将被移除,它们只是在洗牌时超时:

    编辑3

    当数据崩溃时,请查看数据大小是否非常小,感觉丢失,并且无法找到执行器日志,以查看它是否因为OOM而被杀死:

    编辑4

    一些重要注意事项:

    • 这项工作只需要一个从机就可以了(需要更多的时间),但它不会崩溃,我不认为这是一个OOM问题
    • 代码的其他部分,不涉及连接数据(仅读取和转换工作OK)
    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

    错误的屏幕截图:

    编辑6

    添加Mesos UI的屏幕截图

    编辑7

    设法缩小问题范围,由于某些原因,BlockManager正在侦听localhost,因此其他执行者无法连接:

    不知道为什么,但会包含另一个主题。

    请尝试以下内容:

    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)
    

    值取决于集群

    我想问题在于存储级别和分区。当您进行连接时,它会开始洗牌,如果存储级别不是memory\u only,它会尝试读取不适合内存的分区。您可以尝试将存储级别设置为MEMORY_ONLY,并将帧重新分区到更小的分区。@busfighter谢谢您的回复!没有办法在日志中找到这个吗?我很震惊,有这么多的小数据发生了这种情况(集群中不到1giga的数据和20Gigas的数据)检查这个
    spark.sql.autoBroadcastJoinThreshold
    你能添加你的代码吗?@JohnDoe发布了我提交时使用的配置,谢谢你的帮助。我的执行器有每个4G Ram,我不能设置这么多,我的驱动程序有1个。我不认为这是一个容量问题,因为它与一个单一的奴隶工作。最后一个“set”中还有一个小语法错误,键和值缺少“missing”。感谢您的帮助,但问题仍然存在。您的执行器似乎存在连接问题,
    无法连接到..
    。您是否可以用另一个脚本测试它是否确实在执行器上执行?您是否可以访问Mesos UI来监视集群?感谢您的帮助!我正在考虑运行一个非常简单的pypspark脚本,强制我的从属服务器之间进行协作,但我不确定如何进行协作!是的,我有一个Mesos UI,所有从属服务器都正确连接到主服务器(它们显示在从属服务器选项卡上),但我认为他们之间正在讨论的问题,请参见最后一个屏幕截图!我不熟悉Mesos(使用纱线),但请检查以下内容:集群模式