当前位置: 首页 > 知识库问答 >
问题:

最后一个任务永远停顿...只是有时候

赏梓
2023-03-14

我有一个pySpark工作(spark 2.4.1),它在10%的情况下似乎工作正常,其他时候似乎永远停留在一个任务上,我不能真正理解发生了什么。以下是我在pyspark代码中所做的:

df = ss.read.parquet(...)
df2 = df.withColumn("A", my_python_udf(sf.col("position.latitude"))
print(df2.groupBy(sf.spark_partition_id()).count().agg(sf.min("count"), sf.max("count"), sf.avg("count")).toPandas())

我似乎永远停留在对“Topandas”调用的评价中。当我检查executors选项卡时,只有一个executors可以运行,调用堆栈如下:

    null

编辑:我也有2个执行器失败,错误如下:

java.io.ioException:在net.razorvine.pickle.pickleutils.readbytes_into(pickleutils.java:75)在net.razorvine.pickle.pickleutils.readbytes(pickleutils.java:55)在net.razorvine.pickle.unpickler.load_binunicode(unpickler.java:473)在net.razorvine.pickle.unpickler.dispatch(unpickler.java:190)在:112)在org.apache.spark.sql.execution.python.batchevalpythonexec$$anonfun$evaluate$1.在org.apache.spark.sql.execution.python.batchevalpythonexec$$anonfun$evaluate$1.应用(batchevalpythonexec.scala:90)在scala.collection.iterator$$anon$12.应用(batchevalpythonexec.scala:89)在scala.collection.iterator$$anon$12.在9)在scala.collection.iterator$$Anon$11.HasNext(iterator.scala:409)在org.apache.spark.sql.catalyst.expressions.generateDClass$generatediteratorforcodegenstage2.agg_doAggregateWithKeys_0$(未知来源)在org.apache.spark.sql.catalyst.expressions.generatedclass$generatediteratorforcodegenstage2.processnext(未知来源)在org.apache.spark.sql.execution.bufferedrowiterator.hass在org.apache.spark.sql.execution.bufferedrowiterator.hass在:409)在org.apache.spark.shuffle.sort.unsafeshufflewriter.write(unsafeshufflewriter.java:187)在org.apache.spark.scheduler.shufflemaptask.runtask(shufflemaptask.scala:99)在org.apache.spark.scheduler.shufflemaptask.runtask(shufflemaptask.scala:55)在apache.spark.util.utils$.TryWithSafeFinally(utils.scala:1360)位于org.apache.spark.executor.executor$taskrunner.run(executor.scalA:409)在java.util.concurrent.ThreadPoolExecutor.runworker(ThreadPoolExecutor.java:1149)在java.util.concurrent.ThreadPoolExecutor$worker.run(ThreadPoolExecutor.java:624)在java.lang.Thread.run(Thread.java:748)

这让我相信我的代码之外的东西出了问题

共有1个答案

商松
2023-03-14

在我的例子中,我的PySpark作业总是(不是随机地)卡在Pythonudfrunner等待数据中。

我发现它正在等待来自PySpark守护进程的数据,该守护进程用于启动python代码(python UDFs),而不会浪费内存负载,同时将python进程(UDF)从Java进程(Spark)中分叉

因此,粗略地说,Python UDF由Spark序列化并发送到这个负责运行Python代码的守护进程。

在我的例子中,pyspark.zip来自Spark2.3.3,但Spark本身是用Spark2.4.5运行的。我用Spark2.4.5中的pyspark.zip替换了pyspark.zip,一切都开始成功运行。

我不认为你会有和我一样的问题,但也许它可以给你一些关于你的设置中正在发生的事情的想法。

 类似资料:
  • 我正在将一个拼花文件从DataFrame写入S3。当我查看Spark UI时,我可以看到除1项任务外的所有任务都在写作阶段迅速完成(例如199/200)。这最后一个任务似乎要花很长时间才能完成,而且常常由于超出执行器内存限制而失败。 我想知道最后一个任务发生了什么。如何优化它?谢谢。

  • 我在Prod运行一个rust Tokio应用程序。在上一个版本中,我有一个bug,一些请求导致我的代码进入无限循环。 发生的情况是,当进入无限循环的任务被卡住时,所有其他任务都继续正常工作并处理请求,直到延迟任务的数量足够高,导致我的程序没有响应。 我的问题是我们的监控系统花了很多时间来识别出哪里出了问题。例如:回答kubernetes健康检查的任务运行良好,但我无法识别系统中的任务是否已停滞。

  • 我在weblogic 12c中配置了我的域。当我尝试启动服务器时,它们会出现(状态更改为正在运行),并且web服务处于活动状态。但是,weblogic控制台中最后一个操作的状态始终是“任务进行中” 未更改为已完成的可能原因是什么。 此外,在我重新启动管理后,它会变为无。

  • 我是pycharm的新用户,我很难运行一个简单的文件来导入熊猫。我有以下问题: 每当我打开项目时,“扫描文件到索引”都需要很长时间。 我可以看到在索引中,它使用了Anaconda2中的包/文件,这就是为什么我的程序需要很长时间才能运行。 我已经尝试使某些文件夹“排除”,如此处所述 PyCharm 4.0.5 挂在“扫描文件以索引”后台任务上,我还删除了此处所述的“缓存”文件夹 Intelli J

  • 我在gradle项目中添加了一个任务: 现在,任务总是在任务之前运行。这很好,因为构建任务包含许多步骤。现在我想显式禁用其中一个包含的任务。

  • 在我的程序中,我有一个互斥锁和两个线程。其中一个线程经常获取锁。另一个线程试图获取,但必须永远等待。 是否会因为释放锁后很快就获得了锁,而另一个线程没有机会获得锁?互斥总是给每个人一个机会吗?如果不是,什么是好的解决方案?(某种FIFO锁?) 我使用的是std::mutex和std::lock\u guard 问题扩展seccpur指出,std::condition\u变量可以解决这个问题。三个线