为什么sparkworker节点有两个pyspark.daemon进程

问题描述 投票:0回答:1

当启动一个pyspark程序时,在worker节点中,来自

ps -uxf
的进程树如下所示(我简化了java参数等)

bob     241057  2.1  0.0 3380232 383300 ?      Sl   22:47   0:11 /third_party/java/jdk/1.8.0_72/bin/java org.apache.spark.deploy.worker.Worker --webui-port 8081 ubuntu_1:56014 -c 1 -m 11G
bob     241882 36.6  0.1 3264692 535552 ?      Sl   22:48   3:22  \_ /third_party/java/jdk/1.8.0_72/bin/java -Dspark.driver.port=42857--driver-url spark://CoarseGrainedScheduler@ubuntu_1:42857 --executor-id 0 --hostname 198.18.5.4 --cores 1 --app-id app-20241217224629-0000 --worker-url spark://[email protected]:39995 --resourceProfileId 0
bob     242279  0.3  0.0 179724 38512 ?        S    22:48   0:01      \_ /third_party/python3/bin/python3.8.bin -m pyspark.daemon
bob     242594 97.9  0.0 184844 33860 ?        S    22:48   8:54          \_ /third_party/python3/bin/python3.8.bin -m pyspark.daemon

  1. 进程 241057 是工作进程,它与 Spark 主进程通信并监视和报告资源可用性,并在主进程的指示下生成执行程序。工作人员还监视执行者的活跃度和资源消耗。
  2. 进程231882是执行进程,为应用程序执行实际的计算和数据处理
  3. 进程 242279 是与执行器进程通信的 pyspark.daemon 进程
  4. 进程 242594 是另一个 pyspark.daemon 进程,它运行真正的 python 相关任务,如 UDF 函数

以上是我对4个进程的理解,我不太确定为什么有两个pyspark.daemon进程,有人可以分享更多关于这个的信息吗?

pyspark
1个回答
0
投票

我想我从源代码的注释中找到了答案这里

// 因为从 Java 分叉进程的成本很高,所以我们更喜欢启动单个 Python 守护进程, // pyspark/daemon.py(默认情况下)并告诉它为我们的任务分叉新的工作人员。这个守护进程 // 目前仅适用于基于 UNIX 的系统,因为它使用信号进行子管理, // 所以我们也可以直接启动worker pyspark/worker.py(默认情况下)。

© www.soinside.com 2019 - 2024. All rights reserved.