From aa5aa1e4174ddf3e88795c4d26fa9b6691af5be7 Mon Sep 17 00:00:00 2001 From: flomader <40666690+flomader@users.noreply.github.com> Date: Fri, 19 Jul 2019 14:06:47 +0200 Subject: [PATCH] added mounting method for passthrough --- README.md | 1 + notebooks/connect_storage.dbc | Bin 16815 -> 18898 bytes notebooks/mount_adpassthrough_py.py | 21 +++++++++++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 notebooks/mount_adpassthrough_py.py diff --git a/README.md b/README.md index 841562d..662900f 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ To download all sample notebooks, [here](notebooks/connect_storage.dbc) is the D | | |AD Passthrough|**User has correct RBAC role assigned OR ACLs permissions to files/folders in ADLS Gen2|[Python](notebooks/directconnect_adpassthrough_py.py), [SQL](notebooks/directconnect_adpassthrough_sql.sql)| [ADLS Gen2](https://docs.azuredatabricks.net/spark/latest/data-sources/azure/azure-datalake-gen2.html#access-adls-automatically-with-your-aad-credentials)| |**Mount on DBFS**|Databricks Workspace|Storage Key|All rights|[Python](notebooks/mount_storagekey_py.py)|[Blob](https://docs.azuredatabricks.net/spark/latest/data-sources/azure/azure-storage.html#mount-azure-blob-storage-containers-with-dbfs), [ADLS Gen2](https://docs.azuredatabricks.net/spark/latest/data-sources/azure/azure-datalake-gen2.html#access-an-adls-account-directly-using-the-storage-account-access-key)| | | |OAuth via Service Principal (SP)|**SP has correct RBAC role assigned OR ACLs permissions to files/folders in ADLS Gen2|[Python](notebooks/mount_oauthsp_py.py)| [ADLS Gen2](https://docs.azuredatabricks.net/spark/latest/data-sources/azure/azure-datalake-gen2.html#mount-an-adls-filesystem-to-dbfs-using-a-service-principal-and-oauth-2-0)| +| | |AD Passthrough|**User has correct RBAC role assigned OR ACLs permissions to files/folders in ADLS Gen2|[Python](notebooks/mount_adpassthrough_py.py)|[ADLS Gen2](https://docs.azuredatabricks.net/spark/latest/data-sources/azure/adls-passthrough.html#mount-your-data-with-dbfs)| |---|---|---|---|---|---| diff --git a/notebooks/connect_storage.dbc b/notebooks/connect_storage.dbc index cc2001fb3162632d1e0555131b16023587415233..85855bd17bc29c7450a0b9a8cec3d54eb358dc4e 100644 GIT binary patch literal 18898 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%0DDZ?jAve0nZVQ4Q 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 J9nYUn{~xVwgeL$1 diff --git a/notebooks/mount_adpassthrough_py.py b/notebooks/mount_adpassthrough_py.py new file mode 100644 index 0000000..f885ea2 --- /dev/null +++ b/notebooks/mount_adpassthrough_py.py @@ -0,0 +1,21 @@ +# Databricks notebook source +# MAGIC %md +# MAGIC ## Azure DataLake Gen2 +# MAGIC +# MAGIC 1. Azure Databricks Premium Plan. +# MAGIC 2. Azure Data Lake Storage Gen2: Databricks Runtime 5.3 or above. +# MAGIC 3. High concurrency clusters, which support only Python and SQL. [Enabled AD Passthrough checkbox under Advanced Options](https://docs.azuredatabricks.net/spark/latest/data-sources/azure/adls-passthrough.html#enable-passthrough-for-a-cluster) +# MAGIC 4. User needs to have [Storage Data Blob Owner/Contributor/Reader role](https://docs.microsoft.com/en-us/azure/storage/common/storage-auth-aad-rbac-portal#rbac-roles-for-blobs-and-queues) OR [appropriate ACL permissions (R/W/E) on ADLA Gen2](https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-access-control#access-control-lists-on-files-and-directories) is granted + +# COMMAND ---------- + +configs = { + "fs.azure.account.auth.type": "CustomAccessToken", + "fs.azure.account.custom.token.provider.class": spark.conf.get("spark.databricks.passthrough.adls.gen2.tokenProviderClassName") +} + +# Optionally, you can add to the source URI of your mount point. +dbutils.fs.mount( + source = "abfss://@.dfs.core.windows.net/", + mount_point = "/mnt/my_adls_gen2_mount_path/", + extra_configs = configs) \ No newline at end of file