PySpark本地环境OpenLineage日志无输出问题排查求助
问题诊断与修复方案
核心问题分析
你的OpenLineage日志未输出,主要源于三个配置错误:
- OpenLineage参数未加
spark.前缀,导致Agent无法识别 - Log4j配置路径引用不正确,日志规则未生效
- 日志记录的包范围不够全面,未覆盖所有OpenLineage组件
修正后的完整配置
1. 更新PySpark代码
将OpenLineage配置参数添加spark.前缀,并修正Log4j路径为相对路径:
from pyspark.sql import SparkSession if __name__ == "__main__": spark = SparkSession.builder \ .appName("PySpark OpenLineage Example") \ .config("spark.driver.extraJavaOptions", "-Dlog4j.configuration=file:./log4j-openlineage.xml") \ .config("spark.openlineage.url", "http://localhost:5000") \ .config("spark.openlineage.backend", "io.openlineage.spark.agent.backends.ConsoleLoggingBackend") \ .config("spark.openlineage.namespace", "test") \ # 可选:开启调试日志排查问题 .config("spark.openlineage.debug", "true") \ .getOrCreate() # 业务逻辑保持不变 df = spark.read.text("some_input_file.txt") df.show() transformed_df = df.selectExpr("length(value) as length") transformed_df.show() transformed_df.write.mode('overwrite').csv("some_output_file.csv") spark.stop()
2. 调整Log4j配置文件
扩展日志记录的包范围到io.openlineage主包,确保所有组件日志都能输出:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="warn"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Logger name="io.openlineage" level="info"> <AppenderRef ref="Console"/> </Logger> <Root level="error"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
3. 修正spark-submit命令
显式指定driver类路径,确保Agent JAR被正确加载:
spark-submit \ --jars openlineage-spark-1.4.1.jar \ --files log4j-openlineage.xml \ --driver-class-path openlineage-spark-1.4.1.jar \ openlineage_spark.py
4. 版本兼容性验证
确认你的Spark版本与OpenLineage Agent匹配:
- OpenLineage 1.4.1兼容Spark 3.1.x/3.2.x/3.3.x
- 若使用Spark 3.0或更低版本,需降级OpenLineage Agent到1.0.x系列
验证结果
执行任务后,控制台会输出OpenLineage的事件日志,示例如下:
14:22:15.678 [main] INFO io.openlineage.spark.agent.backends.ConsoleLoggingBackend - {"eventType":"START","run":{"runId":"abc123"},"job":{"namespace":"test","name":"PySpark OpenLineage Example"},"inputs":[],"outputs":[]}
若仍无输出,检查spark.openlineage.debug=true的调试日志,确认Agent是否成功加载。
内容的提问来源于stack exchange,提问作者Maarten
相关产品推荐
相关产品推荐

