Share via


SDK de Databricks para Go

En este artículo, aprenderá a automatizar las operaciones en cuentas, áreas de trabajo y recursos relacionados de Azure Databricks con el SDK de Databricks para Go. Este artículo sirve de complemento al archivo LÉAME, la referencia de API y los ejemplos del SDK de Databricks para Go.

Nota:

Esta característica está en fase beta y es posible usarla en producción.

Durante el período beta, Databricks recomienda anclar una dependencia de la versión secundaria específica del SDK de Databricks para Go de la que depende el código, por ejemplo, en un archivo de go.mod del proyecto. Para obtener más información sobre cómo anclar las dependencias, consulte Administración de dependencias.

Antes de empezar

Antes de empezar a usar el SDK de Databricks para Go, la máquina de desarrollo debe cumplir con lo siguiente:

  • Debe tener instalado Go.
  • Debe tener configurada la autenticación de Azure Databricks.

Introducción al SDK de Databricks para Go

  1. En una máquina de desarrollo con Go ya instalado, un proyecto de código de Go existente ya creado y la autenticación de Azure Databricks ya configurada, cree un archivo go.mod para hacer seguimiento de las dependencias del código de Go mediante la ejecución del comando go mod init; por ejemplo:

    go mod init sample
    
  2. Para tomar una dependencia del paquete del SDK de Databricks para Go, ejecute el comando go mod edit -require y reemplace 0.8.0 por la versión más reciente del paquete del SDK de Databricks para Go, que se muestra en CHANGELOG:

    go mod edit -require github.com/databricks/databricks-sdk-go@v0.8.0
    

    Ahora, el aspecto del archivo go.mod será parecido a este:

    module sample
    
    go 1.18
    
    require github.com/databricks/databricks-sdk-go v0.8.0
    
  3. En el proyecto, cree un archivo de código de Go que importe el SDK de Databricks para Go. En el ejemplo siguiente, en un archivo denominado main.go con el contenido siguiente, se enumeran todos los clústeres del área de trabajo de Azure Databricks:

    package main
    
    import (
      "context"
    
      "github.com/databricks/databricks-sdk-go"
      "github.com/databricks/databricks-sdk-go/service/compute"
    )
    
    func main() {
      w := databricks.Must(databricks.NewWorkspaceClient())
      all, err := w.Clusters.ListAll(context.Background(), compute.ListClustersRequest{})
      if err != nil {
        panic(err)
      }
      for _, c := range all {
        println(c.ClusterName)
      }
    }
    
  4. Ejecute el comando go mod tidy para agregar cualquier dependencia de módulo faltante:

    go mod tidy
    

    Nota:

    Si recibe el error go: warning: "all" matched no packages, se debe a que se le olvidó agregar un archivo de código de Go que importa el SDK de Databricks para Go.

  5. Ejecute el comando go mod vendor para obtener copias de todos los paquetes que se necesitan para admitir compilaciones y pruebas de paquetes en el módulo main:

    go mod vendor
    
  6. Configure la máquina de desarrollo para la autenticación de Azure Databricks.

  7. Ejecute el comando go run para ejecutar el archivo de código de Go (suponiendo que un archivo se denomina main.go):

    go run main.go
    

    Nota:

    Si no se establece *databricks.Config como argumento en la llamada anterior a w := databricks.Must(databricks.NewWorkspaceClient()), el SDK de Databricks para Go usa su proceso predeterminado para intentar la autenticación de Azure Databricks. Si desea invalidar este compartimiento predeterminado, consulte Autenticación del SDK de Databricks para Go con su cuenta o área de trabajo de Azure Databricks.

Actualizar el SDK de Databricks para Go

Para actualizar el proyecto de Go para usar uno de los paquetes del SDK de Databricks para Go, como se muestra en CHANGELOG, haga lo siguiente:

  1. Ejecute el comando go get desde la raíz del proyecto, especificando la marca -u para realizar una actualización y proporcionando el nombre y el número de versión de destino del paquete del SDK de Databricks para Go. Por ejemplo, para actualizar a la versión 0.12.0, ejecute el siguiente comando:

    go get -u github.com/databricks/databricks-sdk-go@v0.12.0
    
  2. Añada y actualice las dependencias de módulos que falten o que no estén actualizadas ejecutando el comando go mod tidy:

    go mod tidy
    
  3. Ejecute el comando go mod vendor para obtener copias de todos los paquetes nuevos y actualizados que se necesitan para admitir compilaciones y pruebas de paquetes en el módulo main:

    go mod vendor
    

Autenticación del SDK de Databricks para Go con su cuenta o área de trabajo de Azure Databricks

El SDK de Databricks para Go implementa el estándar de autenticación unificada del cliente de Databricks, un enfoque arquitectónico y programático consolidado y coherente para la autenticación. Este enfoque ayuda a configurar y automatizar la autenticación con Azure Databricks de manera más centralizada y predecible. Permite configurar la autenticación de Databricks una vez y, a continuación, usar esa configuración en varias herramientas y SDK de Databricks sin cambios adicionales en la configuración de autenticación. Para obtener más información, incluidos ejemplos de código más completos en Go, consulte Autenticación unificada del cliente de Databricks.

Entre los patrones de codificación disponibles para inicializar la autenticación de Databricks con el SDK de Databricks para Go se incluyen los siguientes:

  • Para usar la autenticación predeterminada de Databricks, siga uno de estos procedimientos:

    • Cree o identifique un perfil de configuración de Databricks personalizado con los campos necesarios para el tipo de autenticación de Databricks de destino. Luego establezca la variable de entorno DATABRICKS_CONFIG_PROFILE con el nombre del perfil de configuración personalizado.
    • Establezca las variables de entorno necesarias para el tipo de autenticación de Databricks de destino.

    A continuación, cree una instancia de un objeto WorkspaceClient, por ejemplo, con la autenticación predeterminada de Databricks como se indica a continuación:

    import (
      "github.com/databricks/databricks-sdk-go"
    )
    // ...
    w := databricks.Must(databricks.NewWorkspaceClient())
    
  • Aunque se admite la codificación rígida de los campos obligatorios, no se recomienda porque se corre el riesgo de exponer información confidencial en el código, como los tokens de acceso personal de Azure Databricks. En el ejemplo siguiente se integran como parte del código los valores de host y token de acceso de Azure Databricks para la autenticación de tokens de Databricks:

    import (
      "github.com/databricks/databricks-sdk-go"
      "github.com/databricks/databricks-sdk-go/config"
    )
    // ...
    w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
      Host:  "https://...",
      Token: "...",
    }))
    

Consulte también Autenticación en el archivo LÉAME del SDK de Databricks para Go.

Ejemplos

En los ejemplos de código siguientes se muestra cómo usar el SDK de Databricks para Go para crear y eliminar clústeres, ejecutar trabajos y enumerar los usuarios de la cuenta. Estos ejemplos de código utilizan el proceso de autenticación predeterminado de Azure Databricks del SDK de Databricks para Go.

Para más ejemplos de código, consulte la carpeta de ejemplos del repositorio del SDK de Databricks para Go en GitHub.

Crear un clúster

En este ejemplo de código, se crea un clúster con la versión de soporte técnico a largo plazo (LTS) de Databricks Runtime más reciente y el tipo de nodo de clúster más pequeño disponible con un disco local. Este clúster tiene un trabajo y el clúster se finalizará automáticamente después un tiempo de inactividad de 15 minutos. La llamada de método CreateAndWait pausa el código hasta que el clúster nuevo se ejecute en el área de trabajo.

package main

import (
  "context"
  "fmt"

  "github.com/databricks/databricks-sdk-go"
  "github.com/databricks/databricks-sdk-go/service/compute"
)

func main() {
  const clusterName            = "my-cluster"
  const autoTerminationMinutes = 15
  const numWorkers             = 1

  w   := databricks.Must(databricks.NewWorkspaceClient())
  ctx := context.Background()

  // Get the full list of available Spark versions to choose from.
  sparkVersions, err := w.Clusters.SparkVersions(ctx)

  if err != nil {
    panic(err)
  }

  // Choose the latest Long Term Support (LTS) version.
  latestLTS, err := sparkVersions.Select(compute.SparkVersionRequest{
    Latest:          true,
    LongTermSupport: true,
  })

  if err != nil {
    panic(err)
  }

  // Get the list of available cluster node types to choose from.
  nodeTypes, err := w.Clusters.ListNodeTypes(ctx)

  if err != nil {
    panic(err)
  }

  // Choose the smallest available cluster node type.
  smallestWithLocalDisk, err := nodeTypes.Smallest(clusters.NodeTypeRequest{
    LocalDisk: true,
  })

  if err != nil {
    panic(err)
  }

  fmt.Println("Now attempting to create the cluster, please wait...")

  runningCluster, err := w.Clusters.CreateAndWait(ctx, compute.CreateCluster{
    ClusterName:            clusterName,
    SparkVersion:           latestLTS,
    NodeTypeId:             smallestWithLocalDisk,
    AutoterminationMinutes: autoTerminationMinutes,
    NumWorkers:             numWorkers,
  })

  if err != nil {
    panic(err)
  }

  switch runningCluster.State {
  case compute.StateRunning:
    fmt.Printf("The cluster is now ready at %s#setting/clusters/%s/configuration\n",
      w.Config.Host,
      runningCluster.ClusterId,
    )
  default:
    fmt.Printf("Cluster is not running or failed to create. %s", runningCluster.StateMessage)
  }

  // Output:
  //
  // Now attempting to create the cluster, please wait...
  // The cluster is now ready at <workspace-host>#setting/clusters/<cluster-id>/configuration
}

Eliminación permanente de un usuario

En este ejemplo de código, se elimina permanentemente el clúster con el identificador de clúster especificado del área de trabajo.

package main

import (
  "context"

  "github.com/databricks/databricks-sdk-go"
  "github.com/databricks/databricks-sdk-go/service/clusters"
)

func main() {
  // Replace with your cluster's ID.
  const clusterId = "1234-567890-ab123cd4"

  w   := databricks.Must(databricks.NewWorkspaceClient())
  ctx := context.Background()

  err := w.Clusters.PermanentDelete(ctx, compute.PermanentDeleteCluster{
    ClusterId: clusterId,
  })

  if err != nil {
    panic(err)
  }
}

Ejecución de un trabajo

En este ejemplo de código, se crea un trabajo de Azure Databricks que ejecuta el cuaderno especificado en el clúster especificado. A medida que se ejecuta el código, obtiene la ruta de acceso del cuaderno existente, el identificador de clúster existente y la configuración del trabajo relacionado del usuario en el terminal. La llamada de método RunNowAndWait pausa el código hasta que el trabajo nuevo se termine de ejecutar en el área de trabajo.

package main

import (
  "bufio"
  "context"
  "fmt"
  "os"
  "strings"

  "github.com/databricks/databricks-sdk-go"
  "github.com/databricks/databricks-sdk-go/service/jobs"
)

func main() {
  w   := databricks.Must(databricks.NewWorkspaceClient())
  ctx := context.Background()

  nt := jobs.NotebookTask{
    NotebookPath: askFor("Workspace path of the notebook to run:"),
  }

  jobToRun, err := w.Jobs.Create(ctx, jobs.CreateJob{
    Name: askFor("Some short name for the job:"),
    Tasks: []jobs.JobTaskSettings{
      {
        Description:       askFor("Some short description for the job:"),
        TaskKey:           askFor("Some key to apply to the job's tasks:"),
        ExistingClusterId: askFor("ID of the existing cluster in the workspace to run the job on:"),
        NotebookTask:      &nt,
      },
    },
  })

  if err != nil {
    panic(err)
  }

  fmt.Printf("Now attempting to run the job at %s/#job/%d, please wait...\n",
    w.Config.Host,
    jobToRun.JobId,
  )

  runningJob, err := w.Jobs.RunNow(ctx, jobs.RunNow{
    JobId: jobToRun.JobId,
  })

  if err != nil {
    panic(err)
  }

  jobRun, err := runningJob.Get()

  if err != nil {
    panic(err)
  }

  fmt.Printf("View the job run results at %s/#job/%d/run/%d\n",
    w.Config.Host,
    jobRun.JobId,
    jobRun.RunId,
  )

  // Output:
  //
  // Now attempting to run the job at <workspace-host>/#job/<job-id>, please wait...
  // View the job run results at <workspace-host>/#job/<job-id>/run/<run-id>
}

// Get job settings from the user.
func askFor(prompt string) string {
  var s string
  r := bufio.NewReader(os.Stdin)
  for {
    fmt.Fprint(os.Stdout, prompt+" ")
    s, _ = r.ReadString('\n')
    if s != "" {
      break
    }
  }
  return strings.TrimSpace(s)
}

Enumerar los usuarios de la cuenta

Con el siguiente ejemplo de código se enumeran los usuarios disponibles en una cuenta de Azure Databricks.

package main

import (
  "context"

  "github.com/databricks/databricks-sdk-go"
  "github.com/databricks/databricks-sdk-go/service/iam"
)

func main() {
  a := databricks.Must(databricks.NewAccountClient())
  all, err := a.Users.ListAll(context.Background(), iam.ListAccountUsersRequest{})
  if err != nil {
    panic(err)
  }
  for _, u := range all {
    println(u.UserName)
  }
}

Recursos adicionales

Para más información, consulte: