4. Databricks - Azure Data Lake Storage Gen2 연동하기
Databricks - Azure Data Lake Storage Gen2 연동하기
(Azure Active Directory와 Key-vault로)
개요
네... 혹시 연동 작업에서 에러가 나고 삽질을 하셨나요?ㅜㅜ 저의 삽질기는 졸업하고 깔끔하게 정리하여 공유하고자 합니다. 화..화이팅!!
네... 혹시 연동 작업에서 에러가 나고 삽질을 하셨나요?ㅜㅜ 저의 삽질기는 졸업하고 깔끔하게 정리하여 공유하고자 합니다. 화..화이팅!!
작업 Process
1. Databricks Secret 생성
네, 전 포스트에서 Secret과 Azure Key-Vault에 대해 포스팅을 했는데 여기에서도 한 번 더 언급하겠습니다.
일단 databricks에 제공하는 Token은 Configure하시구요,
>databricks configure --token
Databricks Host (should begin with https://): https://eastus.azuredatabricks.net
Token:
추가적으로, Workspace에 생성된 notebook도 확인 command를 해볼까요?
>databricks workspace ls /Users/mj_
datalake
네 이제는 Secret을 생성해보겠습니다. Secret생성 전에 Azure Portal에서 Azure Key-vault 리소스를 인스톨하구요, 속성 내 DNS과 리소스Id를 복사해둡니다.
이제, 데이터브릭스 포탈로 들어갑니다. 포탈 url에 뒤에 /#secrets/createScope 를 붙여 아래와 같은 페이지로 들어갑니다!
이제 앞에 복사해두었던 DNS와 리소스 Id를 아래에 붙여넣습니다.
이제 Secret Scope이 생성되었는지 확인해불까요? Databricks_CLI를 통해 확인가능합니다.
>databricks secrets list --scope {Scope명}
Key name Last updated
---------- --------------
네 아직 생성된 키는 없죠. 아직 안넣어 뒀기 때문..!
자!! 여기서부터 중요합니다~ 생성된 Secret Scope에는 Azure Active Directory 내에 App Registration을 생성하여 거기 Password를 생성하여 연결을 해주어야 합니다.
일단, Azure Portal 내에 AAD(Azure Active Directory)로 들어갑니다.
네, 전 포스트에서 Secret과 Azure Key-Vault에 대해 포스팅을 했는데 여기에서도 한 번 더 언급하겠습니다.
일단 databricks에 제공하는 Token은 Configure하시구요,
일단 databricks에 제공하는 Token은 Configure하시구요,
Databricks Host (should begin with https://): https://eastus.azuredatabricks.net
Token:
추가적으로, Workspace에 생성된 notebook도 확인 command를 해볼까요?
>databricks workspace ls /Users/mj_
datalake
네 이제는 Secret을 생성해보겠습니다. Secret생성 전에 Azure Portal에서 Azure Key-vault 리소스를 인스톨하구요, 속성 내 DNS과 리소스Id를 복사해둡니다.
이제, 데이터브릭스 포탈로 들어갑니다. 포탈 url에 뒤에 /#secrets/createScope 를 붙여 아래와 같은 페이지로 들어갑니다!
이제 앞에 복사해두었던 DNS와 리소스 Id를 아래에 붙여넣습니다.
이제 Secret Scope이 생성되었는지 확인해불까요? Databricks_CLI를 통해 확인가능합니다.
>databricks secrets list --scope {Scope명}
Key name Last updated
---------- --------------
네 아직 생성된 키는 없죠. 아직 안넣어 뒀기 때문..!
자!! 여기서부터 중요합니다~ 생성된 Secret Scope에는 Azure Active Directory 내에 App Registration을 생성하여 거기 Password를 생성하여 연결을 해주어야 합니다.
일단, Azure Portal 내에 AAD(Azure Active Directory)로 들어갑니다.
2. AAD와 Secret 연동
저는 여기서 삽질을 했는데요... 잘 보시고 따라하셔요!
AAD로 들어가면 왼쪽에 App Registrations에 들어가셔서 +새등록을 클릭합니다.
등록에 지원되는 계정 유형은 맨 위에있는거 선택하시고 리디렉션 URI는 https://localhost 라고 했어요. 사실 URI는 아무거나 넣으셔도 되용.
App Registration을 만들고 나서 클릭하여 들어가게 되면 인증서 및 암호가 있습니다.
그걸 선택하여 + 새클라이언트 암호를 누릅니다.
암호를 생성할 때 값이 처음으로 보여질 때 바로 복사를 해두셔야합니다! 담번엔 볼 수 없으니 일단 바로 복사!
그러고 난 뒤 Azure Key-Vault로 들어갑니다. 비밀로 들어가셔서 +생성/가져오기를 누릅니다.
여기서 중요한데요,
아래와 같이 비밀 만들기가 나오게 됩니다. 이때 위에 App Registration에서 만든 Key이름과 복사해두었던 값을 붙여넣습니다.
네 이제 Key-Vault와 AAD가 서로 연동이 되었습니다. 확인해볼까요?
Databricks CLI 로 가셔서 다시 한번 더 Secret을 검색해볼게요.
>databricks secrets list --scope {Scope명}
Key name Last updated
---------- --------------
lakescrete 1560-
이렇게 Key가 잘 붙어진 것을 확인할 수 있습니다.
3. Azure Data Lake Storage Gen2 Mount하기
마운트 하기 전에 Databricks CLI로 마운트되어있는 지 확인해볼게요.
>databricks fs ls dbfs:/mnt/
아무것도 안뜨게쮸.. ㅎㅎ 아직 안붙였으니.
이제 붙이러 ㄱㄱ 해볼게요.
해야할 것은 두 가지 입니다.
첫 번쨰는 Azure 계정의 Object ID를 복사해오고 두 번쨰, Data Lake Storage에 Mount할 디렉터리에 권한을 추가하면 됩니다.
계정의 Object ID를 복사하기 위해,
Azure Active Directory -> 모든 사용자 -> {본인 계정} 을 선택합니다.
아래와 같이 들어가지는 것을 확인하시고 개체 ID를 복사합니다.
두 번쨰,
Azure Storage Explorer 애플리케이션으로 들어갑니다. Local에 설치할 수 있고 혹, 설치가 안되어있으면 아래 URL로 들어가셔서 다운받으시고 Azure 로그인하면 해당 설치된 스토리지를 확인할 수 있어요!
생성한 Data Lake Storage gen2로 들어가서 Mount할 폴더를 생성 및 선택합니다. 액세스 관리를 누르시고 아래 Add user or group 에 복사해두었던 Object ID를 Add해줍니다.
여기까지 다 하셨으면 아래와 같이 나올거에요! Access에 권한을 넣어주시면 끝!
자~! 이제 권한까지 다 연동해주었다면 Databricks로 들어가서 Mount 연동 Config를 해볼까요?
Databricks Notebook을 실행하셔서 아래와 같이 넣어주면 mount가 됩니다!
참고로, client-id는 앞에서 App Registration에 앱을 생성해주었잖아요? 거기 다시 들어가셔서 보시면 "응용 프로그램(클라이어트) ID" 를 복사하셔서 넣으면 됩니다. 나머지도 앞에서 만들었던 리소스 정보를 기입해주시면 되요~
Scala
Copy
val configs = Map(
"fs.azure.account.auth.type" -> "OAuth",
"fs.azure.account.oauth.provider.type" -> "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
"fs.azure.account.oauth2.client.id" -> "<your-service-client-id>",
"fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>"),
"fs.azure.account.oauth2.client.endpoint" -> "https://login.microsoftonline.com/<your-directory-id>/oauth2/token")
// Optionally, you can add <your-directory-name> to the source URI of your mount point.
dbutils.fs.mount(
source = "abfss://<your-file-system-name>@<your-storage-account-name>.dfs.core.windows.net/",
mountPoint = "/mnt/<mount-name>",
extraConfigs = configs)
Python
Copy
configs = {"fs.azure.account.auth.type": "OAuth",
"fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
"fs.azure.account.oauth2.client.id": "<your-service-client-id>",
"fs.azure.account.oauth2.client.secret": dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>"),
"fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<your-directory-id>/oauth2/token"}
# Optionally, you can add <your-directory-name> to the source URI of your mount point.
dbutils.fs.mount(
source = "abfss://<your-file-system-name>@<your-storage-account-name>.dfs.core.windows.net/",
mount_point = "/mnt/<mount-name>",
extra_configs = configs)
연동이 되었다면
아래와 같이 mount가 된것을 확인할 수 있습니다. 저는 <mount-name>을 datalake2로 했습니다.
다들,, 성공하셨으면 좋겠네요! 화이팅~
참고.. Databricks Notebook에서 연동 Config에
Invalid configuration value detected for fs.azure.account.key
라고 뜰 수 있어요, 저는 시간이 지나고 다시 해줬더니 되었습니다. key 서비스가 영향을 미치는데 시간이 좀 걸릴 수 있다고 하더라구요! 참고해주세용!
Copy
val configs = Map(
"fs.azure.account.auth.type" -> "OAuth",
"fs.azure.account.oauth.provider.type" -> "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
"fs.azure.account.oauth2.client.id" -> "<your-service-client-id>",
"fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>"),
"fs.azure.account.oauth2.client.endpoint" -> "https://login.microsoftonline.com/<your-directory-id>/oauth2/token")
// Optionally, you can add <your-directory-name> to the source URI of your mount point.
dbutils.fs.mount(
source = "abfss://<your-file-system-name>@<your-storage-account-name>.dfs.core.windows.net/",
mountPoint = "/mnt/<mount-name>",
extraConfigs = configs)
Copy
configs = {"fs.azure.account.auth.type": "OAuth",
"fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
"fs.azure.account.oauth2.client.id": "<your-service-client-id>",
"fs.azure.account.oauth2.client.secret": dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>"),
"fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<your-directory-id>/oauth2/token"}
# Optionally, you can add <your-directory-name> to the source URI of your mount point.
dbutils.fs.mount(
source = "abfss://<your-file-system-name>@<your-storage-account-name>.dfs.core.windows.net/",
mount_point = "/mnt/<mount-name>",
extra_configs = configs)
댓글
댓글 쓰기