إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
في هذه المقالة، ستتعلم كيفية أتمتة العمليات في حسابات Azure Databricks ومساحات العمل والموارد ذات الصلة باستخدام Databricks SDK for Go. تكمل هذه المقالة Databricks SDK ل Go README ومرجع API والأمثلة.
إشعار
هذه الميزة في Beta ولا بأس من استخدامها في الإنتاج.
أثناء فترة بيتا، توصي Databricks بتثبيت تبعية على الإصدار الثانوي المحدد من Databricks SDK ل Go الذي تعتمد عليه التعليمات البرمجية الخاصة بك، على سبيل المثال، في ملف المشروع go.mod . لمزيد من المعلومات حول تثبيت التبعيات، راجع إدارة التبعيات.
قبل البدء
قبل البدء في استخدام Databricks SDK ل Go، يجب أن يحتوي جهاز التطوير الخاص بك على:
- انتقل مثبتا.
- تم تكوين مصادقة Azure Databricks.
بدء استخدام Databricks SDK ل Go
على جهاز التطوير الخاص بك مع تثبيت Go بالفعل، تم إنشاء مشروع تعليمة برمجية Go موجود بالفعل، وتكوين مصادقة Azure Databricks، قم بإنشاء
go.modملف لتتبع تبعيات التعليمات البرمجية Go الخاصة بك عن طريق تشغيلgo mod initالأمر، على سبيل المثال:go mod init sampleخذ تبعية على حزمة Databricks SDK ل Go عن طريق تشغيل
go mod edit -requireالأمر، واستبدال0.8.0بأحدث إصدار من حزمة Databricks SDK ل Go كما هو مدرج في CHANGELOG:go mod edit -require github.com/databricks/databricks-sdk-go@v0.8.0go.modيجب أن يبدو الملف الآن كما يلي:module sample go 1.18 require github.com/databricks/databricks-sdk-go v0.8.0ضمن مشروعك، قم بإنشاء ملف التعليمات البرمجية Go الذي يستورد Databricks SDK ل Go. المثال التالي، في ملف يسمى
main.goبالمحتويات التالية، يسرد جميع المجموعات في مساحة عمل 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) } }أضف أي تبعيات وحدة مفقودة
go mod tidyعن طريق تشغيل الأمر :go mod tidyإشعار
إذا تلقيت الخطأ
go: warning: "all" matched no packages، نسيت إضافة ملف التعليمات البرمجية Go الذي يستورد Databricks SDK ل Go.احصل على نسخ من جميع الحزم اللازمة لدعم بنيات واختبارات الحزم في الوحدة النمطية
go mod vendorالخاصة بكmain، عن طريق تشغيل الأمر :go mod vendorإعداد جهاز التطوير الخاص بك لمصادقة Azure Databricks.
قم بتشغيل ملف التعليمات البرمجية Go الخاص بك، بافتراض ملف يسمى
main.go، عن طريق تشغيلgo runالأمر :go run main.goإشعار
من خلال عدم تعيين
*databricks.Configكوسيطة في الاستدعاء السابق إلىw := databricks.Must(databricks.NewWorkspaceClient())، يستخدم Databricks SDK ل Go العملية الافتراضية لمحاولة تنفيذ مصادقة Azure Databricks. لتجاوز هذا السلوك الافتراضي، راجع مصادقة Databricks SDK ل Go باستخدام حساب Azure Databricks أو مساحة العمل الخاصة بك.
تحديث Databricks SDK ل Go
لتحديث مشروع Go لاستخدام إحدى حزم Databricks SDK ل Go كما هو موضح في CHANGELOG، قم بما يلي:
go getقم بتشغيل الأمر من جذر مشروعك، مع-uتحديد العلامة لإجراء تحديث، وتوفير الاسم ورقم الإصدار الهدف من حزمة Databricks SDK ل Go. على سبيل المثال، للتحديث إلى الإصدار0.12.0، قم بتشغيل الأمر التالي:go get -u github.com/databricks/databricks-sdk-go@v0.12.0إضافة وتحديث أي تبعيات وحدة نمطية مفقودة وعفا عليها الزمن عن طريق تشغيل
go mod tidyالأمر :go mod tidyاحصل على نسخ من جميع الحزم الجديدة والمحدثة اللازمة لدعم بنيات واختبارات الحزم في الوحدة النمطية
go mod vendorالخاصة بكmain، عن طريق تشغيل الأمر :go mod vendor
مصادقة Databricks SDK ل Go باستخدام حساب Azure Databricks أو مساحة العمل
ينفذ Databricks SDK for Go معيار المصادقة الموحد لعميل Databricks، وهو نهج معماري وبرنامجي موحد ومتسق للمصادقة. يساعد هذا الأسلوب على جعل إعداد المصادقة وأتمتتها باستخدام Azure Databricks أكثر مركزية وقابلية للتنبؤ. يمكنك من تكوين مصادقة Databricks مرة واحدة ثم استخدام هذا التكوين عبر أدوات Databricks متعددة وSDKs دون مزيد من تغييرات تكوين المصادقة. لمزيد من المعلومات، بما في ذلك أمثلة التعليمات البرمجية الأكثر اكتمالا في Go، راجع مصادقة عميل Databricks الموحدة.
تتضمن بعض أنماط الترميز المتوفرة لتهيئة مصادقة Databricks باستخدام Databricks SDK for Go ما يلي:
استخدم المصادقة الافتراضية ل Databricks عن طريق القيام بأحد الإجراءات التالية:
- إنشاء أو تحديد ملف تعريف تكوين Databricks مخصص مع الحقول المطلوبة لنوع مصادقة Databricks الهدف. ثم قم بتعيين
DATABRICKS_CONFIG_PROFILEمتغير البيئة إلى اسم ملف تعريف التكوين المخصص. - تعيين متغيرات البيئة المطلوبة لنوع مصادقة Databricks الهدف.
ثم قم بإنشاء مثيل على سبيل المثال لعنصر
WorkspaceClientمع مصادقة Databricks الافتراضية كما يلي:import ( "github.com/databricks/databricks-sdk-go" ) // ... w := databricks.Must(databricks.NewWorkspaceClient())- إنشاء أو تحديد ملف تعريف تكوين Databricks مخصص مع الحقول المطلوبة لنوع مصادقة Databricks الهدف. ثم قم بتعيين
الترميز المضمن للحاويات المطلوبة مدعوم ولكن غير مستحسن، لأنه يخاطر بكشف المعلومات الحساسة في التعليمات البرمجية الخاصة بك، مثل الرموز المميزة للوصول الشخصي ل Azure Databricks. المثال التالي للرموز الثابتة لمضيف Azure Databricks وقيم الرمز المميز للوصول لمصادقة رمز 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: "...", }))
راجع أيضا المصادقة في Databricks SDK ل Go README.
الأمثلة
توضح أمثلة التعليمات البرمجية التالية كيفية استخدام Databricks SDK ل Go لإنشاء وحذف المجموعات وتشغيل المهام وسرد مستخدمي الحساب. تستخدم أمثلة التعليمات البرمجية هذه Databricks SDK لعملية مصادقة Azure Databricks الافتراضية ل Go.
للحصول على أمثلة تعليمات برمجية إضافية، راجع مجلد الأمثلة في مستودع Databricks SDK ل Go في GitHub.
- إنشاء نظام مجموعة
- حذف مجموعة بشكل دائم
- تشغيل وظيفة
- إدارة الملفات في وحدات تخزين كتالوج Unity
- سرد مستخدمي الحساب
إنشاء نظام مجموعة
ينشئ مثال التعليمات البرمجية هذا نظام مجموعة مع أحدث إصدار متوفر من Databricks Runtime Support (LTS) وأصغر نوع عقدة نظام مجموعة متوفر مع قرص محلي. تحتوي هذه المجموعة على عامل واحد، وسيتم إنهاء المجموعة تلقائيا بعد 15 دقيقة من وقت الخمول. CreateAndWait يؤدي استدعاء الأسلوب إلى إيقاف التعليمات البرمجية مؤقتا حتى يتم تشغيل نظام المجموعة الجديد في مساحة العمل.
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
}
حذف مجموعة بشكل دائم
يحذف مثال التعليمات البرمجية هذا نظام المجموعة بمعرف نظام المجموعة المحدد من مساحة العمل بشكل دائم.
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)
}
}
تشغيل وظيفة
ينشئ مثال التعليمات البرمجية هذا مهمة Azure Databricks التي تقوم بتشغيل دفتر الملاحظات المحدد على نظام المجموعة المحدد. أثناء تشغيل التعليمات البرمجية، فإنه يحصل على مسار دفتر الملاحظات الحالي، ومعرف نظام المجموعة الحالي، وإعدادات المهمة ذات الصلة من المستخدم في المحطة الطرفية. RunNowAndWait يؤدي استدعاء الأسلوب إلى توقف التعليمات البرمجية مؤقتا حتى تنتهي المهمة الجديدة من العمل في مساحة العمل.
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)
}
إدارة الملفات في وحدات تخزين كتالوج Unity
يوضح مثال التعليمات البرمجية هذا استدعاءات مختلفة للوظائف files داخل WorkspaceClient للوصول إلى وحدة تخزين كتالوج Unity.
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,
},
)
}
سرد مستخدمي الحساب
يسرد مثال التعليمات البرمجية هذا المستخدمين المتاحين داخل حساب 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)
}
}
الموارد الإضافية
لمزيد من المعلومات، راجع:
- Databricks SDK ل Go README
- Databricks SDK لمرجع واجهة برمجة تطبيقات Go
- أمثلة التعليمات البرمجية الإضافية
- تسجيل
- اختبار
- عمليات طويلة الأمد
- الاستجابات المرقمة