Databricks SDK for Go

في هذه المقالة، ستتعلم كيفية أتمتة العمليات في حسابات Azure Databricks ومساحات العمل والموارد ذات الصلة باستخدام Databricks SDK for Go. تكمل هذه المقالة Databricks SDK ل Go README ومرجع API والأمثلة.

إشعار

هذه الميزة في Beta ولا بأس من استخدامها في الإنتاج.

أثناء فترة بيتا، توصي Databricks بتثبيت تبعية على الإصدار الثانوي المحدد من Databricks SDK ل Go الذي تعتمد عليه التعليمات البرمجية الخاصة بك، على سبيل المثال، في ملف المشروع go.mod . لمزيد من المعلومات حول تثبيت التبعيات، راجع إدارة التبعيات.

قبل البدء

قبل البدء في استخدام Databricks SDK ل Go، يجب أن يحتوي جهاز التطوير الخاص بك على:

بدء استخدام Databricks SDK ل Go

  1. على جهاز التطوير الخاص بك مع تثبيت Go بالفعل، تم إنشاء مشروع تعليمة برمجية Go موجود بالفعل، وتكوين مصادقة Azure Databricks، قم بإنشاء go.mod ملف لتتبع تبعيات التعليمات البرمجية Go الخاصة بك عن طريق تشغيل go mod init الأمر، على سبيل المثال:

    go mod init sample
    
  2. خذ تبعية على حزمة 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.0
    

    go.mod يجب أن يبدو الملف الآن كما يلي:

    module sample
    
    go 1.18
    
    require github.com/databricks/databricks-sdk-go v0.8.0
    
  3. ضمن مشروعك، قم بإنشاء ملف التعليمات البرمجية 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)
      }
    }
    
  4. أضف أي تبعيات وحدة مفقودة go mod tidy عن طريق تشغيل الأمر :

    go mod tidy
    

    إشعار

    إذا تلقيت الخطأ go: warning: "all" matched no packages، نسيت إضافة ملف التعليمات البرمجية Go الذي يستورد Databricks SDK ل Go.

  5. احصل على نسخ من جميع الحزم اللازمة لدعم بنيات واختبارات الحزم في الوحدة النمطية go mod vendor الخاصة بكmain، عن طريق تشغيل الأمر :

    go mod vendor
    
  6. إعداد جهاز التطوير الخاص بك لمصادقة Azure Databricks.

  7. قم بتشغيل ملف التعليمات البرمجية 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، قم بما يلي:

  1. go get قم بتشغيل الأمر من جذر مشروعك، مع -u تحديد العلامة لإجراء تحديث، وتوفير الاسم ورقم الإصدار الهدف من حزمة Databricks SDK ل Go. على سبيل المثال، للتحديث إلى الإصدار 0.12.0، قم بتشغيل الأمر التالي:

    go get -u github.com/databricks/databricks-sdk-go@v0.12.0
    
  2. إضافة وتحديث أي تبعيات وحدة نمطية مفقودة وعفا عليها الزمن عن طريق تشغيل go mod tidy الأمر :

    go mod tidy
    
  3. احصل على نسخ من جميع الحزم الجديدة والمحدثة اللازمة لدعم بنيات واختبارات الحزم في الوحدة النمطية 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())
    
  • الترميز المضمن للحاويات المطلوبة مدعوم ولكن غير مستحسن، لأنه يخاطر بكشف المعلومات الحساسة في التعليمات البرمجية الخاصة بك، مثل الرموز المميزة للوصول الشخصي ل 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.

إنشاء نظام مجموعة

ينشئ مثال التعليمات البرمجية هذا نظام مجموعة مع أحدث إصدار متوفر من 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)
}

سرد مستخدمي الحساب

يسرد مثال التعليمات البرمجية هذا المستخدمين المتاحين داخل حساب 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)
  }
}

الموارد الإضافية

لمزيد من المعلومات، راجع: