java.io.IOException: не удалось найти исполняемый файл null \ bin \ winutils.exe в двоичных файлах Hadoop. Spark Eclipse на Windows 7

92

Я не могу выполнить простую sparkработу в Scala IDE(проекте Maven Spark), установленном наWindows 7

Добавлена ​​зависимость ядра Spark.

val conf = new SparkConf().setAppName("DemoDF").setMaster("local")
val sc = new SparkContext(conf)
val logData = sc.textFile("File.txt")
logData.count()

Ошибка:

16/02/26 18:29:33 INFO SparkContext: Created broadcast 0 from textFile at FrameDemo.scala:13
16/02/26 18:29:34 ERROR Shell: Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
    at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:278)
    at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:300)
    at org.apache.hadoop.util.Shell.<clinit>(Shell.java:293)
    at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:76)
    at org.apache.hadoop.mapred.FileInputFormat.setInputPaths(FileInputFormat.java:362)
    at <br>org.apache.spark.SparkContext$$anonfun$hadoopFile$1$$anonfun$33.apply(SparkContext.scala:1015)
    at org.apache.spark.SparkContext$$anonfun$hadoopFile$1$$anonfun$33.apply(SparkContext.scala:1015)
    at <br>org.apache.spark.rdd.HadoopRDD$$anonfun$getJobConf$6.apply(HadoopRDD.scala:176)
    at <br>org.apache.spark.rdd.HadoopRDD$$anonfun$getJobConf$6.apply(HadoopRDD.scala:176)<br>
    at scala.Option.map(Option.scala:145)<br>
    at org.apache.spark.rdd.HadoopRDD.getJobConf(HadoopRDD.scala:176)<br>
    at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:195)<br>
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:239)<br>
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:237)<br>
    at scala.Option.getOrElse(Option.scala:120)<br>
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:237)<br>
    at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:35)<br>
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:239)<br>
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:237)<br>
    at scala.Option.getOrElse(Option.scala:120)<br>
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:237)<br>
    at org.apache.spark.SparkContext.runJob(SparkContext.scala:1929)<br>
    at org.apache.spark.rdd.RDD.count(RDD.scala:1143)<br>
    at com.org.SparkDF.FrameDemo$.main(FrameDemo.scala:14)<br>
    at com.org.SparkDF.FrameDemo.main(FrameDemo.scala)<br>
Эльфийский клинок
источник

Ответы:

142

Вот хорошее объяснение вашей проблемы с решением.

  1. Загрузите winutils.exe с http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe .
  2. Настройте переменную среды HADOOP_HOME на уровне ОС или программно:

    System.setProperty ("hadoop.home.dir", "полный путь к папке с winutils");

  3. наслаждаться

Taky
источник
14
Мне нужно установить HADOOP_HOME в папку hadoop вместо папки bin.
Стэнли
4
Кроме того, не забудьте загрузить правильный файл winutils.exe на основе версии hadoop, для которой скомпилирован Spark (не обязательно по ссылке выше). Иначе ждут боли :)
NP3
System.setProperty ("hadoop.home.dir", "C: \\ hadoop-2.7.1 \\")
Шьям Гупта,
1
да, именно так, как говорит @Stanley. работал с настройкой HADOOP_HOME в папку hadoop вместо папки bin.
Джаз
@ NP3 а как узнать ту версию? Я использую последнюю версию pyspark. Спасибо,
JDPeckham
66
  1. Скачать winutils.exe
  2. Создать папку, скажем C:\winutils\bin
  3. Скопируйте winutils.exeвнутрьC:\winutils\bin
  4. Установите для переменной среды HADOOP_HOMEзначениеC:\winutils
Деокант Гупта
источник
Кроме того, если у вас открыта строка cmd, перезапустите ее, чтобы переменные вступили в силу.
eych
26

Следить за этим:

  1. Создайте binпапку в любом каталоге (для использования на шаге 3).

  2. Загрузите winutils.exe и поместите его в каталог bin.

  3. Теперь добавьте System.setProperty("hadoop.home.dir", "PATH/TO/THE/DIR");свой код.

Ани Менон
источник
2
Большое спасибо, именно то, что я искал
user373201
3
Следует отметить, что указываемый путь не должен включать каталог bin. Пример: Если путь, по которому winutils.exe - «D: //Hadoop//bin//winutils.exe», то путь для hadoop.home.dir должен быть «D: // Hadoop»
Кешав Прадип Раманат
4

если мы увидим проблему ниже

ERROR Shell: Не удалось найти двоичный файл winutils в двоичном пути hadoop

java.io.IOException: не удалось найти исполняемый файл null \ bin \ winutils.exe в двоичных файлах Hadoop.

затем выполните следующие шаги

  1. загрузите winutils.exe с http://public-repo-1.hortonworks.com/hdp- win-alpha / winutils.exe.
  2. и храните это в папке bin любой папки, для которой вы создали, например C: \ Hadoop \ bin
  3. и в программе добавьте следующую строку перед созданием SparkContext или SparkConf System.setProperty ("hadoop.home.dir", "C: \ Hadoop");
Прем С
источник
4

В Windows 10 вам следует добавить два разных аргумента.

(1) Добавьте новую переменную и значение как - HADOOP_HOME и путь (например, c: \ Hadoop) в Системные переменные.

(2) Добавить / добавить новую запись в переменную «Путь» как «C: \ Hadoop \ bin».

Вышеупомянутое сработало для меня.

user1023627
источник
4
1) Download winutils.exe from https://github.com/steveloughran/winutils 
2) Create a directory In windows "C:\winutils\bin
3) Copy the winutils.exe inside the above bib folder .
4) Set the environmental property in the code 
  System.setProperty("hadoop.home.dir", "file:///C:/winutils/");
5) Create a folder "file:///C:/temp" and give 777 permissions.
6) Add config property in spark Session ".config("spark.sql.warehouse.dir", "file:///C:/temp")"
Сампат Кумар
источник
2

У меня такая же проблема при запуске модульных тестов. Я нашел это обходное решение:

Следующий обходной путь позволяет избавиться от этого сообщения:

    File workaround = new File(".");
    System.getProperties().put("hadoop.home.dir", workaround.getAbsolutePath());
    new File("./bin").mkdirs();
    new File("./bin/winutils.exe").createNewFile();

с: https://issues.cloudera.org/browse/DISTRO-544

Джоабе Лусена
источник
2

Вы также можете скачать winutils.exeс GITHub:

https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin

замените нужной hadoop-2.7.1версией и поместите файл вD:\hadoop\bin

Если у вас нет прав доступа к настройкам переменных среды на вашем компьютере, просто добавьте в свой код следующую строку:

System.setProperty("hadoop.home.dir", "D:\\hadoop");
Саураб
источник
1

Установка переменной окружения Hadoop_Home в свойствах системы у меня не сработала. Но это произошло:

  • Установите Hadoop_Home на вкладке среды Eclipse Run Configurations.
  • Следуйте инструкциям по настройке среды Windows отсюда.
Рамья
источник
0

Помимо упоминания переменной среды для HADOOP_HOMEв windows as C:\winutils, вам также необходимо убедиться, что вы являетесь администратором компьютера. Если нет и добавление переменных среды запрашивает учетные данные администратора (даже в USERпеременных), то эти переменные будут применимы после того, как вы запустите командную строку от имени администратора.

Абхишек Сакхуджа
источник
0

Я также столкнулся с аналогичной проблемой со следующими деталями: Java 1.8.0_121, Spark spark-1.6.1-bin-hadoop2.6, Windows 10 и Eclipse Oxygen. Когда я запускал свой WordCount.java в Eclipse, используя HADOOP_HOME в качестве системной переменной как упоминалось в предыдущем посте, это не сработало, у меня сработало -

System.setProperty ("hadoop.home.dir", "ПУТЬ / К / КАТАЛОГ");

PATH / TO / THE / DIR / bin = winutils.exe независимо от того, запускаете ли вы в Eclipse как приложение Java или с помощью spark-submit из cmd, используя

spark-submit --class groupid.artifactid.classname --master local [2] / путь к файлу jar, созданному с помощью maven / путь к файлу демонстрационного теста / путь к команде выходного каталога

Пример: перейдите в папку Spark / home / location / bin и выполните искру-отправку, как указано,

D: \ BigData \ spark-2.3.0-bin-hadoop2.7 \ bin> spark-submit --class com.bigdata.abdus.sparkdemo.WordCount --master local [1] D: \ BigData \ spark-quickstart \ целевой \ spark-quickstart-0.0.1-SNAPSHOT.jar D: \ BigData \ spark-quickstart \ wordcount.txt

Абдус Мондал
источник
0

Сложный вопрос ... Ваше складское письмо должно быть емким. Например " C : \ ..."

Ахиллес
источник