【问题标题】:Log worker ID when using PySpark UDF使用 PySpark UDF 时记录工作人员 ID
【发布时间】:2021-11-17 01:25:14
【问题描述】:

我有一个计算量大的 Python 函数,它封装到 PySpark UDF 中并在大约 100 行数据上运行。在查看 CPU 利用率时,看起来有些工作节点甚至没有被利用。我意识到这可能有多种原因,并正在尝试调试。

在 UDF 内部,我已经记录了各种统计信息(例如,每次 UDF 执行的开始和结束时间)。还有什么方法可以记录工作节点 ID 吗?我的目的是确保作业在所有工作节点之间均匀分布。

我想工作人员的 IP 或我可以在 UDF 中登录的任何其他独特功能也可以工作。

【问题讨论】:

  • 不是worker ID,但是它的网络地址或主机名呢?您可以使用 Spark UI 参考它们
  • 你知道我会怎么做吗?我在 stackoverflow 或其他地方找不到单个线程,它描述了如何从执行程序进程内部读取该信息...
  • 在 Azure Databricks 中,我采用了这个answer 来获取正在执行的 UDF 中的工作节点的 IP。
  • 谢谢!其中一个有效,我将为未来的用户添加一个答案。

标签: python apache-spark pyspark user-defined-functions databricks


【解决方案1】:

以下作品:

import socket

def my_udf_func(params):
    # your code here
    host = socket.gethostname()

然后您可以在返回参数中返回host(例如在字典中)或将其写入您的日志。 databricks提供的主机名是集群的名字+worker节点的ip地址,例如:

0927-152944-dorky406-10-20-136-4

10-20-136-4 在这种情况下是 IP 地址。

socket.getsockname() 似乎不一致 - 我不建议使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2018-07-23
    相关资源
    最近更新 更多