#python #scala #apache-spark #databricks
#python #scala #apache-spark #блоки данных
Вопрос:
Я хотел бы провести некоторое тестирование производительности на Databricks. Для этого я хотел бы зарегистрировать, какой кластер (тип виртуальной машины, например, Standard_DS3_v2) Я использовал во время теста (мы можем предположить, что драйвер и рабочие узлы одинаковы). Я знаю, что мог бы зарегистрировать количество рабочих, количество ядер (по крайней мере, на драйвере) и объем памяти (по крайней мере, на драйвере). Тем не менее, я хотел бы знать тип виртуальной машины, поскольку я хочу иметь возможность определить, использовал ли я, например, кластер, оптимизированный для хранения, или кластер общего назначения. Вместо типа виртуальной машины эта информация также будет в порядке. Оптимально, я могу получить эту информацию в виде строки в переменной в записной книжке, чтобы позже записать ее в свой файл журнала оттуда вместе с другой информацией, которую я регистрирую. Тем не менее, я также доволен любым хакерским обходным путем, если для этого нет прямого решения.
Ответ №1:
Вы можете получить эту информацию из REST API через GET-запрос к Clusters API. Вы можете использовать контекст ноутбука для идентификации кластера, в котором работает ноутбук, с помощью dbutils.notebook.getContext
вызова, который возвращает карту различных атрибутов, включая идентификатор кластера, имя домена рабочей области, и вы можете извлечь из него токен аутентификации. Вот код, который печатает типы драйверов и рабочих узлов (он на Python, но код Scala должен быть знаком — я часто использую Scala dbutils.notebook.getContext.tags
, чтобы найти доступные теги):
import requests
ctx = dbutils.notebook.entry_point.getDbutils().notebook().getContext()
host_name = ctx.tags().get("browserHostName").get()
host_token = ctx.apiToken().get()
cluster_id = ctx.tags().get("clusterId").get()
response = requests.get(
f'https://{host_name}/api/2.0/clusters/get?cluster_id={cluster_id}',
headers={'Authorization': f'Bearer {host_token}'}
).json()
print(f"driver type={response['driver_node_type_id']} worker type={response['node_type_id']}")
Комментарии:
1. Отлично! Это решение также позволяет получать другую информацию, относящуюся к ведению журнала, из одного отдельного
response
объекта, например, нет рабочих, нет ядер кластера, памяти…