Docker部署Apache Druid时Parquet导入后数据源无数据求助
Apache Druid Parquet数据加载成功但无数据源显示排查方案
核心排查步骤
检查任务数据处理统计:进入Druid控制台的任务详情页,查看
Rows Read和Rows Written指标。如果两项均为0,说明Parquet文件未被正确读取,优先排查以下两点:- 确认Docker容器内的文件路径与摄入配置中的路径一致,宿主机到容器的目录映射需正确配置(例如宿主机
/local/parquet映射到容器/opt/druid/parquet,则摄入配置路径应为容器内路径)。 - 进入容器执行
ls <配置的文件路径>,验证文件是否存在,且Druid运行用户有读取权限。
- 确认Docker容器内的文件路径与摄入配置中的路径一致,宿主机到容器的目录映射需正确配置(例如宿主机
验证Parquet文件兼容性:
- 使用
parquet-tools(可通过临时工具容器安装)查看文件元数据:parquet-tools schema <parquet-file-path>,确认字段类型无Druid不支持的复杂嵌套结构,且时间字段格式符合预期。 - 若文件由旧版本Parquet(1.x)生成,尝试转换为2.x+版本后重新加载。
- 使用
核对摄入规范(Specification)配置:
- 确认时间列配置:Druid必须指定有效时间列作为主键,检查配置中
timestampSpec的column和format是否与Parquet文件中的时间字段匹配(例如航班数据的flight_date字段格式是否为yyyy-MM-dd)。 - 检查
granularitySpec的时间范围:若配置的粒度时间范围未覆盖Parquet文件中的数据时间(例如数据是2018年,但粒度设为最近7天),数据会被存入超出查询范围的segment,需调整intervals参数匹配数据时间区间。 - 确认
schema配置与Parquet文件的字段完全匹配,无字段名拼写错误或类型不兼容(例如Parquet的int类型对应Druid的long或int,不可设为string)。
- 确认时间列配置:Druid必须指定有效时间列作为主键,检查配置中
查看深层节点日志:
- 查看MiddleManager日志:
docker logs <druid-middlemanager-container-id>,搜索parquet、row关键词,确认是否有数据解析记录。 - 查看Historical节点日志:
docker logs <druid-historical-container-id>,搜索segment、publish关键词,检查segment是否成功生成并加载。
- 查看MiddleManager日志:
检查Segment状态:
- 访问Coordinator控制台(默认端口8081)的Segments页面,查看是否有对应任务生成的segment:
- 若状态为
Unavailable,说明Historical节点未成功加载,需检查节点资源(内存、磁盘)是否充足。 - 若无segment记录,说明任务未实际生成数据,回到第一步重新排查文件读取问题。
- 若状态为
- 访问Coordinator控制台(默认端口8081)的Segments页面,查看是否有对应任务生成的segment:
验证存储路径权限:
- 进入Druid容器:
docker exec -it <druid-container-id> bash,查看数据存储目录权限:ls -l /opt/druid/var,确保Druid运行用户(通常是druid)有读写权限。
- 进入Druid容器:
内容的提问来源于stack exchange,提问作者chaitanya kumar Dondapati
相关产品推荐
相关产品推荐

