我使用spark mllib的als类来训练matrixfactorizationmodel。我已经为检查点中间RDD设置了一个hdfs(正如als类所建议的那样)。RDD已开始保存,但当它再次尝试删除它们时出现异常: java.lang.IllegalArgumentException: Wrong FS: hdfs://[url], expected: file:///
以下是堆栈跟踪:
Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS: hdfs://[url], expected: file:///
at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:642)
at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:69)
at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:516)
at org.apache.hadoop.fs.ChecksumFileSystem.delete(ChecksumFileSystem.java:528)
at org.apache.spark.ml.recommendation.ALS$$anonfun$2$$anonfun$apply$mcV$sp$1.apply(ALS.scala:568)
at org.apache.spark.ml.recommendation.ALS$$anonfun$2$$anonfun$apply$mcV$sp$1.apply(ALS.scala:566)
at scala.Option.foreach(Option.scala:236)
at org.apache.spark.ml.recommendation.ALS$$anonfun$2.apply$mcV$sp(ALS.scala:566)
at org.apache.spark.ml.recommendation.ALS$$anonfun$train$1.apply$mcVI$sp(ALS.scala:602)
at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:141)
at org.apache.spark.ml.recommendation.ALS$.train(ALS.scala:596)
at org.apache.spark.mllib.recommendation.ALS.run(ALS.scala:219)
at adapters.ALSAdapter.run(ALSAdapter.java:59) ...
罪魁祸首似乎是:
at org.apache.spark.ml.recommendation.ALS.scala 568
FileSystem.get(sc.hadoopConfiguration).delete(new Path(file), true)
它似乎返回了一个 RawLocalFilesystem
而不是分布式文件系统对象。我没碰过 sc.hadoopConfiguration
. 我唯一的互动就是打电话 myJavaStreamingContext.checkpoint(hdfs://[url + directory]);
.
在客户端设置sc.hadoopconfiguration时,我还需要做些什么,或者问题是hdfs服务器端?
我使用的是spark 1.3.1,但尝试了1.4.1,问题仍然存在。
1条答案
按热度按时间4smxwvx51#
您的sc.hadoopconfiguration使用的是本地文件系统(“fs.default.name”=file:///),尽管明确指定了检查点位置,als代码还是使用sc.hadoopconfiguration来确定文件系统(例如,删除以前的检查点,如果适用等)
您可以尝试set sc.hadoopconfiguration.set(“fs.default.name”,hfds://xx:port)设置sc.setcheckpointdir(yourcheckpointdir),只需在没有显式文件系统路径的情况下调用checkpoint,或者看看setcheckpointinterval是否适合您(即让als负责检查点)
如果不想在代码中设置sc.hadoopconfiguration.set,可以将hdfs-site.xml和core-site.xml添加到spark类路径