108 votes

hadoop Pas de système de fichiers pour le schéma : file

J'essaie d'exécuter un simple NaiveBayesClassifer en utilisant hadoop, j'obtiens cette erreur

Exception in thread "main" java.io.IOException: No FileSystem for scheme: file
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1375)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:66)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1390)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:196)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:95)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:180)
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:175)
    at org.apache.mahout.classifier.naivebayes.NaiveBayesModel.materialize(NaiveBayesModel.java:100)

Code :

    Configuration configuration = new Configuration();
    NaiveBayesModel model = NaiveBayesModel.materialize(new Path(modelPath), configuration);// error in this line..

modelPath pointe vers NaiveBayes.bin et l'objet de configuration est imprimé - Configuration: core-default.xml, core-site.xml

Je pense que c'est à cause des pots, des idées ?

2voto

Mohammad-Ali Points 143

J'ai rencontré le même problème. J'ai trouvé deux solutions : (1) Editer le fichier jar manuellement :

Ouvrez le fichier jar avec WinRar (ou des outils similaires). Allez dans Meta-info > services , et modifiez "org.apache.hadoop.fs.FileSystem" en ajoutant :

org.apache.hadoop.fs.LocalFileSystem

(2) Changer l'ordre de mes dépendances comme suit

<dependencies>
<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-hdfs</artifactId>
  <version>3.2.1</version>
</dependency>

<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-common</artifactId>
  <version>3.2.1</version>
</dependency>

<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-mapreduce-client-core</artifactId>
  <version>3.2.1</version>
</dependency>

<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-client</artifactId>
  <version>3.2.1</version>
</dependency>

</dependencies>

1voto

Akavall Points 7357

Il m'a fallu un certain temps pour trouver la solution à partir des réponses données, en raison de mon manque d'expérience. Voici ce que j'ai trouvé, si quelqu'un d'autre a besoin d'aide dès le début :

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf

object MyObject {
  def main(args: Array[String]): Unit = {

    val mySparkConf = new SparkConf().setAppName("SparkApp").setMaster("local[*]").set("spark.executor.memory","5g");
    val sc = new SparkContext(mySparkConf)

    val conf = sc.hadoopConfiguration

    conf.set("fs.hdfs.impl", classOf[org.apache.hadoop.hdfs.DistributedFileSystem].getName)
    conf.set("fs.file.impl", classOf[org.apache.hadoop.fs.LocalFileSystem].getName)

J'utilise Spark 2.1

Et j'ai cette partie dans mon build.sbt

assemblyMergeStrategy in assembly := {
  case PathList("META-INF", xs @ _*) => MergeStrategy.discard
  case x => MergeStrategy.first
}

1voto

Asran Deng Points 11
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://nameNode:9000");
FileSystem fs = FileSystem.get(conf);

set fs.defaultFS fonctionne pour moi ! Hadoop-2.8.1

1voto

Asad Raza Points 33

Pour SBT, utilisez la stratégie de fusion ci-dessous dans build.sbt.

mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => {
    case PathList("META-INF", "services", "org.apache.hadoop.fs.FileSystem") => MergeStrategy.filterDistinctLines
    case s => old(s)
  }
}

1voto

David Magalhães Points 186

Ceci n'est pas lié à Flink, mais j'ai trouvé ce problème dans Flink également.

Pour les personnes utilisant Flink, vous devez télécharger Hadoop pré-packagé et le mettre à l'intérieur /opt/flink/lib .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X