使用 azure databricks 读取 azure databricks 日志 json 文件
Posted
技术标签:
【中文标题】使用 azure databricks 读取 azure databricks 日志 json 文件【英文标题】:Reading azure databricks logs json file using azure databricks 【发布时间】:2022-01-01 22:00:58 【问题描述】:我已通过启用诊断设置将数据块日志发送到存储帐户,现在我必须使用 azure 数据块读取这些日志以进行高级分析。当我尝试安装路径时它可以工作但读取不会工作。
step 1-
containerName = "insights-logs-jobs"
storageAccountName = "smk"
config = "fs.azure.sas." + containerName+ "." + storageAccountName + ".blob.core.windows.net"
sas = "sp=r&st=2021-12-07T08:07:08Z&se=2021-12-07T16:07:08Z&spr=https&sv=2020-08-04&sr=b&sig=3skdlskdlkf5tt3FiR%2FLM%3D"
spark.conf.set(config,sas)
step 2
df = spark.read.json("wasbs://insights-logs-jobs.gtoollogging.blob.core.windows.net/resourceId=/SUBSCRIPTIONS/xxxBD-3070-4AFD-A44C-3489956CE077/RESOURCEGROUPS/xxxx-xxx-RG/PROVIDERS/MICROSOFT.DATABRICKS/WORKSPACES/xxx-ADB/y=2021/m=12/d=07/h=00/m=00/*.json")
Getting below error
shaded.databricks.org.apache.hadoop.fs.azure.AzureException: Unable to access container $root in account insights-logs-jobs.gtjjjng.blob.core.windows.net using anonymous credentials, and no credentials found for them in the configuration.
at shaded.databricks.org.apache.hadoop.fs.azure.AzureNativeFileSystemStore.connectUsingAnonymousCredentials(AzureNativeFileSystemStore.java:796)
at shaded.databricks.org.apache.hadoop.fs.azure.AzureNativeFileSystemStore.createAzureStorage.
尝试了很多方法,但都低于错误。 [![在此处输入图片描述][1]][1]
【问题讨论】:
请确认存储账户中的数据格式。大多数集群日志以 parquet 格式存储。 不,它在 json 文件中生成 yy/mm/dd/hh 格式为 json。这是以下路径 resourceId=/SUBSCRIPTIONS/dklgd-3070-4AFD-A44C-3489956CE077/RESOURCEGROUPS/xyz- PROD-RG/PROVIDERS/MICROSOFT.DATABRICKS/WORKSPACES/xyz-PROCESS-PROD-ADB/y=2021/m=10/d=07/h=10/m=00/PT1H.JSON 【参考方案1】:借助以下代码,我可以使用 pyspark 从 Azure 存储帐户读取数据。
df = spark.read.json("wasbs://container_@storage_account.blob.core.windows.net/sub_folder/*.json")
df.show()
这为我提供了终端中所有 json 文件的完整数据。
或者您可以通过以下方式尝试:
storage_account_name = "ACC_NAME"
storage_account_access_key = "ACC_key"
spark.conf.set(
"fs.azure.account.key."+storage_account_name+".blob.core.windows.net",
storage_account_access_key)
file_type = "json"
file_location = "wasbs://location/path"
df = spark.read.format(file_type).option("inferSchema", "true").load(file_location)
【讨论】:
当您尝试从存储帐户读取数据时,这些语法将起作用,但我正在尝试读取通过启用日志存储帐户名称的诊断抽动设置发送的日志。我也已经给出了完整的路径。 编辑了我的问题,尝试了 sas 令牌方法,但无法读取存储帐户中存在的数据块日志【参考方案2】:这就是 databricks 挂载的工作方式。
如果您尝试在现有挂载点内创建挂载点,例如:
将一个存储帐户挂载到/mnt/storage1
将第二个存储帐户挂载到/mnt/storage1/storage2
原因:这将失败,因为 Databricks 不支持嵌套安装。推荐一个是为每个存储对象创建单独的挂载条目。
例如:
将一个存储帐户挂载到/mnt/storage1
将第二个存储帐户挂载到/mnt/storage2
您可以参考:Link
作为解决方法 - 您可以从存储帐户本身读取它以进行处理而不是挂载。
【讨论】:
以上是关于使用 azure databricks 读取 azure databricks 日志 json 文件的主要内容,如果未能解决你的问题,请参考以下文章
更改同一单元格中的魔术标签 - Azure Databricks
使用 /mnt/ 将数据从 Azure Blob 存储读取到 Azure Databricks
如何使用 SAS 读取 Azure databricks 中的 blob
如何在 Azure Databricks 中使用 JDBC 从 PostgreSQL 读取表数据?
使用 Azure EventHubs Capture 生成的 Azure Data Lake Gen1 中的 Databricks 读取 avro 数据失败