API REST 1.2

La API REST de Azure Databricks permite acceder mediante programación a Azure Databricks en lugar de pasar a través de la interfaz de usuario web.

En este artículo se describe la API REST 1.2.

Importante

Importante

Para acceder a las API REST de Databricks, es preciso autenticarse.

Casos de uso de la API REST

  • Inicie los trabajos de Apache Spark desencadenados desde los sistemas de producción existentes o desde sistemas de flujo de trabajo.
  • Muestre mediante programación un clúster de un tamaño determinado a una hora fija del día y, a continuación, apáguelo por la noche.

Categorías de la API

  • Contexto de ejecución: cree espacios de nombres variables únicos en los que se pueda llamar a los comandos de Spark.
  • Ejecución del comando: ejecute comandos dentro de un contexto de ejecución específico.

Detalles

  • Esta API REST se ejecuta mediante HTTPS.
  • Para recuperar información, use HTTP GET.
  • Para modificar el estado, use HTTP POST.
  • Para cargar archivos, use multipart/form-data. De lo contrario, use application/json.
  • El tipo de contenido de la respuesta es JSON.
  • La autenticación básica se usa para autenticar al usuario para cada llamada API.
  • Las credenciales de usuario están codificadas en Base64 y se encuentran en el encabezado HTTP para cada llamada API. Por ejemplo, Authorization: Basic YWRtaW46YWRtaW4=.

Introducción

En los ejemplos siguientes, reemplace <databricks-instance> por la dirección URL del área de trabajo de la implementación de Azure Databricks.

Prueba de la conexión

> 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!

Puede usar cualquiera de las herramientas anteriores para probar la conexión. El puerto 443 es el puerto HTTPS predeterminado y puede ejecutar la API REST en este puerto. Si no puede conectarse al puerto 443, póngase en contacto con help@databricks.com con la dirección URL de su cuenta.

Llamadas API de ejemplo

En los siguientes ejemplos encontrará varios comandos cURL, pero también puede usar una biblioteca HTTP en el lenguaje de programación que prefiera.

Solicitud GET

Si la dirección URL incluye el carácter &, debe entrecomillar esa dirección URL para que UNIX no la interprete como un separador de comandos:

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

Solicitud POST con application/json

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

Puntos de conexión de API por categoría

Contexto de ejecución

  • https://<databricks-instance>/api/1.2/contexts/create: crea un contexto de ejecución en un clúster especificado para un lenguaje de programación determinado.

    • Solicitud POST con application/json:
      • datos

        {"language": "scala", "clusterId": "peaceJam"}
        
  • https://<databricks-instance>/api/1.2/contexts/status: muestra el estado de un contexto de ejecución existente.

    • Solicitud GET:
      • Argumentos de ejemplo: clusterId=peaceJam&contextId=179365396413324
      • status: ["Pending", "Running", "Error"]
  • https://<databricks-instance>/api/1.2/contexts/destroy: destruye un contexto de ejecución.

    • Solicitud POST con application/json:
      • datos

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

Ejecución del comando

Limitaciones conocidas: la ejecución de comandos no admite %run.

  • https://<databricks-instance>/api/1.2/commands/execute : ejecuta un comando o un archivo.

    • Solicitud POST con application/json:

      • datos

        {"language": "scala", "clusterId": "peaceJam", "contextId" : "5456852751451433082", "command": "sc.parallelize(1 to 10).collect"}
        
    • Solicitud POST con multipart/form-data:

      • datos

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

        {"command": "./myfile.py"}
        
  • https://<databricks-instance>/api/1.2/commands/status: muestra el estado o el resultado de un comando.

    • Solicitud GET
      • Argumentos de ejemplo: clusterId=peaceJam&contextId=5456852751451433082&commandId=5220029674192230006
      • status:["Queued", "Running", "Cancelling", "Finished", "Cancelled", "Error"]
  • https://<databricks-instance>/api/1.2/commands/cancel: cancela un comando.

    • Solicitud POST con application/json:
      • datos

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

Ejemplo: Carga y ejecución de un archivo JAR de Spark

Carga de un JAR

Use la API REST 2.0 para cargar un archivo JAR y anexarlo a un clúster.

Ejecución de un archivo JAR

  1. Cree un contexto de ejecución.

    curl -X POST -n  https://<databricks-instance>/api/1.2/contexts/create -d "language=scala&clusterId=batVenom"
    
    {
      "id": "3558513128163162828"
    }
    
  2. Ejecute un comando que use el archivo 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. Compruebe el estado del comando. Es posible que no se devuelva inmediatamente si se ejecuta un trabajo de Spark de larga duración.

    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"
    }