hadoop Pas de système de fichiers pour le système de fichier
Je suis en train de lancer un simple NaiveBayesClassifer
l'utilisation d'hadoop, 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
vers NaiveBayes.bin
fichier, et de l'objet de configuration de l'impression - Configuration: core-default.xml, core-site.xml
Je pense que c'est parce que des jarres, des idées?
- Besoin d'un peu plus d'infos...
- Ne sais pas moi, mais un rapide coup d'oeil sur google suggère qu'il y a certaines questions autour de pots de ne pas être référencé comme vous l'avez suggéré. Peut-être les liens suivants vous donneront une réponse. groups.google.com/a/cloudera.org/forum/#!topic/scm-utilisateurs/... grokbase.com/t/cloudera/cdh-user/134r64jm5t/...
- J'étais en ajoutant hadoop-common-2.0.0-cdh4.3.0-sources.jar et hadoop-core-0.20.2.jar au chemin de classe, j'ai enlevé le premier et il a travaillé ne sais pas pourquoi.
- Hmm..Pourriez-vous me dire au sujet de votre environnement? Aussi, veuillez me montrer la complète message d'exception.
- Quel est la valeur de modelPath? avez-vous essayé
file:///path/to/dir
- comme @emile suggéré, assurez-vous que vous exécutez votre jar via hadoop, pas de java. c'est à dire "il suffit d'exécuter le distribuées pot avec "hadoop jar", au lieu d'essayer de l'exécuter autonome "java-jar"."
- J'ai utilisé hadoop jar test.jar au lieu de java-jar test.jar
Vous devez vous connecter pour publier un commentaire.
C'est un cas typique de
maven-assembly
plugin casser des choses.Pourquoi cela nous est arrivé
Différents Pots (
hadoop-commons
pourLocalFileSystem
,hadoop-hdfs
pourDistributedFileSystem
) contiennent chacune un autre fichier appeléorg.apache.hadoop.fs.FileSystem
dans leurMETA-INFO/services
répertoire. Ce fichier répertorie les canonique noms de classe du système de fichiers implémentations ils veulent déclarer (Ce qui est appelé un Fournisseur de Service d'Interface implémentée viajava.util.ServiceLoader
, voirorg.apache.hadoop.FileSystem
ligne 2622).Lorsque nous utilisons
maven-assembly-plugin
, il fusionne tous nos Pots dans un, et tous lesMETA-INFO/services/org.apache.hadoop.fs.FileSystem
écraser les uns les autres. Un seul de ces fichiers reste (la dernière qui a été ajouté). Dans ce cas, leFileSystem
liste dehadoop-commons
remplace la liste dehadoop-hdfs
, doncDistributedFileSystem
n'était plus déclaré.Comment nous l'avons fixé
Après le chargement de la configuration Hadoop, mais juste avant de faire quelque chose
FileSystem
liés, nous appelons cela:Mise à jour: le corriger corriger
Il a été porté à mon attention par
krookedking
qu'il y a une configuration à base de manière à rendre lemaven-assembly
utiliser une version fusionnée de tous lesFileSystem
services de déclarations, découvrez sa réponse ci-dessous.val hadoopConfig: Configuration = spark.hadoopConfiguration hadoopConfig.set("fs.hdfs.impl", classOf[org.apache.hadoop.hdfs.DistributedFileSystem].getName) hadoopConfig.set("fs.file.impl", classOf[org.apache.hadoop.fs.LocalFileSystem].getName)
http://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs/2.2.0
à maven et le problème est résolu.Pour ceux qui utilisent l'ombre plugin, à la suite de david_p conseils, vous pouvez fusionner les services dans la ombragée bocal en ajoutant le ServicesResourceTransformer pour le plugin config:
Cela permettra de fusionner tous les org.apache.hadoop.fs.Système de fichiers des services dans un fichier
Pour l'enregistrement, il en est encore ainsi dans hadoop 2.4.0. Tellement frustrant...
J'ai été en mesure de suivre les instructions de ce lien: http://grokbase.com/t/cloudera/scm-users/1288xszz7r/no-filesystem-for-scheme-hdfs
J'ai ajouté ce qui suit à mon core-site.xml et cela a fonctionné:
M'a pris les âges de la figure avec de l'Étincelle 2.0.2, mais voici mon bits:
Et les parties pertinentes de mon
build.sbt
:J'espère que cela peut aider!
grâce david_p,scala
ou
Pour maven, il suffit d'ajouter la dépendance maven pour hadoop-hdfs (voir le lien ci-dessous) permettra de résoudre le problème.
http://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs/2.7.1
En supposant que vous utilisez mvn et de la distribution cloudera hadoop. Je suis en utilisant cdh4.6 et l'ajout de ces dépendances ont travaillé pour moi.Je pense que vous devriez vérifier les versions de hadoop et mvn dépendances.
n'oubliez pas d'ajouter cloudera mvn référentiel.
- Je utiliser sbt assemblée package de mon projet. Je rencontre aussi ce problème. Ma solution est ici.
Etape 1: ajouter des META-INF mergestrategy dans votre construction.sbt
Etape 2: ajouter des hadoop-hdfs lib à construire.sbt
Etape 3: sbt propre; sbt assemblée
Espérons que les informations ci-dessus peut vous aider.
case PathList("META-INF", "services", "org.apache.hadoop.fs.FileSystem") => MergeStrategy.filterDistinctLines
Cela permet de garder tous les systèmes de fichiersJe suppose que vous générer l'exemple de l'aide de maven.
Veuillez vérifier le contenu de la JARRE que vous essayez d'exécuter. Surtout
META-INFO/services
répertoire, fichierorg.apache.hadoop.fs.FileSystem
. Il devrait y avoir une liste de filsystem classes d'implémentation. Vérifier la ligne deorg.apache.hadoop.hdfs.DistributedFileSystem
est présent dans la liste pour HDFS etorg.apache.hadoop.fs.LocalFileSystem
pour le système de fichiers local.Si c'est le cas, vous devez remplacer les visées de ressources lors de la compilation.
Autre possibilité est que vous simplement n'avez pas
hadoop-hdfs.jar
dans votre classpath, mais cela a une probabilité faible. Habituellement, si vous avez la bonnehadoop-client
dépendance qu'elle n'est pas une option.Une autre cause possible (même si l'OPs question n'est pas lui-même souffrir de cela) si vous créez une configuration de l'instance qui ne prend pas en charge les paramètres par défaut:
Si vous n'avez pas de charger les valeurs par défaut, puis vous n'obtiendrez pas les paramètres par défaut pour des choses comme la
FileSystem
implémentations qui conduit à des erreurs de ce type lorsque vous tentez d'accéder HDFS. De commutation pour le constructeur sans paramètre de passage danstrue
pour charger les valeurs par défaut peut résoudre ce problème.De plus, si vous ajoutez une configuration personnalisée des emplacements (par exemple, sur le système de fichiers) à la
Configuration
objet d'attention de qui de surcharge deaddResource()
que vous utilisez. Par exemple, si vous utilisezaddResource(String)
puis Hadoop suppose que la chaîne est un chemin de classe de ressource, si vous avez besoin de spécifier un fichier local, essayez les opérations suivantes:Il m'a fallu quelque temps pour comprendre à fixer à partir des réponses, à cause de mon newbieness. C'est ce que j'ai trouvé, si quelqu'un d'autre a besoin d'aide dès le début:
Je suis en utilisant Étincelle 2.1
Et j'ai cette partie dans mon
build.sbt
set fs.defaultFS fonctionne pour moi! Hadoop-2.8.1
Pour SBT utilisation ci-dessous mergeStrategy dans la construction.sbt
Si vous utilisez sbt:
J'ai connu le même problème. J'ai trouvé deux solutions:
(1) Éditer le fichier jar manuellement:
Ouvrir le fichier jar avec WinRar (ou d'autres outils similaires). Aller à la Méta-info > les services , et de modifier "org.apache.hadoop.fs.Système de fichiers" en ajoutant:
(2) de Changer l'ordre de mes dépendances suivre
L'utilisation de ce plugin
Je suis aussi tombée sur des questions semblables.
Ajouté core-site.xml et hdfs-site.xml comme les ressources de la conf (objet)
Également édité des conflits de version dans pom.xml. (par exemple, Si elle est configurée version d'hadoop est 2.8.1, mais dans pom.xml fichier, des dépendances a la version 2.7.1, puis changement de 2.8.1)
Exécuter Maven installer de nouveau.
Cela a résolu d'erreur pour moi.