2015-06-18 3 views
26

Я загрузил версию предварительной версии spark 1.4.0 без hadoop (с предоставленным пользователем Haddop). Когда я запускал команду искровой оболочки, я получил эту ошибку:NoClassDefFoundError com.apache.hadoop.fs.FSDataInputStream при выполнении искровой оболочки

> Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/ 
FSDataInputStream 
     at org.apache.spark.deploy.SparkSubmitArguments$$anonfun$mergeDefaultSpa 
rkProperties$1.apply(SparkSubmitArguments.scala:111) 
     at org.apache.spark.deploy.SparkSubmitArguments$$anonfun$mergeDefaultSpa 
rkProperties$1.apply(SparkSubmitArguments.scala:111) 
     at scala.Option.getOrElse(Option.scala:120) 
     at org.apache.spark.deploy.SparkSubmitArguments.mergeDefaultSparkPropert 
ies(SparkSubmitArguments.scala:111) 
     at org.apache.spark.deploy.SparkSubmitArguments.<init>(SparkSubmitArgume 
nts.scala:97) 
     at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:106) 
     at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.FSDataInputStr 
eam 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
     ... 7 more 

Я искал в Интернете, он сказал, что HADOOP_HOME еще не установлен в искровом env.cmd. Но я не могу найти spark-env.cmd в папке с искровой установкой. Я проследил команду искровой оболочки, и кажется, что там нет HADOOP_CONFIG. Я попытался добавить HADOOP_HOME в переменную среды, но все равно дает то же исключение.

На самом деле, я действительно не использую hadoop. Я скачал hadoop как обходное решение, как это предложено в this question

Я использую окна 8 и scala 2.10.

Любая помощь будет оценена по достоинству. Благодарю.

+0

У меня была та же проблема, то я установил с Hadoop-2 один и он работает нормально. – Chitrasen

ответ

33

«Без Hadoop» в имени сборки Spark вводит в заблуждение: это означает, что сборка не привязана к определенному распределению Hadoop, а не означает, что она предназначена для запуска без нее: пользователь должен указать, где найти Hadoop (см. https://spark.apache.org/docs/latest/hadoop-provided.html)

Один чистый способ решить эту проблему заключается в следующем:

  1. Получить двоичные файлы Hadoop для Windows. Идеально строить их, но это больно (некоторые подсказки см .: Hadoop on Windows Building/ Installation Error). В противном случае Google некоторые вверх, например, в настоящее время вы можете скачать 2.6.0 отсюда: http://www.barik.net/archive/2015/01/19/172716/
  2. Создать spark-env.cmd файл, глядя, как это (изменить Hadoop путь, чтобы соответствовать вашей установки): @echo off set HADOOP_HOME=D:\Utils\hadoop-2.7.1 set PATH=%HADOOP_HOME%\bin;%PATH% set SPARK_DIST_CLASSPATH=<paste here the output of %HADOOP_HOME%\bin\hadoop classpath>
  3. Надень spark-env.cmd либо в conf папка, расположенная на том же уровне, что и ваша базовая папка Spark (которая может выглядеть странно), или в папке, указанной переменной окружения SPARK_CONF_DIR.
+1

Я выполнил шаги, описанные в https://spark.apache.org/docs/latest/hadoop-provided.html, и выбрал 1-й случай с двоичным кодом 'hadoop' на вашем PATH, но я все еще получаю та же проблема. Я уже добавил HADOOP_HOME в свои переменные окружения, поэтому я не вижу причин устанавливать эту переменную в скрипте. Мог бы дать мне некоторое представление, почему эта проблема все еще появляется? – Ray

+0

Я понимаю свою проблему, но я есть один вопрос: можно ли вызывать в windows cmd-файл $ (hasoop classpath) так же, как в файле linux bash? – Ray

+0

@ Пожалуй, я мог бы помочь, но я не эксперт, все, что я могу сказать это выше работает для меня ... Я уверен, что есть способ автоматически вызвать «путь класса hadoop» в spark-env.cmd, чтобы избежать ручной копии/вставки, но я не рассматривал его. Удачи! – tiho

2

Введите в SPARK_HOME -> конф

копия искровым env.sh.template файл и переименовать его в spark-env.sh В этом файле вы можете задать параметры для искры.

+0

Спасибо за ваш ответ .. любую идею, какую переменную мне изменить? Я переименовал его в spark-env.cmd слишком, потому что я использую окна и добавляю «set HADOOP_CONF_DIR = * путь», но он дает то же исключение. – David

+0

Во-первых, попробуйте установить HADOOP_HOME в искро-env.cmd и повторно запустите его, но если снова повторяется одна и та же проблема, тогда экспортируйте файл хаопа-common jar на путь искрового класса в том же файле конфигурации. –

+0

Я установил HADOOP_HOME и скопировал файл hasoop-common.jar как в папку lib, так и в conf. Но все равно не повезло :( – David

0

Наконец-то я нашел решение удалить исключение.

В искровым class2.cmd добавить:

set HADOOP_CLASS1=%HADOOP_HOME%\share\hadoop\common\* 
set HADOOP_CLASS2=%HADOOP_HOME%\share\hadoop\common\lib\* 
set HADOOP_CLASS3=%HADOOP_HOME%\share\hadoop\mapreduce\* 
set HADOOP_CLASS4=%HADOOP_HOME%\share\hadoop\mapreduce\lib\* 
set HADOOP_CLASS5=%HADOOP_HOME%\share\hadoop\yarn\* 
set HADOOP_CLASS6=%HADOOP_HOME%\share\hadoop\yarn\lib\* 
set HADOOP_CLASS7=%HADOOP_HOME%\share\hadoop\hdfs\* 
set HADOOP_CLASS8=%HADOOP_HOME%\share\hadoop\hdfs\lib\* 

set CLASSPATH=%HADOOP_CLASS1%;%HADOOP_CLASS2%;%HADOOP_CLASS3%;%HADOOP_CLASS4%;%HADOOP_CLASS5%;%HADOOP_CLASS6%;%HADOOP_CLASS7%;%HADOOP_CLASS8%;%LAUNCH_CLASSPATH% 

Тогда изменение:

"%RUNNER%" -cp %CLASSPATH%;%LAUNCH_CLASSPATH% org.apache.spark.launcher.Main %* > %LAUNCHER_OUTPUT% 

к:

"%RUNNER%" -Dhadoop.home.dir=*hadoop-installation-folder* -cp %CLASSPATH% %JAVA_OPTS% %* 

Он отлично работает со мной, но я не уверен, что это лучшее решение.

5

Я столкнулся с той же ошибкой при попытке ознакомиться с искрами. Мое понимание сообщения об ошибке состоит в том, что, хотя для искры не требуется кластер hadoop для запуска, ему нужны некоторые классы hadoop.Поскольку я просто играл вокруг с искровым светом, и мне все равно, какая версия библиотек для использования, я только что загрузил искровую бинарную версию, предварительно построенную с версией hadoop (2.6), и все стало нормально работать.

13

У меня была такая же проблема, на самом деле она упоминается на странице Начало работы искрового как справиться с этим:

### in conf/spark-env.sh ### 

# If 'hadoop' binary is on your PATH 
export SPARK_DIST_CLASSPATH=$(hadoop classpath) 

# With explicit path to 'hadoop' binary 
export SPARK_DIST_CLASSPATH=$(/path/to/hadoop/bin/hadoop classpath) 

# Passing a Hadoop configuration directory 
export SPARK_DIST_CLASSPATH=$(hadoop --config /path/to/configs classpath) 

Если вы хотите использовать свой собственный Hadoop следовать одному из 3-х вариантов, копировать и вставьте его в spark-env.sh файл:

1-, если у вас есть Hadoop на вашем пути

2 вы хотите показать Hadoop бинарного явно

3 вы можете также показать папке конфигурации Hadoop

http://spark.apache.org/docs/latest/hadoop-provided.html

0

Благодарю вас так много. Это отлично поработало, но мне также пришлось добавить искровые баночки в classpath: ; c: \ spark \ lib * Также в последней строке cmd-файла отсутствует слово «echo»; поэтому он должен сказать: эхо% SPARK_CMD%

0

Я была такая же проблема .... Исключение в потоке "главный" java.lang.NoClassDefFoundError: орг/Apache/Hadoop/фс/ FSDataInputStream в org.apache .spark.deploy.SparkSubmitArguments $$ anonfun $ mergeDefaultSpa rkProperties $ 1.apply (SparkSubmitArguments.scala: 111) ... Тогда я понял, что я установил версию искры без hadoop. Я установил версию «with-hadoop», проблема исчезла.

0

для моего случая

работает искровой работу на местном уровне отличается от работы его на кластере. в кластере у вас может быть другая зависимость/контекст. так что по существу в вашем pom.xml у вас могут быть зависимости, объявленные как provided.

При запуске локально вам не нужны эти зависимости provided. просто расколите их и снова восстановите.

7

У меня тоже был вопрос,

export SPARK_DIST_CLASSPATH=`hadoop classpath` 

решен вопрос.

+0

полностью полезный – Turbero

0

Я столкнулся с той же ошибкой. Я хотел установить искру на моем ПК с Windows и, следовательно, загрузить без искупительной версии искры, но, оказывается, вам нужны библиотеки хаопов! поэтому загрузите любую версию искробезопасности и установите переменные среды.

1

линукс

ENV SPARK_DIST_CLASSPATH="$HADOOP_HOME/etc/hadoop/*:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/hdfs/lib/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/yarn/lib/*:$HADOOP_HOME/share/hadoop/yarn/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/tools/lib/*" 

окна

set SPARK_DIST_CLASSPATH=%HADOOP_HOME%\etc\hadoop\*;%HADOOP_HOME%\share\hadoop\common\lib\*;%HADOOP_HOME%\share\hadoop\common\*;%HADOOP_HOME%\share\hadoop\hdfs\*;%HADOOP_HOME%\share\hadoop\hdfs\lib\*;%HADOOP_HOME%\share\hadoop\hdfs\*;%HADOOP_HOME%\share\hadoop\yarn\lib\*;%HADOOP_HOME%\share\hadoop\yarn\*;%HADOOP_HOME%\share\hadoop\mapreduce\lib\*;%HADOOP_HOME%\share\hadoop\mapreduce\*;%HADOOP_HOME%\share\hadoop\tools\lib\* 
Смежные вопросы