Здесь есть несколько ошибок, которые могут помочь вам, если вы не знакомы с Java.
-inputformat
(и другие параметры командной строки, которые ожидают имена классов) ожидает полное имя класса, в противном случае он ожидаетнайдите класс в некотором org.apache.hadoop...
пространстве имен.Таким образом, вы должны включить имя пакета в ваш файл .java
package org.example.hadoop;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.mapred.TextInputFormat;
public class NSTextInputFormat extends TextInputFormat {
@Override
protected boolean isSplitable(FileSystem fs, Path file) {
return false;
}
}
и указать полное имя в командной строке:
-inputformat org.example.hadoop.NSTextInputFormat
При сборке файла JAR файл .classтакже должен быть в структуре каталогов, которая отражает имя пакета.Я уверен, что это Java Packaging 101, но если вы используете потоковую передачу Hadoop, то вы, вероятно, не слишком знакомы с Java в первую очередь.Передача опции -d
в javac
скажет ему скомпилировать входные файлы в файлы .class в каталогах, которые соответствуют имени пакета.
javac -classpath `hadoop classpath` -d ./output NSTextInputFormat.java
Скомпилированный файл .class будет записан в ./output/org/example/hadoop/NSTextInputFormat.class
.Вам нужно будет создать каталог output
, но другие подкаталоги будут созданы для вас.Затем файл jar можно создать следующим образом:
jar cvf myjar.jar -C ./output/ .
И вы должны увидеть вывод, подобный следующему:
added manifest
adding: org/(in = 0) (out= 0)(stored 0%)
adding: org/example/(in = 0) (out= 0)(stored 0%)
adding: org/example/hadoop/(in = 0) (out= 0)(stored 0%)
adding: org/example/hadoop/NSTextInputFormat.class(in = 372) (out= 252)(deflated 32%)