2016-09-29 14 views
0

私はApache Spark 2.0の新バージョンを構造化ストリーミング機能を使用してテストしています。ストリーミングデータを持つデータセットを作成する非常に簡単なコードを使用しています。作成したデータセットを印刷します。Apache Sparkセッション: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(); 

問題がある、私はIOExceptionを取得: これは私が持っているコードです(一時ディレクトリ)のMKDIRに失敗しました。 誰かがこの問題を私に助けてくれますか?どうもありがとうございます。

これが現れるいっぱいERRORです:

Exception in thread "main" java.io.IOException: mkdir of C:/Users/Manuel%20Mourato/AppData/Local/Temp/temporary-891579db-0442-4e1c-8642-d41c7885ab26/offsets failed 
at org.apache.hadoop.fs.FileSystem.primitiveMkdir(FileSystem.java:1065) 
at org.apache.hadoop.fs.DelegateToFileSystem.mkdir(DelegateToFileSystem.java:176) 
at org.apache.hadoop.fs.FilterFs.mkdir(FilterFs.java:197) 
at org.apache.hadoop.fs.FileContext$4.next(FileContext.java:730) 
at org.apache.hadoop.fs.FileContext$4.next(FileContext.java:726) 
at org.apache.hadoop.fs.FSLinkResolver.resolve(FSLinkResolver.java:90) 
at org.apache.hadoop.fs.FileContext.mkdir(FileContext.java:733) 
at org.apache.spark.sql.execution.streaming.HDFSMetadataLog$FileContextManager.mkdirs(HDFSMetadataLog.scala:281) 
at org.apache.spark.sql.execution.streaming.HDFSMetadataLog.<init>(HDFSMetadataLog.scala:57) 
at org.apache.spark.sql.execution.streaming.StreamExecution.<init>(StreamExecution.scala:131) 
at org.apache.spark.sql.streaming.StreamingQueryManager.startQuery(StreamingQueryManager.scala:251) 
at org.apache.spark.sql.streaming.DataStreamWriter.start(DataStreamWriter.scala:287) 
at org.apache.spark.sql.streaming.DataStreamWriter.start(DataStreamWriter.scala:231) 

答えて

0

は、この方法を試してみてくださいすることはできますか?

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

私はあなたの提案を試みましたが、それはコードをよりクリーンにしてくれましたが、私の問題を解決しませんでした。とにかくありがとう。 –

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 addingoption("checkpointLocation", ...)

+0

私はチェックしましたが、実際にパスが存在し、そのパスに書き込む権限があります。しかし、言及すべきことがあります。このIOExceptionは、 'path'の値にディレクトリを作成しようとしていないため、別のフォルダ(.../AppData/Local/Temp)にディレクトリを作成しようとしています。これは正常ですか? –

+0

いいえ、そうではありません。私はSparkコードで一時的なディレクトリを使用して検索します –

+0

ありがとうございました。私は上記の完全なエラーを含めると、それは助けるかもしれません。 –

0

くださいログが作成されるディレクトリを変更することができ、一つの方法は、同じアプリケーション・コードなどでチェックポイントディレクトリを作成することです

.config("spark.sql.streaming.checkpointLocation", "C:\\sparkApp\\checkpoints\\") 
関連する問題