REST API 1.2

REST API для Azure Databricks позволяет получать доступ к Azure Databricks с помощью программных средств, а не через веб-интерфейс.

В этой статье рассматривается REST API 1.2.

Важно!

Важно!

Чтобы получить доступ к REST API Databricks, необходимо пройти проверку подлинности.

Варианты использования REST API

  • Запуск заданий Apache Spark по сигналам из имеющихся рабочих систем или из систем рабочих процессов.
  • Создание кластера определенного размера в определенное время суток с последующим его отключением (например, ночью) с помощью программных средств.

Категории API

  • Контекст выполнения: создавайте уникальные пространства имен переменных, в которых можно вызывать команды Spark.
  • Выполнение команды: выполняйте команды в конкретном контексте выполнения.

Сведения

  • REST API работает по протоколу HTTPS.
  • Для получения информации используется запрос HTTP GET.
  • Для изменения состояния используется запрос HTTP POST.
  • Если нужно отправить файл, используйте multipart/form-data. В противном случае используйте application/json.
  • Ответ возвращается с типом содержимого JSON.
  • Для аутентификации пользователя при каждом вызове API используется обычная проверка подлинности.
  • Учетные данные пользователя кодируются в Base64 и размещаются в заголовке HTTP каждого вызова API. Например, Authorization: Basic YWRtaW46YWRtaW4=.

Начало работы

В следующих примерах замените <databricks-instance> URL-адресом рабочей области развертывания Azure Databricks.

Тестирование подключения

> telnet <databricks-instance> 443

Trying 52.11.163.202...
Connected to <databricks-instance>.
Escape character is '^]'.

> nc -v -z <databricks-instance> 443
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
    outif utun0
    src x.x.x.x port 59063
    dst y.y.y.y port 443
    rank info not available
    TCP aux info available

Connection to <databricks-instance> port 443 [TCP/HTTPS] succeeded!

Для проверки подключения можно использовать любой из указанных выше инструментов. Для HTTPS по умолчанию используется порт 443, и вы можете использовать его для REST API. Если к порту 443 не удается подключиться, обратитесь в службу (help@databricks.com) и укажите URL-адрес вашей учетной записи.

Примеры вызовов API

В следующих примерах представлено несколько команд cURL, но вы также можете использовать библиотеку HTTP используемого языка программирования.

Запрос GET

Если URL-адрес содержит символ &, необходимо заключить URL-адрес в кавычки, чтобы система UNIX не считала этот символ разделителем команд:

curl -n 'https://<databricks-instance>/api/1.2/commands/status?clusterId=batVenom&contextId=35585555555555&commandId=45382422555555555'

Запрос POST с типом application/json

curl -X POST -n https://<databricks-instance>/api/1.2/contexts/create -d "language=scala&clusterId=batVenom"

Конечные точки API по категориям

Контекст выполнения

  • https://<databricks-instance>/api/1.2/contexts/create создает контекст выполнения в указанном кластере для определенного языка программирования.

    • Запрос POST с типом application/json:
      • .

        {"language": "scala", "clusterId": "peaceJam"}
        
  • https://<databricks-instance>/api/1.2/contexts/status отображает состояние существующего контекста выполнения.

    • Запрос GET:
      • Аргументы для примера: clusterId=peaceJam&contextId=179365396413324
      • status: ["Pending", "Running", "Error"]
  • https://<databricks-instance>/api/1.2/contexts/destroy уничтожает контекст выполнения.

    • Запрос POST с типом application/json:
      • .

        {"contextId" : "1793653964133248955", "clusterId" : "peaceJam"}
        

Выполнение команды

Известные ограничения: выполнение команды не поддерживает %run.

  • https://<databricks-instance>/api/1.2/commands/execute выполняет команду или файл.

    • Запрос POST с типом application/json:

      • .

        {"language": "scala", "clusterId": "peaceJam", "contextId" : "5456852751451433082", "command": "sc.parallelize(1 to 10).collect"}
        
    • Запрос POST с типом multipart/form-data:

      • .

        {"language": "python", "clusterId": "peaceJam", "contextId" : "5456852751451433082"}
        
      • files

        {"command": "./myfile.py"}
        
  • https://<databricks-instance>/api/1.2/commands/status отображает состояние или результат одной команды.

    • Запрос GET
      • Аргументы для примера: clusterId=peaceJam&contextId=5456852751451433082&commandId=5220029674192230006
      • status:["Queued", "Running", "Cancelling", "Finished", "Cancelled", "Error"]
  • https://<databricks-instance>/api/1.2/commands/cancel отменяет одну команду.

    • Запрос POST с типом application/json:
      • .

        {"clusterId": "peaceJam", "contextId" : "5456852751451433082", "commandId" : "2245426871786618466"}
        

Пример Отправка и запуск JAR-файла Spark

Отправка JAR-файла

Используйте REST API 2.0, чтобы отправить JAR-файл и подключить его к кластеру.

Запуск JAR-файла

  1. Создайте контекст выполнения.

    curl -X POST -n  https://<databricks-instance>/api/1.2/contexts/create -d "language=scala&clusterId=batVenom"
    
    {
      "id": "3558513128163162828"
    }
    
  2. Выполните команду, которая использует JAR-файл.

    curl -X POST -n https://<databricks-instance>/api/1.2/commands/execute \
    -d 'language=scala&clusterId=batVenom&contextId=3558513128163162828&command=println(com.databricks.apps.logs.chapter1.LogAnalyzer.processLogFile(sc,null,"dbfs:/somefile.log"))'
    
    {
      "id": "4538242203822083978"
    }
    
  3. Проверьте состояние этой команды. Если выполняется длинное задание Spark, ответ будет получен не сразу.

    curl -n 'https://<databricks-instance>/api/1.2/commands/status?clusterId=batVenom&contextId=3558513128163162828&commandId=4538242203822083978'
    
    {
       "id": "4538242203822083978",
       "results": {
         "data": "Content Size Avg: 1234, Min: 1234, Max: 1234",
         "resultType": "text"
       },
       "status": "Finished"
    }