Дополнительно
hadoop Нет файловой системы для схемы: файл
Я пытаюсь запустить простой NaiveBayesClassifer
, используя hadoop, и получаю эту ошибку
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)
Код :
Configuration configuration = new Configuration();
NaiveBayesModel model = NaiveBayesModel.materialize(new Path(modelPath), configuration);// error in this line..
modelPath
указывает на файл NaiveBayes.bin
, а объект конфигурации печатает - Configuration: core-default.xml, core-site.xml
.
Я думаю, что это из-за банок, есть идеи?
88
17
Это типичный случай, когда плагин
maven-assembly
ломает вещи.Почему это произошло с нами
Различные JAR (
hadoop-commons
дляLocalFileSystem
,hadoop-hdfs
дляDistributedFileSystem
) содержат каждый свой файл с именемorg.apache.hadoop.fs.FileSystem
в директорииMETA-INFO/services
. В этом файле перечислены канонические имена классов реализаций файловой системы, которые они хотят объявить (Это называется интерфейсом поставщика услуг, реализуемым черезjava.util.ServiceLoader
, см.org.apache.hadoop.FileSystem
строка 2622).Когда мы используем
maven-assembly-plugin
, он объединяет все наши JAR в один, и всеMETA-INFO/services/org.apache.hadoop.fs.FileSystem
перезаписывают друг друга. Остается только один из этих файлов (последний, который был добавлен). В данном случае списокFileSystem
изhadoop-commons
перезаписывает список изhadoop-hdfs
, поэтомуDistributedFileSystem
больше не был объявлен.Как мы это исправили
После загрузки конфигурации Hadoop, но непосредственно перед выполнением каких-либо действий, связанных с
FileSystem
, мы вызываем следующее:Обновление: правильное исправление
Мне стало известно от
krookedking
, что существует основанный на конфигурации способ заставитьmaven-сборку
использовать объединенную версию всех объявлений службFileSystem
, смотрите его ответ ниже.Для тех, кто использует плагин тени, следующие по david_p'ы консультации, вы можете объединить услуги в затененной банку, добавив ServicesResourceTransformer плагин конфиг:
Это позволит объединить все орг."Апач".в Hadoop.ПС.Сервисы файловой системы в одном файле
Взял меня возрасты, чтобы разобраться с искровым 2.0.2, но здесь's мой бит:
И соответствующие части моей сборки.СБТ`:
Я надеюсь, что это может помочь!
Для записи, это все-таки происходит в Hadoop 2.4.0. Так неприятно...
Я был в состоянии следовать инструкциям в этой ссылке: http://grokbase.com/t/cloudera/scm-users/1288xszz7r/no-filesystem-for-scheme-hdfs
Я добавил следующее в мой core-site.xml и это сработало:
благодаря david_p,скала
или
Для Maven, просто добавьте зависимостей Maven для Hadoop-системы HDFS (см. ссылку ниже) будет решить эту проблему.
http://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs/2.7.1
Предполагается, что вы используете mvn и дистрибутив hadoop от cloudera. Я использую cdh4.6 и добавление этих зависимостей сработало для меня. Я думаю, вам следует проверить версии hadoop и зависимостей mvn.
не забудьте добавить репозиторий cloudera mvn.
Я использую сборку СБТ упаковать мой проект. Я также встретиться с этой проблемой. Мое решение здесь. Шаг 1: добавить мета-инф mergestrategy в сборке.СБТ
Шаг 2: Добавить на Hadoop и HDFS lib для построения.СБТ
Шаг 3: очистить СБТ; сборка СБТ
Надеюсь, что выше информация может помочь вам.
Я предполагаю, что вы собираете образец с помощью maven.
Пожалуйста, проверьте содержимое JAR, который вы пытаетесь запустить. Особенно директорию
META-INFO/services
, файлorg.apache.hadoop.fs.FileSystem
. Там должен быть список классов реализации файловой системы. Проверьте наличие в списке строкиorg.apache.hadoop.hdfs.DistributedFileSystem
для HDFS иorg.apache.hadoop.fs.LocalFileSystem
для локальной файловой схемы.Если это так, вам необходимо переопределить указанный ресурс во время сборки.
Другая возможность - у вас просто нет
hadoop-hdfs.jar
в вашем classpath, но вероятность этого мала. Обычно, если у вас корректная зависимостьhadoop-client
, это не вариант.Другая возможная причина (хоть и в ОПС вопрос не'т сама страдаю от этого) это если вы создаете экземпляр конфигурацию, которая не загружается по умолчанию:
Если вы Don'т загрузить значения по умолчанию, то вы выиграли'т получить параметры по умолчанию, такие вещи, как
файловая система
реализаций, что приводит к идентичным подобные ошибки при попытке доступа к файловой системе HDFS. Переход на конструктор без параметров передачи в "true", чтобы загрузить значения по умолчанию могут решить эту проблему.Кроме того, при добавлении пользовательских мест конфигурации (например, в файловой системе) в конфигурации
объекта
будьте осторожны, что перегрузкаaddResource ()
, который вы используете. Например, если вы используете `addResource(строка) тогда Hadoop и предполагает, что строка-это путь к классу ресурс, если вам нужно указать локальный файл, попробуйте следующее:набор ФС.defaultFS работает для меня! В Hadoop-2.8.1
Мне потребовалось некоторое время, чтобы выяснить, исправить даны ответы, из-за моего newbieness. Это то, что я придумал, если кто-то нуждается в помощи с самого начала:
Я использую искру 2.1
И у меня эта часть в моем построении.СБТ`
Для использования СБТ ниже mergeStrategy в строй.СБТ
Я столкнулся с той же проблемой. Я нашел два решения: (1) Для редактирования jar-файл вручную:
Открыть файл jar с помощью WinRAR (или подобные инструменты). Перейти к мета-инфо > обслуживание и редактирование "в орг."Апач".в Hadoop.ПС.Файловая система" с добавлением:
(2) Изменение порядка моей зависимости, как следовать
Если вы используете СБТ:
Я тоже сталкивался с подобной проблеме. Добавлено core-site.xml и hdfs-site.xml как ресурсы конф (объекта)
Также отредактированную версию конфликтов в pom.xml. (например, если настроено версии Hadoop является 2.8.1, а в файл pom.xml , зависимостям имеет версию 2.7.1, затем изменить это, чтобы 2.8.1) Запустить Maven снова установить.
Эта ошибка решена для меня.
Использовать этот плагин