2012-10-17 14 views
7

To pytanie nie dotyczy dystrybucji słoików w całym klastrze, aby pracownicy mogli z nich korzystać.Hadoop HADOOP_CLASSPATH issues

Odnosi się do określania liczby dodatkowych bibliotek na komputerze klienta. Aby być bardziej konkretne: Próbuję uruchomić następującą komendę w celu pobrania zawartości SequenceFile:

/path/to/hadoop/script fs -text /path/in/HDFS/to/my/file 

To rzuca mi ten błąd: text: java.io.IOException: WritableName can't load class: util.io.DoubleArrayWritable

Mam zapisu klasy o nazwie DoubleArrayWritable. W rzeczywistości na innym komputerze wszystko działa dobrze.

Próbowałem ustawić, aby HADOOP_CLASSPATH zawierał słoik zawierający tę klasę, ale bez wyników. W rzeczywistości podczas pracy:

/path/to/hadoop/script classpath 

Wynik nie zawiera słoika dodanego do HADOOP_CLASSPATH.

Pytanie brzmi: w jaki sposób można określić dodatkowe biblioteki podczas uruchamiania Hadoop (za dodatkową znaczeniowych innych bibliotekach niż te, które skrypt Hadoop obejmuje automatycznie w ścieżce klasy)

Niektóre więcej informacji, które mogą pomóc:

  • nie mogę zmodyfikować skrypt hadoop.sh (ani żadnych powiązanych skrypty)
  • nie mogę skopiować moją bibliotekę do katalogu/lib w katalogu instalacyjnym Hadoop
  • W hadoop-env.sh który jest ru n od hadoop.sh jest ta linia: export HADOOP_CLASSPATH=$HADOOP_HOME/lib która prawdopodobnie tłumaczy, dlaczego mój HADOOP_CLASSPATH env var jest ignorowany.

Odpowiedz

13

Jeśli wolno ustawić HADOOP_CLASSPATH następnie

export HADOOP_CLASSPATH=/path/to/jar/myjar.jar:$HADOOP_CLASSPATH; \ 
    hadoop fs -text /path/in/HDFS/to/my/file 

będzie wykonać zadanie. Ponieważ w przypadku tej zmiennej nadpisane w hadoop-env.sh zatem rozważyć użycie opcji -libjars zamiast:

hadoop fs -libjars /path/to/jar/myjar.jar -text /path/in/HDFS/to/my/file 

Alternatywnie wywołać FsShell ręcznie:

java -cp $HADOOP_HOME/lib/*:/path/to/jar/myjar.jar:$CLASSPATH \ 
org.apache.hadoop.fs.FsShell -conf $HADOOP_HOME/conf/core-site.xml \ 
-text /path/in/HDFS/to/my/file 
+0

tak ale skrypt Hadoop robi to: export HADOOP_CLASSPATH = $ HADOOP_HOME/lib. To przepisuje moją HADOOP_CLASSPATH – Razvan

+0

@Razvan zobacz moją zaktualizowaną odpowiedź –

+0

jak już powiedziałem, nie chcę ustawiać "rozproszonej" ścieżki klas. Chcę tylko ustawić ścieżkę klas na komputerze klienta – Razvan

0

Spróbuj dodać plik jar w domyślnej zmiennej CLASSPATH a także dołącz do niego HADOOP_CLASSPATH. Następnie wykonaj polecenie.

export CLASSPATH=/your/jar/file/myjar.jar:$CLASSPATH:$HADOOP_CLASSPATH /path/to/hadoop/script fs -text /path/in/HDFS/to/my/file

+3

domyślna zmienna classpath jest ignorowana przez hadoop – Razvan