Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku se dozvíte, jak automatizovat operace Azure Databricks a zrychlit vývoj pomocí sady Databricks SDK for Go. Tento článek doplňuje sadu Databricks SDK for Go README, reference k rozhraní API a příklady.
Poznámka:
Tato funkce je v beta verzi a je v pořádku používat v produkčním prostředí.
Během beta období doporučuje Databricks připnout závislost na konkrétní podverzi sady Databricks SDK pro Go, na které váš kód závisí, například v souboru projektu go.mod . Další informace o připnutí závislostí najdete v tématu Správa závislostí.
Než začnete
Než začnete používat sadu Databricks SDK for Go, váš vývojový počítač musí mít:
- Go nainstalováno.
- Nakonfigurované ověřování Azure Databricks
Začínáme se sadou Databricks SDK for Go
Na vašem vývojovém počítači, kde už máte Go nainstalované, a kde již existuje projekt kódů Go vytvořený, a ověřování služby Azure Databricks je zakonfigurováno, vytvořte
go.modsoubor pro sledování závislostí vašeho Go kódu pomocí spuštěnígo mod initpříkazu, například:go mod init sampleSpuštěním příkazu zapněte
go mod edit -requirezávislost na balíčku Databricks SDK for Go a nahraďte0.8.0nejnovější verzí balíčku Databricks SDK for Go, jak je uvedeno v protokolu CHANGELOG:go mod edit -require github.com/databricks/databricks-sdk-go@v0.8.0Soubor
go.modby teď měl vypadat takto:module sample go 1.18 require github.com/databricks/databricks-sdk-go v0.8.0V projektu vytvořte soubor kódu Go, který naimportuje sadu Databricks SDK for Go. Následující příklad v souboru s následujícím
main.goobsahem obsahuje seznam všech clusterů v pracovním prostoru 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) } }Spuštěním
go mod tidypříkazu přidejte všechny chybějící závislosti modulu:go mod tidyPoznámka:
Pokud se zobrazí chyba
go: warning: "all" matched no packages, zapomněli jste přidat soubor kódu Go, který importuje sadu Databricks SDK pro Go.Spuštěním
mainpříkazu získejtego mod vendorkopie všech balíčků potřebných k podpoře sestavení a testů balíčků v modulu:go mod vendorNastavte svůj vývojový počítač pro ověřování Azure Databricks.
Spuštěním příkazu spusťte soubor kódu Go za předpokladu
main.go, že soubor s názvemgo run:go run main.goPoznámka:
Když v předchozím volání
*databricks.Confignenastavítew := databricks.Must(databricks.NewWorkspaceClient())jako argument , sada Databricks SDK for Go použije výchozí proces pro pokus o ověření Azure Databricks. Pokud chcete toto výchozí chování přepsat, přečtěte si téma Ověření sady Databricks SDK for Go pomocí účtu nebo pracovního prostoru Azure Databricks.
Aktualizace sady Databricks SDK pro Go
Pokud chcete aktualizovat projekt Go tak, aby používal jeden z balíčků Databricks SDK for Go, jak je uvedeno v protokolu CHANGELOG, postupujte takto:
go getSpusťte příkaz z kořenového adresáře projektu, zadejte-upříznak, který má provést aktualizaci, a zadejte název a číslo cílové verze balíčku Databricks SDK for Go. Pokud chcete například aktualizovat verzi0.12.0, spusťte následující příkaz:go get -u github.com/databricks/databricks-sdk-go@v0.12.0Spuštěním
go mod tidypříkazu přidejte a aktualizujte všechny chybějící a zastaralé závislosti modulů:go mod tidySpuštěním
mainpříkazu získejtego mod vendorkopie všech nových a aktualizovaných balíčků potřebných k podpoře sestavení a testů balíčků v modulu:go mod vendor
Ověření sady Databricks SDK for Go pomocí účtu nebo pracovního prostoru Azure Databricks
Sada Databricks SDK for Go implementuje jednotný ověřovací standard Databricks , konsolidovaný a konzistentní přístup k ověřování s architekturou a programovým přístupem. Tento přístup pomáhá zajistit centralizovanější a předvídatelnější nastavení a automatizaci ověřování pomocí Azure Databricks. Umožňuje konfigurovat ověřování Databricks jednou a pak tuto konfiguraci používat napříč několika nástroji a sadami SDK Databricks bez dalších změn konfigurace ověřování. Další informace, včetně kompletních příkladů kódu v Go, najdete v tématu Sjednocené ověřování Databricks.
Mezi dostupné vzory kódování pro inicializaci ověřování Databricks pomocí sady Databricks SDK pro Go patří:
Výchozí ověřování Databricks můžete použít jedním z následujících způsobů:
- Vytvořte nebo identifikujte vlastní konfigurační profil Databricks s požadovanými poli pro cílový typ ověřování Databricks. Potom nastavte proměnnou prostředí
DATABRICKS_CONFIG_PROFILEna název vlastního konfiguračního profilu. - Nastavte požadované proměnné prostředí pro cílový typ ověřování Databricks.
Pak vytvořte instanci objektu
WorkspaceClients výchozím ověřováním Databricks následujícím způsobem:import ( "github.com/databricks/databricks-sdk-go" ) // ... w := databricks.Must(databricks.NewWorkspaceClient())- Vytvořte nebo identifikujte vlastní konfigurační profil Databricks s požadovanými poli pro cílový typ ověřování Databricks. Potom nastavte proměnnou prostředí
Požadovaná pole se pevně zakódují, ale nedoporučuje se, protože riskuje zveřejnění citlivých informací v kódu, jako jsou osobní přístupové tokeny Azure Databricks. Následující příklad pevně kóduje hodnoty hostitele Azure Databricks a přístupového tokenu pro ověřování tokenů 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: "...", }))
Viz také Ověřování v sadě Databricks SDK for Go README.
Příklady
Následující příklady kódu ukazují, jak pomocí sady Databricks SDK for Go vytvářet a odstraňovat clustery, spouštět úlohy a vypisovat uživatele účtu. Tyto příklady kódu používají Azure Databricks SDK pro Go, jehož výchozí proces je ověřování.
Další příklady kódu najdete ve složce s příklady v úložišti Databricks SDK for Go na GitHubu.
- Vytvoření clusteru
- Trvalé odstranění clusteru
- Spuštění úlohy
- Správa souborů ve svazcích katalogu Unity
- Zobrazení seznamu uživatelů účtu
Vytvoření clusteru
Tento příklad kódu vytvoří cluster s nejnovější dostupnou verzí dlouhodobé podpory Databricks Runtime (LTS) a nejmenším dostupným typem uzlu clusteru s místním diskem. Tento cluster má jeden pracovní proces a cluster se automaticky ukončí po 15 minutách nečinnosti. Volání CreateAndWait metody způsobí, že se kód pozastaví, dokud v pracovním prostoru neběží nový cluster.
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
}
Trvalé odstranění clusteru
Tento příklad kódu trvale odstraní cluster se zadaným ID clusteru z pracovního prostoru.
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)
}
}
Spuštění úlohy
Tento příklad kódu vytvoří úlohu Azure Databricks, která spustí zadaný poznámkový blok v zadaném clusteru. Při spuštění kódu získá cestu existujícího poznámkového bloku, id existujícího clusteru a související nastavení úlohy od uživatele v terminálu. Volání RunNowAndWait metody způsobí pozastavení kódu, dokud se nová úloha nedokončí v pracovním prostoru.
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)
}
Správa souborů ve svazcích katalogu Unity
Tento příklad kódu ukazuje různá volání funkcionality files v rámci WorkspaceClient pro přístup ke svazku v Unity Catalog.
package main
import (
"context"
"io"
"os"
"github.com/databricks/databricks-sdk-go"
"github.com/databricks/databricks-sdk-go/service/files"
)
func main() {
w := databricks.Must(databricks.NewWorkspaceClient())
catalog := "main"
schema := "default"
volume := "my-volume"
volumePath := "/Volumes/" + catalog + "/" + schema + "/" + volume // /Volumes/main/default/my-volume
volumeFolder := "my-folder"
volumeFolderPath := volumePath + "/" + volumeFolder // /Volumes/main/default/my-volume/my-folder
volumeFile := "data.csv"
volumeFilePath := volumeFolderPath + "/" + volumeFile // /Volumes/main/default/my-volume/my-folder/data.csv
uploadFilePath := "./data.csv"
// Create an empty folder in a volume.
err := w.Files.CreateDirectory(
context.Background(),
files.CreateDirectoryRequest{DirectoryPath: volumeFolderPath},
)
if err != nil {
panic(err)
}
// Upload a file to a volume.
fileUpload, err := os.Open(uploadFilePath)
if err != nil {
panic(err)
}
defer fileUpload.Close()
w.Files.Upload(
context.Background(),
files.UploadRequest{
Contents: fileUpload,
FilePath: volumeFilePath,
Overwrite: true,
},
)
// List the contents of a volume.
items := w.Files.ListDirectoryContents(
context.Background(),
files.ListDirectoryContentsRequest{DirectoryPath: volumePath},
)
for {
if items.HasNext(context.Background()) {
item, err := items.Next(context.Background())
if err != nil {
break
}
println(item.Path)
} else {
break
}
}
// List the contents of a folder in a volume.
itemsFolder := w.Files.ListDirectoryContents(
context.Background(),
files.ListDirectoryContentsRequest{DirectoryPath: volumeFolderPath},
)
for {
if itemsFolder.HasNext(context.Background()) {
item, err := itemsFolder.Next(context.Background())
if err != nil {
break
}
println(item.Path)
} else {
break
}
}
// Print the contents of a file in a volume.
file, err := w.Files.DownloadByFilePath(
context.Background(),
volumeFilePath,
)
if err != nil {
panic(err)
}
bufDownload := make([]byte, file.ContentLength)
for {
file, err := file.Contents.Read(bufDownload)
if err != nil && err != io.EOF {
panic(err)
}
if file == 0 {
break
}
println(string(bufDownload[:file]))
}
// Delete a file from a volume.
w.Files.DeleteByFilePath(
context.Background(),
volumeFilePath,
)
// Delete a folder from a volume.
w.Files.DeleteDirectory(
context.Background(),
files.DeleteDirectoryRequest{
DirectoryPath: volumeFolderPath,
},
)
}
Zobrazení seznamu uživatelů účtu
Tento příklad kódu obsahuje seznam dostupných uživatelů v rámci účtu 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)
}
}
Řešení problémů
Tato část popisuje řešení běžných problémů se sadou Databricks SDK for Go.
Pokud chcete nahlásit problémy nebo jakoukoli jinou zpětnou vazbu, vytvořte problém GitHubu pro Sadu Databricks SDK pro Go.
Chyba: Odpověď nejde analyzovat
Pokud se při pokusu o použití sady Databricks SDK for Go zobrazí následující chyba, téměř vždy značí problém s konfigurací ověřování.
Error: unable to parse response. This is likely a bug in the Databricks SDK for Go or the underlying REST API.
Pokud dojde k této chybě, ověřte následující:
- Ujistěte se, že je váš hostitel Databricks správně nastavený.
- Ověřte, že metoda ověřování má požadovaná oprávnění pro operaci rozhraní API, kterou se pokoušíte provést.
- Pokud se nacházíte za podnikovou bránou firewall, ujistěte se, že neblokuje ani přesměrovává provoz rozhraní API.
Běžnou příčinou této chyby je přesměrování sady SDK na přihlašovací stránku, kterou sada SDK nemůže zpracovat. K tomu obvykle dochází při pokusu o přístup k pracovnímu prostoru s podporou privátního propojení nakonfigurovaného bez přístupu k veřejnému internetu z jiné sítě, než do které patří koncový bod VPC.
Další podrobnosti najdete tady:
Další materiály
Další informace naleznete v tématu:
- Databricks SDK for Go README
- Referenční informace k rozhraní API sady Databricks SDK for Go
- Další příklady kódu
- Protokolování
- Testování
- Dlouhotrvající operace
- Stránkované odpovědi