You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地Spark通过azure-kusto-spark写入ADX无数据且无报错求助

使用azure-kusto-spark写入ADX无数据但无报错的排查方案

问题描述

我用azure-kusto-spark把数据写入ADX,ADX里已经生成了表结构,但查不到任何数据,日志里也没报错,用的是本地Spark环境,相关代码和日志如下:

相关代码

df.show();
df.write()
        .format("com.microsoft.kusto.spark.datasource")
        .option(KustoSinkOptions.KUSTO_CLUSTER(), cluster)
        .option(KustoSinkOptions.KUSTO_DATABASE(), db)
        .option(KustoSinkOptions.KUSTO_TABLE(), table)
        .option(KustoSinkOptions.KUSTO_AAD_APP_ID(), client_id)
        .option(KustoSinkOptions.KUSTO_AAD_APP_SECRET(), client_key)
        .option(KustoSinkOptions.KUSTO_AAD_AUTHORITY_ID(), "microsoft.com")
        .option(KustoSinkOptions.KUSTO_TABLE_CREATE_OPTIONS(), "CreateIfNotExist")
        .mode(SaveMode.Append)
        .save();

运行日志

22/12/13 12:06:14 INFO QueuedIngestClient: 创建新的IngestClient
22/12/13 12:06:14 INFO ResourceManager: 刷新Ingestion认证令牌
22/12/13 12:06:16 INFO ResourceManager: 刷新Ingestion资源
22/12/13 12:06:16 INFO KustoConnector: ContainerProvider: 从服务'ingest-engineermetricdata.eastus'获取到2个存储SAS,命令为:'.create tempstorage'
22/12/13 12:06:16 INFO KustoConnector: ContainerProvider: 从服务'ingest-engineermetricdata.eastus'获取到2个存储SAS,命令为:'.create tempstorage'
22/12/13 12:06:16 INFO KustoConnector: KustoWriter$: 完成分区0的行序列化,请求ID: '9065b634-3b74-4993-830b-16ee534409d5'
22/12/13 12:06:16 INFO KustoConnector: KustoWriter$: 完成分区1的行序列化,请求ID: '9065b634-3b74-4993-830b-16ee534409d5'
22/12/13 12:06:17 INFO KustoConnector: KustoWriter$: 从Blob摄入数据 - 分区: 0 请求ID: '9065b634-3b74-4993-830b-16ee534409d5'
22/12/13 12:06:17 INFO KustoConnector: KustoWriter$: 从Blob摄入数据 - 分区: 1 请求ID: '9065b634-3b74-4993-830b-16ee534409d5'
22/12/13 12:06:19 INFO Executor: 完成阶段0.0中的任务1.0(TID 1)。已向驱动发送2135字节结果
22/12/13 12:06:19 INFO Executor: 完成阶段0.0中的任务0.0(TID 0)。已向驱动发送2135字节结果
22/12/13 12:06:19 INFO TaskSetManager: 在192.168.50.160(执行器驱动)上完成阶段0.0中的任务0.0(TID 0),耗时6306毫秒 (1/2)
22/12/13 12:06:19 INFO TaskSetManager: 在192.168.50.160(执行器驱动)上完成阶段0.0中的任务1.0(TID 1),耗时6231毫秒 (2/2)
22/12/13 12:06:19 INFO TaskSchedulerImpl: 从池中移除所有任务已完成的TaskSet 0.0
22/12/13 12:06:19 INFO DAGScheduler: ResultStage 0(位于KustoWriter.scala:107的foreachPartition)耗时7.070秒完成
22/12/13 12:06:19 INFO DAGScheduler: Job 0已完成。取消此作业的潜在推测或僵尸任务
22/12/13 12:06:19 INFO TaskSchedulerImpl: 终止阶段0中的所有运行任务:阶段已完成
22/12/13 12:06:19 INFO DAGScheduler: Job 0完成:位于KustoWriter.scala:107的foreachPartition,耗时7.157414秒
22/12/13 12:06:19 INFO KustoConnector: KustoClient: 轮询请求ID为9065b634-3b74-4993-830b-16ee534409d5的摄入结果,完成后将数据移动到目标表
22/12/13 12:13:30 INFO BlockManagerInfo: 移除内存中192.168.50.160:56364上的broadcast_0_piece0(大小:4.9 KiB,空闲:2004.6 MiB)

排查步骤

1. 等待ADX摄入完成

ADX队列摄入默认存在延迟,通常为几分钟到十几分钟。日志显示客户端正在轮询摄入结果但未输出完成日志,大概率是后台还在处理数据。建议等待15-30分钟后再查询目标表。

2. 用请求ID查询摄入状态

在ADX中执行以下命令,通过日志中的请求ID(9065b634-3b74-4993-830b-16ee534409d5)排查摄入详情:

.show ingestion failures | where OperationId == "9065b634-3b74-4993-830b-16ee534409d5"
.show ingestion operations | where OperationId == "9065b634-3b74-4993-830b-16ee534409d5"

这两个命令可以暴露隐藏的摄入错误或状态信息。

3. 修正AAD租户ID

代码中KUSTO_AAD_AUTHORITY_ID设置为microsoft.com,这不是有效的租户标识。需要替换为你的Azure租户ID(GUID格式)或租户域名(如yourcompany.onmicrosoft.com),错误的租户配置可能导致隐性权限问题。

4. 确认DataFrame非空

在代码中添加println(df.count()),验证df确实包含非零行数的数据,避免因原数据为空导致写入无结果。

5. 检查ADX表权限

确保用于写入的AAD应用(client_id)对目标表拥有Ingestor权限(至少)。可在ADX中执行以下命令查看权限配置:

.show table 你的表名 principals

6. 启用详细日志

在Spark配置中添加以下参数,获取更精细的摄入日志,排查潜在的隐性问题:

spark.kusto.ingestion.logLevel=DEBUG
spark.kusto.client.logLevel=DEBUG

内容的提问来源于stack exchange,提问作者eric yang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 23:30:47