Java Pyspark,执行器在执行连接时失去连接
我的mesos spark群集: 每次我尝试在连接后执行.count()时,执行器都会崩溃,没有连接的计数工作得很好,不确定原因,但在失败的查询中,我看到: 在执行者日志中: 我没有看到具体的OOM问题,这里有什么交易?似乎只有在进行连接时才会发生这种情况 遵循@busfighter的建议,仅在使用coalesce()连接和减少分区之前,才将数据帧设置为StorageLevel.MEMORY_。 还是一样的错误 编辑1 尝试了所有评论,但没有:Java Pyspark,执行器在执行连接时失去连接,java,apache-spark,pyspark,mesos,Java,Apache Spark,Pyspark,Mesos,我的mesos spark群集: 每次我尝试在连接后执行.count()时,执行器都会崩溃,没有连接的计数工作得很好,不确定原因,但在失败的查询中,我看到: 在执行者日志中: 我没有看到具体的OOM问题,这里有什么交易?似乎只有在进行连接时才会发生这种情况 遵循@busfighter的建议,仅在使用coalesce()连接和减少分区之前,才将数据帧设置为StorageLevel.MEMORY_。 还是一样的错误 编辑1 尝试了所有评论,但没有: 将数据保存到内存 重新分区为12个分区(WA
- 这项工作只需要一个从机就可以了(需要更多的时间),但它不会崩溃,我不认为这是一个OOM问题
- 代码的其他部分,不涉及连接数据(仅读取和转换工作OK)
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(使用纱线),但请检查以下内容:集群模式