【问题标题】:How do I identify which DAG / task is causing Node memory issues?如何识别导致节点内存问题的 DAG / 任务?
【发布时间】:2020-05-28 17:48:22
【问题描述】:

我们的 DAG 中的任务经常失败,在关注 Google 的 troubleshooting steps 之后,我发现根本原因是由于内存不足导致的内存驱逐。

这与我在 Composer Monitoring 选项卡中的每个节点的内存利用率图中看到的一致。我们的机器支持 8 GB 节点,最大峰值为 16 GB。

Screen shot of memory utilization per node graph, which shows memory spikes

我遇到的困难是确定哪些 DAG 导致了内存峰值。 (我的假设是“DAG A”可能导致内存峰值导致“DAG B”被驱逐)。我想重新审视一下代码,看看是否可以在增加机器大小之前对其进行优化。

如何连接这些点以了解给定 Kubernetes 节点在给定时间正在处理哪些任务?

【问题讨论】:

    标签: airflow google-kubernetes-engine google-cloud-composer


    【解决方案1】:

    如果您需要知道在给定时间内哪个 DAG 在哪个实例中运行,一种方法是使用 Airflow 元数据数据库。 为此,请按照以下步骤操作:

    1. 转到 GKE 页面并单击您的集群。
    2. 在您的集群页面中,单击页面顶部的连接按钮(在部署和复制之间)
    3. 将打开一个弹出窗口,其中包含两个选项。点击在 Cloud Shell 中运行。之后,将使用如下命令打开一个 Cloud Shell 实例。只需按 Enter 即可提交此命令。

      gcloud container clusters get-credentials <cluter_id> --zone <cluster_zone> --project <project_id>`
      
    4. 然后运行下面的命令部署一个临时的 MySQL 镜像

      kubectl run mysql-cli-tmp-deployment \
      --generator=run-pod/v1 \
      --rm --stdin --tty \
      --image mysql:latest \
      -- \
        bash
      
    5. 运行以下命令以连接到您的 MySQL 实例

      mysql \
      --user root \
      --host airflow-sqlproxy-service.default
      
    6. 现在您可以使用SHOW DATABASES; 来确定我们需要什么数据库。如果您使用新版本的 Composer,数据库名称将类似于 composer--airflow--。对于旧版本,名称将是 airflow-db。确定你的数据库后,输入命令use &lt;your_database&gt;;

    7. 现在如果你运行SHOW TABLES:,你会发现很多不同的信息。为了您的目的,我建议您运行select * from job limit 10; 通过运行此查询,您将看到该表包含许多有关任务的信息:DAG id、开始日期、结束日期、主机名(集群中的每个节点都有一个主机名)[...]

      李>
    8. 最后,作为最后一步,我想解释一下如何确定哪个主机名与哪个节点相关联。

      1. 转到 GKE 页面并点击 Workloads
      2. 点击airflow-worker
      3. 向下滚动到 Managed pods 部分,您将找到主机名。如果您单击其中任何一个,您将能够在下一页中看到其节点。

    借助这些信息,您将能够运行查询以确定在给定时间内哪个 DAG 在哪个实例中运行。

    【讨论】:

    • 跟进问题 - Composer Monitoring 选项卡将节点列为 18 位数字 ID。有没有办法查看该数字 ID 和主机名之间的关系?
    • @Jason,在最后一步中,我提出了一种方法。你可以吗?
    • 现在找到了。按照您在第 8 步中的说明找到我要查找的特定 ID,然后单击节点的链接,单击详细信息选项卡,然后查看注释 - container.googleapis.com/instance_id:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 2022-01-07
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多