用databricks中的python日志记录模块编写日志,使azure datalake无法正常工作

问题描述 投票:0回答:1

我正在尝试在Databricks的Python-Notebook中将自己的日志文件写入Azure Datalake Gen 2。我正在尝试通过使用Python日志记录模块来实现这一点。

不幸的是,我无法让它发挥作用。不会引发任何错误,会创建文件夹,但不会创建包含日志记录内容的文件。即使文件存在,也不会写入任何内容。

本地python脚本工作正常,但我不能让它在Databricks中工作。

这是我的代码:

# mount
if not any(mount.mountPoint == '/mnt/log' for mount in dbutils.fs.mounts()):
  dbutils.fs.mount(
    source = "abfss://[email protected]/",
    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,

有任何想法吗?

python azure logging azure-data-lake azure-databricks
1个回答
-1
投票

让我解释一下使用python访问或执行Azure数据湖存储上的写操作的步骤

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

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.