Подтвердить что ты не робот

NoClassDefFoundError com.apache.hadoop.fs.FSDataInputStream при выполнении искровой оболочки

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

> 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 еще не установлен в spark-env.cmd. Но я не могу найти spark-env.cmd в папке с искровой установкой. Я проследил команду искровой оболочки, и кажется, что там нет HADOOP_CONFIG. Я попытался добавить HADOOP_HOME в переменную окружения, но все равно дает то же исключение.

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

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

Любая помощь будет оценена. Спасибо.

4b9b3361

Ответ 1

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

Один из простых способов решить эту проблему:

  1. Получить двоичные файлы Hadoop для Windows. В идеале постройте их, но это болезненно (некоторые советы смотрите: Hadoop в 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.

Ответ 2

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

### 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)

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

1, если у вас есть хаоп на вашем PATH

2- вы хотите явно указать двоичный файл hadoop

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

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

Ответ 3

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

export SPARK_DIST_CLASSPATH=`hadoop classpath`

разрешил проблему.

Ответ 4

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

Ответ 5

Введите в SPARK_HOME → conf

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

Ответ 6

Linux

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\*

Ответ 7

Запустите ниже из вашего пакета dir непосредственно перед запуском spark-submit -

export SPARK_DIST_CLASSPATH='hadoop classpath'

Ответ 8

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

В spark-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%

to:

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

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

Ответ 9

Большое вам спасибо. Это отлично поработало, но мне пришлось добавить искровые банки в классный путь:; C:\искра\Lib * Кроме того, в последней строке cmd файла отсутствует слово "echo"; поэтому он должен сказать: echo% SPARK_CMD%

Ответ 10

У меня была такая же проблема... Исключение в потоке "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/ FSDataInputStream       at org.apache.spark.deploy.SparkSubmitArguments $$ anonfun $mergeDefaultSpa rkProperties $1.Apply(SparkSubmitArguments.scala: 111)... Затем я понял, что я установил версию искры без хаоса. Я установил версию "with-hadoop", проблема исчезла.

Ответ 11

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

Исходное искрообразование

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

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

Ответ 12

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

Ответ 13

Я получил эту ошибку, потому что файл был скопирован из Windows. Разрешите это, используя

dos2unix file_name

Ответ 14

Вы должны добавить эти банки в ваш код:

  1. общего кли-1.2.jar
  2. Hadoop-синфазного 2.7.2.jar