我正在尝试在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数据湖存储上的写操作的步骤
1)在Azure AD中注册应用程序
2)为您注册的应用程序授予数据湖权限
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数据湖中
希望这可以帮助。