Запись журнала с модулем регистрации Python в кирпичи данных для лазурного datalake не работает - PullRequest
1 голос
/ 15 апреля 2019

Я пытаюсь записать свои собственные файлы журналов в Azure Datalake Gen 2 в Python-Notebook в Databricks.Я пытаюсь добиться этого с помощью модуля регистрации Python.

К сожалению, я не могу заставить его работать.Ошибки не вызываются, папки создаются, но файл с содержимым журналов не создается.Даже если файлы существуют, в него ничего не записывается.

Локальный скрипт на python работает просто отлично, но я не могу заставить его работать в Databricks.

Вот мой код:

# mount
if not any(mount.mountPoint == '/mnt/log' for mount in dbutils.fs.mounts()):
  dbutils.fs.mount(
    source = "abfss://log@datalake.dfs.core.windows.net/",
    mount_point = "/mnt/log",
    extra_configs = configs)

# vars
folder_log = '/mnt/log/test/2019'
file_log = '201904.log'

# add folder if not existent
dbutils.fs.mkdirs(folder_log)

# setup logging
import logging
logging.basicConfig(
  filename=folder_log+'/'+file_log,
  format='%(asctime)s | %(name)s | %(levelname)s | %(message)s',
  datefmt='%Y-%m-%d %H:%M:%S UTC (%z)',
  level=logging.NOTSET
)

# test
logging.info('Hello World.')

Кажется, что с установкой все в порядке.

Добавление и запись файлов с помощью dbutils работает нормально:

dbutils.fs.put(folder_log+'/'+file_log, 'Hello World.')

Запись в файл подобным образом работает нормальнотоже:

f = open('/dbfs/mnt/log/test/2019/201904.log', 'w+')
f.write("This is line %d\r\n")
f.close()

Также попытался добавить "dbfs" к пути

filename='/dbfs'+folder_log+'/'+file_log,

Есть идеи?

1 Ответ

0 голосов
/ 16 апреля 2019

Позвольте мне объяснить, как получить доступ или выполнить операции записи в хранилище озера данных Azure с использованием python

1) Зарегистрировать приложение в Azure AD

enter image description here

enter image description here

2) Предоставить разрешение в озере данных для зарегистрированного вами приложения

enter image description here

enter image description here

enter image description here

enter image description here

3) Получите секретный ключ клиента от Azure AD для приложения, которое вы зарегистрировали.

4) Вам необходимо написать код для монтирования каталога в озере данных Azure, как показано ниже

dbutils.fs.mkdirs("/mnt/mountdatalake")

config = {"dfs.adls.oauth2.access.token.provider.type": "ClientCredential",
           "dfs.adls.oauth2.client.id": "Registered_Client_Id_From_Azure_Portal",
             "dfs.adls.oauth2.credential": "Cleint_Secret_Obtained_By_Azure_Portal",
               "dfs.adls.oauth2.refresh.url":"https://login.microsoftonline.com/Your_Directory_ID/oauth2/token"}

dbutils.fs.amount(
               source="adl://mydata.azuredatalakestore.net/mountdatabricks",
               mount_point ="/mnt/mountdatalake",
extra_configs=configs)

После того, как настройка / подключение выполнено с использованием учетных данных клиента приложения, вы можете получить доступ к каталогу и зарегистрировать его.

Например, ниже, я извлек пару записей из SQL-сервера и сохранил их в озере данных Azure

enter image description here

Надеюсь, это поможет.

...