الوصول إلى Azure Data Lake Storage Gen1 من Azure Databricks

أعلنت Microsoft عن الإيقاف المخطط ل Azure Data Lake Storage Gen1 (المعروف سابقا باسم Azure Data Lake Store، المعروف أيضا باسم ADLS) وتوصي جميع المستخدمين بالترحيل إلى Azure Data Lake Storage Gen2. توصي Databricks بالترقية إلى Azure Data Lake Storage Gen2 للحصول على أفضل أداء وميزات جديدة.

هناك طريقتان للوصول إلى Azure Data Lake Storage Gen1:

  1. قم بتمرير بيانات اعتماد معرف Microsoft Entra (المعروف سابقا باسم Azure Active Directory)، والمعروفة أيضا باسم تمرير بيانات الاعتماد.
  2. استخدم كيان الخدمة مباشرة.

الوصول تلقائيا باستخدام بيانات اعتماد معرف Microsoft Entra (المعروف سابقا ب Azure Active Directory)

يمكنك المصادقة تلقائيا على Azure Data Lake Storage Gen1 من مجموعات Azure Databricks باستخدام نفس هوية معرف Microsoft Entra التي تستخدمها لتسجيل الدخول إلى Azure Databricks. عند تمكين نظام المجموعة الخاص بك لتمرير بيانات اعتماد معرف Microsoft Entra، ستتمكن الأوامر التي تقوم بتشغيلها على نظام المجموعة هذا من قراءة بياناتك وكتابتها في Azure Data Lake Storage Gen1 دون مطالبتك بتكوين بيانات اعتماد كيان الخدمة للوصول إلى التخزين.

للحصول على إرشادات الإعداد والاستخدام الكاملة، راجع Access Azure Data Lake Storage باستخدام Microsoft Entra ID (المعروف سابقا ب Azure Active Directory) credential passthrough (legacy).

إنشاء أذونات ومنحها لكيان الخدمة

إذا كانت طريقة الوصول المحددة تتطلب كيان خدمة بأذونات كافية، ولم يكن لديك واحد، فاتبع الخطوات التالية:

  1. إنشاء تطبيق Microsoft Entra ID (المعروف سابقا ب Azure Active Directory) ومدير الخدمة الذي يمكنه الوصول إلى الموارد. لاحظ الخصائص التالية:
    • application-id: معرف يعرف تطبيق العميل بشكل فريد.
    • directory-id: معرف يعرف مثيل معرف Microsoft Entra بشكل فريد.
    • service-credential: سلسلة يستخدمها التطبيق لإثبات هويته.
  2. تسجيل كيان الخدمة، ومنح تعيين الدور الصحيح، مثل المساهم، على حساب Azure Data Lake Storage Gen1.

الوصول مباشرة باستخدام واجهات برمجة تطبيقات Spark باستخدام كيان الخدمة وOAuth 2.0

للقراءة من حساب Azure Data Lake Storage Gen1، يمكنك تكوين Spark لاستخدام بيانات اعتماد الخدمة مع القصاصة البرمجية التالية في دفتر ملاحظاتك:

spark.conf.set("fs.adl.oauth2.access.token.provider.type", "ClientCredential")
spark.conf.set("fs.adl.oauth2.client.id", "<application-id>")
spark.conf.set("fs.adl.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"))
spark.conf.set("fs.adl.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

حيث

  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")يسترد مفتاح الوصول إلى حساب التخزين الذي تم تخزينه كبيانات سرية في نطاق سري.

بعد إعداد بيانات الاعتماد الخاصة بك، يمكنك استخدام واجهات برمجة تطبيقات Spark وDatabricks القياسية للوصول إلى الموارد. على سبيل المثال:

val df = spark.read.format("parquet").load("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")

dbutils.fs.ls("adl://<storage-resource>.azuredatalakestore.net/<directory-name>")

يوفر Azure Data Lake Storage Gen1 التحكم في الوصول على مستوى الدليل، لذلك يجب أن يكون لمدير الخدمة حق الوصول إلى الدلائل التي تريد القراءة منها بالإضافة إلى مورد Azure Data Lake Storage Gen1.

الوصول من خلال metastore

للوصول إلى adl:// المواقع المحددة في metastore، يجب تحديد خيارات تكوين بيانات اعتماد Hadoop كخيارات Spark عند إنشاء نظام المجموعة عن طريق إضافة البادئة spark.hadoop. إلى مفاتيح تكوين Hadoop المقابلة لنشرها إلى تكوينات Hadoop المستخدمة من قبل metastore:

spark.hadoop.fs.adl.oauth2.access.token.provider.type ClientCredential
spark.hadoop.fs.adl.oauth2.client.id <application-id>
spark.hadoop.fs.adl.oauth2.credential <service-credential>
spark.hadoop.fs.adl.oauth2.refresh.url https://login.microsoftonline.com/<directory-id>/oauth2/token

تحذير

  • تتوفر بيانات الاعتماد هذه لجميع المستخدمين الذين يصلون إلى نظام المجموعة.

تحميل مورد أو مجلد Azure Data Lake Storage Gen1

لتحميل مورد Azure Data Lake Storage Gen1 أو مجلد بداخله، استخدم الأمر التالي:

Python

configs = {"fs.adl.oauth2.access.token.provider.type": "ClientCredential",
          "fs.adl.oauth2.client.id": "<application-id>",
          "fs.adl.oauth2.credential": dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"),
          "fs.adl.oauth2.refresh.url": "https://login.microsoftonline.com/<directory-id>/oauth2/token"}

# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "adl://<storage-resource>.azuredatalakestore.net/<directory-name>",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)

التطوير

val configs = Map(
  "fs.adl.oauth2.access.token.provider.type" -> "ClientCredential",
  "fs.adl.oauth2.client.id" -> "<application-id>",
  "fs.adl.oauth2.credential" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"),
  "fs.adl.oauth2.refresh.url" -> "https://login.microsoftonline.com/<directory-id>/oauth2/token")

// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "adl://<storage-resource>.azuredatalakestore.net/<directory-name>",
  mountPoint = "/mnt/<mount-name>",
  extraConfigs = configs)

حيث

  • <mount-name> هو مسار DBFS يمثل مكان تحميل حساب Azure Data Lake Storage Gen1 أو مجلد داخله (محدد في source) في DBFS.
  • dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")يسترد مفتاح الوصول إلى حساب التخزين الذي تم تخزينه كبيانات سرية في نطاق سري.

الوصول إلى الملفات في الحاوية كما لو كانت ملفات محلية، على سبيل المثال:

Python

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

التطوير

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

إعداد بيانات اعتماد الخدمة لحسابات متعددة

يمكنك إعداد بيانات اعتماد الخدمة لحسابات Azure Data Lake Storage Gen1 المتعددة لاستخدامها في جلسة Spark واحدة عن طريق الإضافة account.<account-name> إلى مفاتيح التكوين. على سبيل المثال، إذا كنت تريد إعداد بيانات الاعتماد لكل من الحسابات للوصول adl://example1.azuredatalakestore.net و adl://example2.azuredatalakestore.net، يمكنك القيام بذلك على النحو التالي:

spark.conf.set("fs.adl.oauth2.access.token.provider.type", "ClientCredential")

spark.conf.set("fs.adl.account.example1.oauth2.client.id", "<application-id-example1>")
spark.conf.set("fs.adl.account.example1.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential-example1>"))
spark.conf.set("fs.adl.account.example1.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id-example1>/oauth2/token")

spark.conf.set("fs.adl.account.example2.oauth2.client.id", "<application-id-example2>")
spark.conf.set("fs.adl.account.example2.oauth2.credential", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential-example2>"))
spark.conf.set("fs.adl.account.example2.oauth2.refresh.url", "https://login.microsoftonline.com/<directory-id-example2>/oauth2/token")

يعمل هذا أيضا لتكوين نظام المجموعة Spark:

spark.hadoop.fs.adl.oauth2.access.token.provider.type ClientCredential

spark.hadoop.fs.adl.account.example1.oauth2.client.id <application-id-example1>
spark.hadoop.fs.adl.account.example1.oauth2.credential <service-credential-example1>
spark.hadoop.fs.adl.account.example1.oauth2.refresh.url https://login.microsoftonline.com/<directory-id-example1>/oauth2/token

spark.hadoop.fs.adl.account.example2.oauth2.client.id <application-id-example2>
spark.hadoop.fs.adl.account.example2.oauth2.credential <service-credential-example2>
spark.hadoop.fs.adl.account.example2.oauth2.refresh.url https://login.microsoftonline.com/<directory-id-example2>/oauth2/token

يوضح دفتر الملاحظات التالي كيفية الوصول إلى Azure Data Lake Storage Gen1 مباشرة ومع التحميل.

دفتر الملاحظات الأساسي لخدمة ADLS Gen1

الحصول على دفتر الملاحظات