Spark Streaming运行报错:期望HDFS路径而非本地目录,求解决方案
问题解决:Spark Streaming 本地运行路径错误修复
错误根源
报错核心是org.apache.hadoop.fs.InvalidPathException:Spark 默认将本地临时检查点路径C:\Users\...\Temp\...拼接至HDFS URIhdfs://0.0.0.0:19000/下,形成了非法路径hdfs://0.0.0.0:19000/C:/Users/...。这是因为Spark配置默认指向HDFS,但本地运行时需使用本地文件系统。
两种修复方案
方案1:显式指定本地检查点目录
在writeStream阶段添加本地检查点路径配置,强制Spark使用本地文件系统存储检查点数据:
from pyspark.sql import SparkSession if __name__ == "__main__": print("Application started") spark = SparkSession \ .builder \ .appName("Socket streaming demo") \ .master("local[*]")\ .getOrCreate() stream_df = spark\ .readStream\ .format("socket")\ .option("host","localhost")\ .option("port","1100")\ .load() print(stream_df.isStreaming) stream_df.printSchema() write_query = stream_df \ .writeStream\ .format("console")\ # 新增:指定本地检查点目录,替换为你本地可读写的路径 .option("checkpointLocation", "file:///D:/PySparkProject/checkpoint") .start() write_query.awaitTermination() print("Application Completed")
方案2:全局配置默认文件系统为本地
创建SparkSession时,添加配置项修改默认文件系统为本地:
spark = SparkSession \ .builder \ .appName("Socket streaming demo") \ .master("local[*]")\ # 新增:设置默认文件系统为本地 .config("fs.defaultFS", "file:///") .getOrCreate()
注意事项
- 确保指定的检查点目录具备读写权限,Windows本地路径格式为
file:///C:/xxx,Linux/macOS为file:///home/xxx - 测试场景优先选方案1,避免修改全局配置影响其他Spark任务
内容的提问来源于stack exchange,提问作者sadiq Kavungal
相关产品推荐
相关产品推荐

