Accessing Data from Azure Data Lake Storage(ADLS) with Databricks

4 ways to connect ADLS with Databricks

Chalach Monkhontirapat
Equinox
6 min readFeb 9, 2024

--

ยุคสมัยนี้ หลายๆ บริษัท เริ่มใช้ Databricks ที่เป็น Lakehouse Platform ในการทำงานเกี่ยวกับ Data กันเยอะ พอสมควร แล้วการจะ Access file ที่อยู่บน Storage ของ Platform ที่ใช้ก็เป็นอะไรที่หลีกเลี่ยงไม่ได้ Blog นี้จะพาไปดูวิธี Access file จาก Databricks ไปที่ Storage Account ของ Azure กัน โดยจะพูดถึง 4 วิธีดังนี้

✅ Accessing Data from Azure Data Lake Storage(ADLS) with Databricks

  1. Accessing with Access Keys
  2. Accessing with SAS Token
  3. Mounting ADLS to DBFS (Recommend)
  4. Azure Key Valuts and Databricks Secret Scopes (Recommend)
Accerssing Data from Azure Data Lake Storage(ADLS) with Databricks Cover

Creating ADLS Gen2 Account for Databricks

ก่อนที่จะไปเริ่มกัน เราต้องสร้าง ADLS สำหรับ Databricks เพื่อให้เป็น External storage ก่อน

Step 1 : Create Storage Account

Create Storage Account

Step 2 : Setup Storage Account

ทำการเลือกและตั้งค่า Storage account ตามรูปด้านล่าง

Setup Storage Account

Step 3 : Create Container

เข้าไปที่ Storage account ที่เราสร้างขึ้นมา แล้วทำการสร้าง Contanier ตามรูป

Create Container

Step 4 : Upload files to Container

Upload files to Contanier

เมื่อเราทำการเตรียม Storage account พร้อมแล้วเราก็จะเริ่มทำการ Access files ที่อยู่ใน Storage กันได้

1.Accessing with Access Keys

วิธีนี้จะเป็นการใช้ Access keys ใน Level ของ Storage account นั้นๆเลย ซึ่งจะทำให้เราสามารถเข้าถึงได้ทุก Container ที่อยู่ภายใต้ Storage account

Step 1.1 : Get Access Keys

เข้าไปที่ Resource Group -> [resource_group_name] -> [storage_account] หลังจากนั้นให้ดูที่ Menu ทางด้านซ้ายจะเห็น Menu ที่ชื่อว่า Access Keys ให้กดไปที่นี่ จากนั้น Copy key มาใช้งาน

Get Access Keys

Step 1.2 : Get Files with Access Key

เราจะทำการ Config key ไว้กับ Spark config ของ Databricks จากนั้นก็ใช้ Spark ใน Read file ตาม Path ของ File ได้เลย

  • spark.conf.set : เป็นการ Set spark config โดยข้างบนเป็นการ Set access key ให้กับ Storage account ที่เราจะทำการ Acceess
  • spark.read.csv : เป็นการ Read csv file โดยใช้ Spark เราสามารถใส่ Path และ Options ที่จะใช้อ่าน File ได้ที่ตรงนี้
  • spark_df.display() : เป็น Function ของ Spark บน Databricks เท่านั้น จะใช้ในการแสดง Dataframe ออกมา ถ้าเป็น Spark ที่ Config เองต้องใช้ .show()
Get Files with Access Key

2.Accessing with SAS Token

วิธีนี้จะเป็นการใช้ SAS keys(Shared Access Signature Keys) ในการ Access เข้า Storage account วิธีนี้จะดีกว่าวิธีที่ 1 ตรงสามารถ Set expiry key หรือสามารถที่จะกำหนด Level ของ Key ได้ว่าจะสามารถ Access ได้ที่ Level ไหน หรือสามารถจะทำอะไรได้บ้าง

Step 2.1 : Get SAS Keys

เข้าไปที่ Resource Group -> [resource_group_name] -> [storage_account] หลังจากนั้นให้ดูที่ Menu ทางด้านซ้ายจะเห็น Menu ที่ชื่อว่า Shared Access Signature ให้กดไปที่นี่ จากนั้นทำการเลือกสิทธิ์ และทำการ Set expiry date

Get SAS Keys
Get SAS Keys

Step 2.1 : Get Files with SAS

เราจะทำการ Config key ไว้กับ Spark config ของ Databricks จากนั้นก็ใช้ Spark ใน Read file ตาม Path ของ File ได้เลยเหมือนกันวิธีก่อนหน้านี้

Get Files with SAS

3.Mounting ADLS to DBFS

วิธีนี้จะเป็นการ Mouth container มาที่ DBFS ของ Databricks ทำให้เราสามารถ Access file ได้ผ่าน DBFS ตรงๆ แล้วโดยที่ File ก็ยังถูกเก็บอยู่ที่ Storage account ที่เราทำไว้ โดยจะต้องทำทั้งหมด 3 ขั้นตอน ดังนี้

Step 3.1 : Create App Registeration and Service Pricipal

เริ่มแรกให้เราเข้าไปที่ App registrations แล้วทำการสร้าง App registrations

Create App Registrations
Create App Registrations

เมื่อสร้างเสร็จแล้วจะได้หน้าตาตามรูปข้างบน โดยเราจะใช้ทั้งหมด 3 ค่า จากตัว Service นี้ คือ

  • Application (client) ID -> Application ID
  • Directory (tenant) ID -> Tenant ID

ส่วน Secret เราต้องกดที่ Menu ด้านซ้ายไปที่ Certificate & Secrets จากนั้นก็สร้าง Secrets ขึ้นมาแล้วก็จะทำให้เราได้ครบ 3 ค่าตามที่เราต้องการ

  • Client secrests -> Secret
Create App Registrations

มาถึงตรงนี้เราจะได้ค่าที่เราต้องการแล้วทั้งหมด 3 ค่า ต่อมาเราต้องทำการ Grant role ให้กับ App registration ของเราก่อน

Step 3.2 : Geant role to Service Pricipal

ไปที่ Storage account ของเรา แล้วไปที่ Menu Access Control (IAM) จากนั้นให้ไปที่ Menu Role assignment เลือก Assign role จากนั้นเลือก Role “Storage Blob Contributor”

Assign role “Storage Blob Contributor” to Service Principal
Assign role “Storage Blob Contributor” to Service Principal

ถ้าเห็นว่า App registration ของเราได้สิทธิ์ Storage Blob Data Contributor ตามรูปด้านบนแล้วก็คือเรามีสิทธิ์เรียบร้อยแล้ว

Step 3.3 : Mount ADLS to DBFS

เราจะทำการ Config key ไว้กับ Spark config ของ Databricks จากนั้นก็ใช้ Databricks utils ในการ Mount ADLS to DBFS

Mount ADLS to DBFS

เมื่อ Run code ข้างบนสำเร็จแล้ว ให้เราไปที่ Databricks -> Catalog -> Browse DBFS จะเห็นรูปตามด้านล่างนี้

จะเห็น Files ที่อยู่ใน ADLS มาโผล่บน DBFS ของเราเรียบร้อยแล้ว

4.Azure Key Valuts and Databricks Secret Scopes

จากที่เราทำไปใน วิธีที่ 3 จะเห็นได้ว่ามีการเอา Value ต่างๆ ของ App registration ทั้ง Secrets และ IDs มาใช้ตรงๆ ซึ่ง จริงๆแล้วเราไม่ควรนำ Value มาใช้ตรงๆ วิธีนี้จะเป็นอีกวิธีที่จะช่วยให้เราสามารถ Connect ADLS ได้ตม Preactice และ Secure มากขึ้นโดยการใช้ Azure Key Valuts และ Databricks Secret Scopes

เริ่มแรกให้เราเข้าไปที่ Azure Key Valuts แล้วทำการ Create Key

Create a key valut

จากนั้นไปที่ Access configuration เพื่อทำการ config kv

Access configuration Azure KV

เราก็จะได้ Azure Key Valut ออกมาหน้าตาแบบนี้

Azure Key Valut

จากนั้นให้เราไปต่อที่ Menu ทางด้านซ้าย ของ Azure KV ให้ไปที่ Secrets แล้วหลังจากนั้นให้ไปที่ Generate/Import Secrets เพื่อที่เราจะเอา 3 ค่าก่อนหน้านี้คือ

  • Application (client) ID -> Application ID
  • Directory (tenant) ID -> Tenant ID
  • Client secrests -> Secret

ที่เราใช้ตรงๆ เอามาใส่ไว้ใน Azure Key Valut

Add value to secret

ตอนนี้เราก็จะเอาค่า Config ต่างๆของเราไปใส่ไว้ใน Azure KV แล้ว แต่เพื่อให้ง่ายต่อการใช้งานกับ Databricks เราจะเอา Secrets ทั้งหลายใน Azure KV ไปใส่ไว้ใน Databricks Secrets อีกทีนึงเพื่อให้สามารถใช้ผ่าน Databricks Utils ได้เลยแบบง่ายๆ เราจึงต้องไปสร้าง Databricks Secrets ก่อน โดยต้องไปที่

URL : https://<YOUR_HOST>.azuredatabricks.net/?o=<YOUR_SESSION>#secrets/createScope

เช่น https://adb-1234567912345678.12.azuredatabricks.net/?o=1596169917714638#secrets/createScope

จะเจอหน้า UI แบบนี้

Databricks Creat Secret Scope UI

โดยเราสามารถดู Scope Name, DNS Name, Resource ID ของ Azure KV ได้ที่ Menu Properties ของ Azure KV ทางด้านซ้าย เมื่อเรา Create สำเร็จแล้ว Secrets ทั้งหมดใน Azure KV ที่ Scope name = databricsk-secrets-demo จะถูก Copy มาไว้ที่ Databricks Scope name = databricsk-secrets-demo เหมือนกัน แล้วก็จะมี Secrets ข้างในเหมือนกัน ทำให้เราสามารถเรียกใช้ได้ง่ายๆผ่าน Databricks Utils ตามด้านล่างนี้

Mount ADLS to DBFS with Secrets

จะเห็น Files ที่อยู่ใน ADLS มาโผล่บน DBFS ของเราเรียบร้อยแล้ว ด้วยวิธีที่ถูกต้องตาม Practice และมีความ Secure ด้วยนั่นเอง

ตัวอย่าง Code ทั้งหมด ดูได้ที่นี่

--

--