3. Azure Databricks Secret으로 Blob Storage Mount
Azure Databricks Secret으로 Blob Storage Mount
개요
Databricks File System 내부로 Azure Blob 스토리지의 지정 컨테이너를 Mount하여 편리하게 ETL 할 수 있습니다. 그 과정에 필요한 것은 바로 Secret과 Azure Blob Accout에 SAS를 활용하면 가능합니다.
작업 Process
1. Azure Blob IAM(엑세스제어) 등
Azure Portal에 AAD(Azure Active Directory)로 들어가서 App Registrations를 선택합니다.
+새등록을 통해 앱 등록을 진행합니다.
+새등록을 통해 앱 등록을 진행합니다.
Mount 할 Blob Storage에 컨테이너가 없다면 생성하시고 있으면 해당 컨테이너로 들어갑니다.
해당 컨테이너에 들어가서 엑세서 제어(IAM)에 들어갑니다. +새등록을 누르셔서 역할할당추가 를 선택합니다.
역할 할당 추가에서 역할을 통해 Databricks 내 Access하려는 Permission을 제한을 둘 수 있습니다. 그리고 선택부분에 앞서 AAD에 만들었던 App Registration 생성 이름을 서치하시고 선택하셔서 할당을 추가하면 됩니다.
네 이제 Mount할 Azure Blob내 컨테이너 역할 할당은 완료했습니다!
그렇담 이제 Databricks로 넘어가 mount해기위한 Secret과 Scope을 확인해볼게요.
2. Secret과 Scope 확인하기.
저는 Databricks CLI로 확인을 할거에요. 혹시 Databricks CLI도 모르겠고 Secret도 뭔지 모르겠다 하시는 분들은 1,2 번 포스팅을 먼저 확인하시면 됩니다!
아래와 같이 databricks secrets 리스트를 확인하며 그 부분들 Mount할 때 필요한 정버들입니다.
C:\Users\박민지>databricks secrets list --scope test1
Key name Last updated
--------------- --------------
ExamplePassword 1560-
3. DBFS (Databricks File System)에 Azure Blob 특정 컨테이너 Mount 하기
이제 Databricks 노트북으로 들어가볼게요. Blob mount하기 위한 Scala 노트북을 생성했습니다. 그리고 아래와 같이 연결 코드를 넣어줄게요.
display(dbutils.fs.ls("/mnt/"))
를 하면 현재 마운트된 디렉터리를 확인할 수 있는데요 아직 아무것도 연결되어 있지 않으니 결과값이 없겠죠.
저는 중간에 mount다 삭제했기에
dbutils.fs.refreshMounts()
도 실했습니다. 가끔 마운트로 안 물리는 경우가 있어 이렇게 refresh를 하게 되면 잘 물리더라구요.
이제 본격적으로 mount해보도록 할게요. 아래 제가 사용한 코드인데요, 아래와 같이 하시면 됩니다.
dbutils.fs.mount(
source = "wasbs://<컨테이너명>@<blobAccount명>.blob.core.windows.net",
mountPoint = "/mnt/<마운트 명>",
extraConfigs = Map("fs.azure.sas.databricks.<blobAccount명>.blob.core.windows.net" -> dbutils.secrets.get(scope = "<scope명>", key = "<key명>")))
여기서 이제 scope명과 key명은 2번에서 확인한 것 대로 넣어주시면 됩니다!
display(dbutils.fs.ls("/mnt/azureblob/sourcedataset/"))
네 다 하셨으면 저처럼 mnt된 디렉터리가 보이실거고 컨테이너 안에 폴더나 파일이 있다면 이렇게 파일이 보여집니다.
한번 데이터를 write해볼까요?
val df = spark.read.format("csv").option("header", "true").load("dbfs:/mnt/azureblob/sourcedataset/train.csv")
display(df)
.load에 해당 디렉터리를 써주시고 불러오면은 아래와 같이 Blob에 있는 데이터가 Databricks 파일 시스템 내에 잘 마운트되었네요~
감사합니다~
댓글
댓글 쓰기