Apache Spark Session:IOException:(path)的mkdir失败

时间:2016-09-29 12:25:25

标签: java apache-spark apache-spark-sql spark-structured-streaming

我正在测试新版本的Apache Spark 2.0,尝试使用结构化流媒体功能,使用非常简单的代码创建带有流数据的数据集,然后打印创建的数据集。 这是我的代码:

   blueScore++;
   blueCounter.innerHTML = "Blue has " + blueScore + " Points";

问题是我收到IOException:(临时目录)的mkdir失败。 有人可以帮我解决这个问题吗?非常感谢你。

这是显示的完整错误:

    SparkSession mySession= SparkSession.builder().appName("ProcessData").master("local[*]").config("spark.sql.warehouse.dir","System.getProperty(\"user.dir\")/warehouse").getOrCreate();
    Dataset<Row> measurements=mySession.readStream().format("socket").option("host","localhost").option("port",5556).load();
    StreamingQuery printDataset=measurements.writeStream().format("console").start();
    printDataset.awaitTermination();

3 个答案:

答案 0 :(得分:0)

可以尝试这种方式吗?

SparkSession mySession= SparkSession.builder().appName("ProcessData").master("local[*]").config("spark.sql.warehouse.dir",System.getProperty("user.dir") + "/warehouse").getOrCreate();

答案 1 :(得分:0)

为什么在字符串中使用System.getProperty? 另外,请检查是否存在这样的文件夹,即:

val tempDir = System.getProperty("user.dir");
val path = tempDir + "/warehouse";

SparkSession mySession= SparkSession.builder().appName("ProcessData").master("local[*]").config("spark.sql.warehouse.dir", path).getOrCreate();

另外,请检查您是否拥有此路径的写入权限。如果您手动创建仓库目录并设置权限应该是好的 - 您将确保一切正常

编辑:知道了! 首先,您应该检查AppData / Local / Temp的写权限,因为它是标准的临时目录。

此错误由OffsetLog引起。您可以更改将在其中创建日志的目录by adding option("checkpointLocation", ...)

答案 2 :(得分:0)

确保您还在config中设置了自己的检查点目录,该目录具有写入权限,一种方法是在相同的应用程序代码中创建检查点目录,例如,

.config("spark.sql.streaming.checkpointLocation", "C:\\sparkApp\\checkpoints\\")