Zestaw SDK usługi Databricks dla języka Go

Z tego artykułu dowiesz się, jak zautomatyzować operacje na kontach, obszarach roboczych i powiązanych zasobach usługi Azure Databricks za pomocą zestawu SDK usługi Databricks dla języka Go. Ten artykuł uzupełnia zestaw SDK usługi Databricks dla języka Go README, dokumentacja interfejsu API i przykłady.

Uwaga

Ta funkcja jest dostępna w wersji beta i jest w porządku do użycia w środowisku produkcyjnym.

W okresie beta usługa Databricks zaleca przypięcie zależności od określonej pomocniczej wersji zestawu SDK usługi Databricks dla języka Go, od której zależy twój kod, na przykład w pliku projektu go.mod . Aby uzyskać więcej informacji na temat przypinania zależności, zobacz Zarządzanie zależnościami.

Zanim rozpoczniesz

Przed rozpoczęciem korzystania z zestawu SDK usługi Databricks dla języka Go maszyna deweloperna musi mieć następujące elementy:

Wprowadzenie do zestawu SDK usługi Databricks dla języka Go

  1. Na maszynie deweloperskiej z już zainstalowanym językiem Go istniejący projekt kodu języka Go został już utworzony, a skonfigurowany uwierzytelnianie usługi Azure Databricks utwórz go.mod plik w celu śledzenia zależności kodu języka Go, uruchamiając go mod init polecenie, na przykład:

    go mod init sample
    
  2. Pobierz zależność od pakietu Zestawu SDK usługi Databricks dla języka Go, uruchamiając go mod edit -require0.8.0 polecenie, zastępując element najnowszą wersją pakietu Sdk usługi Databricks dla języka Go, jak pokazano w pliku CHANGELOG:

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

    Plik go.mod powinien teraz wyglądać następująco:

    module sample
    
    go 1.18
    
    require github.com/databricks/databricks-sdk-go v0.8.0
    
  3. W projekcie utwórz plik kodu języka Go, który importuje zestaw SDK usługi Databricks dla języka Go. Poniższy przykład w pliku o nazwie o następującej main.go zawartości zawiera listę wszystkich klastrów w obszarze roboczym usługi 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. Dodaj wszystkie brakujące zależności modułu go mod tidy , uruchamiając polecenie :

    go mod tidy
    

    Uwaga

    Jeśli wystąpi błąd go: warning: "all" matched no packages, nie pamiętasz dodania pliku kodu języka Go, który importuje zestaw SDK usługi Databricks dla języka Go.

  5. Pobierz kopie wszystkich pakietów wymaganych do obsługi kompilacji i testów pakietów w main module, uruchamiając go mod vendor polecenie :

    go mod vendor
    
  6. Skonfiguruj maszynę dewelopera na potrzeby uwierzytelniania usługi Azure Databricks.

  7. Uruchom plik kodu języka Go, zakładając, że plik o nazwie main.go, uruchamiając go run polecenie :

    go run main.go
    

    Uwaga

    Nie ustawiając *databricks.Config jako argumentu w poprzednim wywołaniu metody w := databricks.Must(databricks.NewWorkspaceClient()), zestaw SDK usługi Databricks dla języka Go używa domyślnego procesu do próby przeprowadzenia uwierzytelniania w usłudze Azure Databricks. Aby zastąpić to domyślne zachowanie, zobacz Uwierzytelnianie zestawu SDK usługi Databricks dla języka Go przy użyciu konta lub obszaru roboczego usługi Azure Databricks.

Aktualizowanie zestawu SDK usługi Databricks dla języka Go

Aby zaktualizować projekt Języka Go, aby użyć jednego z pakietów zestawu SDK usługi Databricks dla języka Go zgodnie z listą CHANGELOG, wykonaj następujące czynności:

  1. go get Uruchom polecenie z katalogu głównego projektu, określając -u flagę, aby przeprowadzić aktualizację, oraz podając nazwę i numer wersji docelowej zestawu SDK usługi Databricks dla języka Go. Na przykład, aby zaktualizować do wersji 0.12.0, uruchom następujące polecenie:

    go get -u github.com/databricks/databricks-sdk-go@v0.12.0
    
  2. Dodaj i zaktualizuj wszystkie brakujące i nieaktualne zależności modułu go mod tidy , uruchamiając polecenie :

    go mod tidy
    
  3. Pobierz kopie wszystkich nowych i zaktualizowanych pakietów potrzebnych do obsługi kompilacji i testów pakietów w main module, uruchamiając go mod vendor polecenie:

    go mod vendor
    

Uwierzytelnianie zestawu SDK usługi Databricks dla języka Go przy użyciu konta lub obszaru roboczego usługi Azure Databricks

Zestaw SDK usługi Databricks dla języka Go implementuje ujednolicony standard uwierzytelniania klienta usługi Databricks, skonsolidowane i spójne podejście architektoniczne i programowe do uwierzytelniania . Takie podejście pomaga w konfigurowaniu i automatyzowaniu uwierzytelniania za pomocą usługi Azure Databricks bardziej scentralizowanego i przewidywalnego. Umożliwia ona skonfigurowanie uwierzytelniania usługi Databricks raz, a następnie użycie tej konfiguracji w wielu narzędziach i zestawach SDK usługi Databricks bez dalszych zmian konfiguracji uwierzytelniania. Aby uzyskać więcej informacji, w tym bardziej kompletne przykłady kodu w języku Go, zobacz Ujednolicone uwierzytelnianie klienta usługi Databricks.

Niektóre z dostępnych wzorców kodowania do inicjowania uwierzytelniania usługi Databricks przy użyciu zestawu SDK usługi Databricks dla języka Go obejmują:

  • Użyj domyślnego uwierzytelniania usługi Databricks, wykonując jedną z następujących czynności:

    • Utwórz lub zidentyfikuj niestandardowy profil konfiguracji usługi Databricks z wymaganymi polami dla docelowego typu uwierzytelniania usługi Databricks. Następnie ustaw zmienną DATABRICKS_CONFIG_PROFILE środowiskową na nazwę niestandardowego profilu konfiguracji.
    • Ustaw wymagane zmienne środowiskowe dla docelowego typu uwierzytelniania usługi Databricks.

    Następnie utwórz wystąpienie obiektu z domyślnym uwierzytelnianiem WorkspaceClient usługi Databricks w następujący sposób:

    import (
      "github.com/databricks/databricks-sdk-go"
    )
    // ...
    w := databricks.Must(databricks.NewWorkspaceClient())
    
  • Kodowanie na stałe wymaganych pól jest obsługiwane, ale nie jest zalecane, ponieważ ryzykuje ujawnienie poufnych informacji w kodzie, takich jak osobiste tokeny dostępu usługi Azure Databricks. Poniższy przykład koduje twarde wartości hosta i tokenu dostępu usługi Azure Databricks dla uwierzytelniania tokenu usługi 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: "...",
    }))
    

Zobacz również artykuł Authentication in the Databricks SDK for Go README (Uwierzytelnianie w zestawie SDK usługi Databricks dla języka Go README).

Przykłady

W poniższych przykładach kodu pokazano, jak używać zestawu SDK usługi Databricks dla języka Go do tworzenia i usuwania klastrów, uruchamiania zadań i wyświetlania listy użytkowników kont. Te przykłady kodu używają zestawu SDK usługi Databricks do domyślnego procesu uwierzytelniania usługi Azure Databricks w języku Go.

Aby uzyskać dodatkowe przykłady kodu, zobacz folder examples w repozytorium Zestawu SDK usługi Databricks dla języka Go w usłudze GitHub.

Tworzenie klastra

Ten przykładowy kod tworzy klaster z najnowszą dostępną wersją środowiska Databricks Runtime Long Term Support (LTS) i najmniejszym dostępnym typem węzła klastra z dyskiem lokalnym. Ten klaster ma jeden proces roboczy, a klaster zostanie automatycznie zakończony po upływie 15 minut bezczynności. Wywołanie CreateAndWait metody powoduje wstrzymanie kodu do momentu uruchomienia nowego klastra w obszarze roboczym.

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
}

Trwałe usuwanie klastra

Ten przykład kodu trwale usuwa klaster z określonym identyfikatorem klastra z obszaru roboczego.

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

Uruchamianie zadania

Ten przykładowy kod tworzy zadanie usługi Azure Databricks, które uruchamia określony notes w określonym klastrze. W miarę uruchamiania kodu pobiera on ścieżkę istniejącego notesu, istniejący identyfikator klastra i powiązane ustawienia zadania od użytkownika w terminalu. Wywołanie RunNowAndWait metody powoduje wstrzymanie kodu do momentu zakończenia nowego zadania w obszarze roboczym.

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

Wyświetlanie listy użytkowników kont

Ten przykładowy kod zawiera listę dostępnych użytkowników na koncie usługi 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)
  }
}

Dodatkowe zasoby

Aby uzyskać więcej informacji, zobacz: