الاتصال ب Azure Blob Storage باستخدام WASB (قديم)

قامت Microsoft بإيقاف برنامج تشغيل Windows Azure Storage Blob (WASB) لتخزين Azure Blob لصالح برنامج تشغيل نظام ملفات Azure Blob (ABFS)؛ راجع الاتصال ب Azure Data Lake Storage Gen2 وBlob Storage. يتمتع ABFS بالعديد من الفوائد على WASB؛ راجع وثائق Azure على ABFS.

توفر هذه المقالة وثائق للحفاظ على التعليمات البرمجية التي تستخدم برنامج تشغيل WASB. توصي Databricks باستخدام ABFS لجميع الاتصالات ب Azure Blob Storage.

تكوين بيانات اعتماد WASB في Databricks

يسمح لك برنامج تشغيل WASB باستخدام مفتاح الوصول إلى حساب التخزين أو توقيع الوصول المشترك (SAS). (إذا كنت تقرأ البيانات من حساب تخزين عام، فلن تحتاج إلى تكوين بيانات الاعتماد).

توصي Databricks باستخدام الأسرار كلما احتجت إلى تمرير بيانات الاعتماد في Azure Databricks. البيانات السرية متاحة لجميع المستخدمين الذين لديهم حق الوصول إلى النطاق السري المحتوي.

يمكنك تمرير بيانات الاعتماد:

  • نطاق المجموعة في تكوين Spark
  • نطاق دفتر الملاحظات
  • مرفق بدليل مثبت

توصي Databricks بترقية جميع اتصالاتك لاستخدام ABFS للوصول إلى Azure Blob Storage، والذي يوفر أنماط وصول مشابهة مثل WASB. استخدم ABFS للحصول على أفضل أمان وأداء عند التفاعل مع Azure Blob Storage.

لتكوين بيانات اعتماد نظام المجموعة، قم بتعيين خصائص تكوين Spark عند إنشاء نظام المجموعة. تتوفر بيانات الاعتماد التي تم تعيينها على مستوى نظام المجموعة لجميع المستخدمين الذين لديهم حق الوصول إلى تلك المجموعة.

لتكوين بيانات الاعتماد ذات نطاق دفتر الملاحظات، استخدم spark.conf.set(). تتوفر بيانات الاعتماد التي تم تمريرها على مستوى دفتر الملاحظات لجميع المستخدمين الذين لديهم حق الوصول إلى دفتر الملاحظات هذا.

تعيين بيانات اعتماد Azure Blob Storage باستخدام مفتاح الوصول إلى حساب التخزين

يمنح مفتاح الوصول إلى حساب التخزين الوصول الكامل إلى جميع الحاويات داخل حساب التخزين. في حين أن هذا النمط مفيد للنماذج الأولية، تجنب استخدامه في الإنتاج لتقليل المخاطر المرتبطة بمنح الوصول غير المقيد إلى بيانات الإنتاج.

spark.conf.set(
  "fs.azure.account.key.<storage-account-name>.blob.core.windows.net",
  "<storage-account-access-key>"
)

يمكنك ترقية معرفات URI لمفتاح الحساب لاستخدام ABFS. لمزيد من المعلومات، راجع الاتصال ب Azure Data Lake Storage Gen2 وBlob Storage.

تعيين بيانات اعتماد Azure Blob Storage باستخدام توقيع الوصول المشترك (SAS)

يمكنك استخدام رموز SAS المميزة لتكوين وصول محدود إلى حاوية واحدة في حساب تخزين تنتهي صلاحيته في وقت معين.

spark.conf.set(
  "fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net",
  "<sas-token-for-container>"
)

الوصول إلى Azure Blob Storage باستخدام واجهة برمجة تطبيقات DataFrame

يمكن لواجهة برمجة تطبيقات Apache Spark DataFrame استخدام بيانات الاعتماد التي تم تكوينها على مستوى دفتر الملاحظات أو نظام المجموعة. تحدد جميع معرفات URI لبرنامج تشغيل WASB أسماء حسابات الحاوية والتخزين. اسم الدليل اختياري، ويمكن تحديد دلائل متداخلة متعددة بالنسبة للحاوية.

wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>

توضح أمثلة التعليمات البرمجية التالية كيف يمكنك استخدام مرجع DataFrames API وDatabricks Utilities (dbutils) للتفاعل مع دليل مسمى داخل حاوية.

df = spark.read.format("parquet").load("wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>")

dbutils.fs.ls("wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>")

لتحديث ABFS بدلا من WASB، قم بتحديث معرفات URI الخاصة بك. لمزيد من المعلومات، راجع Access Azure storage

الوصول إلى Azure Blob Storage باستخدام SQL

لا يمكن الوصول إلى بيانات الاعتماد التي تم تعيينها في تكوين جلسة دفتر الملاحظات لدفاتر الملاحظات التي تقوم بتشغيل Spark SQL.

بعد إعداد مفتاح الوصول إلى الحساب أو SAS في تكوين نظام المجموعة، يمكنك استخدام استعلامات Spark SQL القياسية مع Azure Blob Storage:

-- SQL
CREATE DATABASE <db-name>
LOCATION "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/";

لتحديث ABFS بدلا من WASB، قم بتحديث معرفات URI الخاصة بك؛ راجع الوصول إلى تخزين Azure

تحميل حاويات Azure Blob Storage إلى DBFS

يمكنك تحميل حاوية Azure Blob Storage أو مجلد داخل حاوية إلى DBFS. للحصول على توصيات Databricks، راجع تحميل تخزين كائن السحابة على Azure Databricks.

هام

  • يدعم تخزين Azure Blob ثلاثة أنواع من الكائنات الثنائية كبيرة الحجم: الكتلة والإلحاق والصفحة. يمكنك فقط تحميل الكائنات الثنائية كبيرة الحجم للكتلة إلى DBFS.
  • جميع المستخدمين لديهم حق الوصول للقراءة والكتابة إلى الكائنات في حاويات تخزين Blob المثبتة على DBFS.
  • بعد إنشاء نقطة تحميل من خلال نظام مجموعة، يمكن لمستخدمي نظام المجموعة هذا الوصول على الفور إلى نقطة التحميل. لاستخدام نقطة التحميل في نظام مجموعة آخر قيد التشغيل، يجب تشغيل dbutils.fs.refreshMounts() على نظام المجموعة قيد التشغيل لتوفير نقطة التحميل التي تم إنشاؤها حديثا.

يستخدم DBFS بيانات الاعتماد التي تقدمها عند إنشاء نقطة التحميل للوصول إلى حاوية تخزين Blob المثبتة. إذا تم تحميل حاوية تخزين Blob باستخدام مفتاح الوصول إلى حساب التخزين، يستخدم DBFS رموز SAS المميزة المؤقتة المشتقة من مفتاح حساب التخزين عند الوصول إلى نقطة التحميل هذه.

تحميل حاوية تخزين Azure Blob

توصي Databricks باستخدام ABFS بدلا من WASB. لمزيد من المعلومات حول التركيب باستخدام ABFS، راجع: Mount ADLS Gen2 أو Blob Storage مع ABFS.

  1. لتحميل حاوية تخزين Blob أو مجلد داخل حاوية، استخدم الأمر التالي:

    Python

    dbutils.fs.mount(
      source = "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net",
      mount_point = "/mnt/<mount-name>",
      extra_configs = {"<conf-key>":dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")})
    

    Scala

    dbutils.fs.mount(
      source = "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>",
      mountPoint = "/mnt/<mount-name>",
      extraConfigs = Map("<conf-key>" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")))
    

    حيث

    • <storage-account-name> هو اسم حساب تخزين Azure Blob الخاص بك.
    • <container-name> هو اسم حاوية في حساب تخزين Azure Blob الخاص بك.
    • <mount-name> هو مسار DBFS يمثل مكان تحميل حاوية تخزين Blob أو مجلد داخل الحاوية (المحدد في source) في DBFS.
    • <conf-key> يمكن أن يكون إما fs.azure.account.key.<storage-account-name>.blob.core.windows.net أو fs.azure.sas.<container-name>.<storage-account-name>.blob.core.windows.net
    • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")يحصل على المفتاح الذي تم تخزينه كسر في نطاق سري.
  2. الوصول إلى الملفات في الحاوية كما لو كانت ملفات محلية، على سبيل المثال:

    Python

    # python
    df = spark.read.format("text").load("/mnt/<mount-name>/...")
    df = spark.read.format("text").load("dbfs:/<mount-name>/...")
    

    Scala

    // scala
    val df = spark.read.format("text").load("/mnt/<mount-name>/...")
    val df = spark.read.format("text").load("dbfs:/<mount-name>/...")
    

    SQL

    -- SQL
    CREATE DATABASE <db-name>
    LOCATION "/mnt/<mount-name>"