pyspark 如何将Spark结构化流检查点目录设置为windows本地目录?

knpiaxh1  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(202)

我的操作系统是Windows 11,Apache Spark版本是spark-3.1.3-bin-hadoop3.2
我尝试使用Spark结构化流和pyspark。下面是我的简单的Spark结构化流代码。

spark = SparkSession.builder.master("local[*]").appName(appName).getOrCreate()
spark.sparkContext.setCheckpointDir("/C:/tmp")

没有spark.sparkContext.setCheckpointDir行的相同Spark代码在Ubuntu 22.04上不会抛出错误。但是,上述代码在Windows 11上无法成功运行。

pyspark.sql.utils.IllegalArgumentException: Pathname /C:/tmp/67b1f386-1e71-4407-9713-fa749059191f from C:/tmp/67b1f386-1e71-4407-9713-fa749059191f is not a valid DFS filename.

我认为错误代码表示检查点目录是在Linux的Hadoop文件系统上生成的,而不是在Windows 11上。我的操作系统是Windows,检查点目录应该是Windows 11本地目录。我如何使用Windows 11本地目录配置Apache Spark检查点?我使用file:///C:/temphdfs://C:/temp URL进行测试。但仍然抛出错误。

更新

我将下面的行设置为注解。


# spark.sparkContext.setCheckpointDir("/C:/tmp")

则会掷回例外状况。

WARN streaming.StreamingQueryManager: Temporary checkpoint location created which is deleted normally when the query didn't fail: C:\Users\joseph\AppData\Local\Temp\temporary-be4f3586-d56a-4830-986a-78124ab5ee74. If it's required to delete it under any circumstances, please set spark.sql.streaming.forceDeleteTempCheckpointLocation to true. Important to know deleting temp checkpoint folder is best effort.

pyspark.sql.utils.IllegalArgumentException: Pathname /C:/Users/joseph/AppData/Local/Temp/temporary-be4f3586-d56a-4830-986a-78124ab5ee74 from hdfs://localhost:9000/C:/Users/joseph/AppData/Local/Temp/temporary-be4f3586-d56a-4830-986a-78124ab5ee74 is not a valid DFS filename.

我想知道为什么hdfs url包含c:/驱动程序字母,我想知道如何将spark.sql.streaming.forceDeleteTempCheckpointLocation设置为true

bihw5rsg

bihw5rsg1#

步骤1)由于您是在Windows机器上运行Spark,因此请确保将winutils.exe文件添加到hadoop bin文件夹中,以引用相同的链接(第6步)https://phoenixnap.com/kb/install-spark-on-windows-10
步骤2)然后尝试添加如下内容spark.sparkContext.setCheckpointDir("D:\Learn\Checkpoint") spark.sparkContext.setCheckpointDir(“D:\Learn\Checkpoint”)确保spark用户确实具有写入上述检查点目录的权限

相关问题