我希望有一個監控和警報系統(使用 Datadog 等工具),可以從 Databricks 中的 Spark 應用程式獲取指標和日志。問題是,為了不必每天啟動、運行和殺死數百甚至數千個作業集群,最好將現有集群重新用于類似的資料提取作業。
為了從 Datadog 中的 Databricks 和 Spark 獲取指標,我嘗試了以下操作:
- 更改
SparkSession.builder.appName每個筆記本內的:不起作用,因為在集群啟動后無法更改它。默認情況下,它將始終為“Databricks Shell” - 設定集群范圍的標簽并在作業結束后取消設定 -> 并發發生時可能會導致標簽之間的不匹配。另外,我沒有找到在那里“附加”標簽的明確方法。
- 以某種方式從 Datadog 獲取 Databricks 的作業/運行 ID:我不知道如何執行此操作。
在我看來這是可行的,因為同一個 SparkSession 上的每個火花作業都有我的 Databricks 的作業/運行 ID 的名稱。我只需要了解如何在 Datadog 上識別它。
想法?為了實作這一目標,我可能會錯過任何愚蠢的事情嗎?
uj5u.com熱心網友回復:
這里有幾點:
- 當您使用現有集群來運行作業時,會產生更高的成本 - 自動化集群的成本為 15 美分/DBU,而互動式集群的成本為 56 美分/DBU
- 當您使用不同的庫等運行作業時,您可能會以庫沖突等結束。
- 您無法更改現有集群上的標簽
- 并發作業可能會影響彼此的性能
所以我真的建議使用單獨的自動化集群。如果要重用節點并縮短啟動時間,則可以使用實體池。
如果你想監控資源使用情況等,我建議你看守望先鋒專案,它能夠從不同來源收集資料,比如集群日志、API 等,然后構建關于性能、成本、等等。它的優點之一是您可以將成本、資源負載等歸因于用戶/筆記本/單個 Spark 作業。它不是“經典”的實時監控工具,但已經被許多客戶使用。
uj5u.com熱心網友回復:
我不確定我是否完全理解您的用例。但是您可以使用簡單的python代碼根據rest api獲取作業ID。
from pyspark.sql.types import IntegerType
from pyspark.sql.types import *
from pyspark.sql import Row
import base64
import requests
import json
databricks_instance ="<databricks-instances>"
url_list = f"{databricks_instance}/api/2.0/jobs/runs/get?run_id=39347"
headers = {
'Authorization': 'Bearer <databricks-access-token>',
'Content-Type': 'application/json'
}
response = requests.request("GET", url_list, headers=headers).json()
print(response)
print(response['job_id'])
print(response['start_time'])
print(response['end_time'])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/364791.html
