2017-02-03 9 views
0

Я следую за Apache Map Reduce tutorial, и я нахожусь в точке назначения каталогов ввода и вывода. Я создал оба каталога здесь:Hadoop не видит мой каталог ввода

~/projects/hadoop/WordCount/input/ 
~/projects/hadoop/WordCount/output/ 

, но когда я бегу fs, файл и каталог не найден. Я работаю как пользователь ubuntu, и ему принадлежат каталоги и входной файл.

На основе предложенного решения ниже, я потом попробовал:

Найдено мой каталог HDFS hdfs dfs -ls /, который /tmp я создал вход/и выход/внутри /tmp с mkdir

Пробовал скопировать локальный .jar to.hdfs:

hadoop fs -copyFromLocal ~projects/hadoop/WordCount/wc.jar /tmp 

Поступила:

copyFromLocal: `~projects/hadoop/WordCount/wc.jar': No such file or directory 

enter image description here

Любые идеи по устранению неполадок? Спасибо

+0

Создание входного каталога с 'Hadoop фс -mkdir/input', а затем запустить WordCount банку как' Hadoop банку wc.jar WordCount/вход/output'. Дайте мне знать, если это решит – franklinsijo

+0

Спасибо, я думаю, что это сработает! Я смог создать вход/в hdf. Один вопрос: как я могу получить файл входных данных в hdfs/input и мне нужно создавать/выводить таким же образом или это локально? Я предполагаю, что ваше сообщение объяснит и спасибо – Slinky

+0

Я объяснил это как ответ – franklinsijo

ответ

1

MapReduce ожидает Input и Output пути быть каталоги в HDFS и не местные, если кластер не сконфигурирован в локальном режиме. Также должен существовать каталог ввода, а Output не должен.

Например:

Если Input является /mapreduce/wordcount/input/, этот каталог должен быть создан с помощью всех входных файлов в ней. Для их создания используйте команды HDFS.

hdfs dfs -mkdir -p /mapreduce/wordcount/input/ 
hdfs dfs -copyFromLocal file1 file2 file3 /mapreduce/wordcount/input/ 

file1 file2 file3 локально доступны входные файлы

И если Выход /examples/wordcount/output/. Родительские каталоги должны существовать, но не каталог output/. Hadoop создает его при выполнении задания.

hdfs dfs -mkdir -p /examples/wordcount/ 

Сосуд используется для работы, в данном случае wc.jar должен находиться на месте и на исполнении обеспечивает абсолютный или относительный путь к локальной команде.

Так последняя команда будет выглядеть

hadoop jar /path/where/the/jar/is/wc.jar ClassName /mapreduce/wordcount/input/ /examples/wordcount/output/ 
+1

Спасибо за четкое объяснение. Это действительно помогло мне разобраться в проблеме, и да, решение работает и еще лучше, я понимаю, что я делаю неправильно, и знаю лучше идти вперед. – Slinky

1

Как hadoop Invalid Input Exception предполагает, что он не может найти местоположение «/ home/ubuntu/projects/hadoop/WordCount/input».

Это локальный или HDFS-путь? Я думаю, что это локально, поэтому происходит исключение ввода.

Чтобы выполнить файл jar, вы должны поместить банку в каталог HDFS. И входные и выходные каталоги также должны быть в HDFS.

Используйте команду copyFromLocal скопировать банку от локального к директории Hadoop как:

hadoop fs -copyFromLocal <localsrc>/wc.jar hadoop-dir