java.io.IOException: Не вдалося знайти виконуваний файл null \ bin \ winutils.exe у двійкових файлах Hadoop. spark Eclipse на windows 7


92

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

Додано залежність іскрового ядра.

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>

Відповіді:


141

Ось гарне пояснення вашої проблеми з рішенням.

  1. Завантажте winutils.exe з http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe .
  2. Встановіть змінну середовища HADOOP_HOME на рівні ОС або програмно:

    System.setProperty ("hadoop.home.dir", "повний шлях до папки з winutils");

  3. Насолоджуйтесь


14
Мені потрібно встановити HADOOP_HOME у папку hadoop замість папки bin.
Стенлі

4
Крім того, не забудьте завантажити правильний winutils.exe на основі версії hadoop, для якої компілюється іскра (отже, не обов'язково посилання вище). В іншому випадку біль чекає :)
NP3

System.setProperty ("hadoop.home.dir", "C: \\ hadoop-2.7.1 \\")
Шиям Гупта,

1
так саме так, як каже @Stanley. працював із налаштуванням HADOOP_HOME для папки hadoop замість папки bin.
Джаз

@ NP3 і як ти знаєш цю версію? Я використовую останній піспарк. Дякую,
JDPeckham,

66
  1. Завантажте winutils.exe
  2. Створіть папку, скажімо C:\winutils\bin
  3. Скопіюйте winutils.exeвсерединуC:\winutils\bin
  4. Встановіть змінну середовища HADOOP_HOMEнаC:\winutils

також, якщо у вас відкрита рядок cmd, перезапустіть її, щоб змінні вплинули.
ейх

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

якщо ми бачимо нижче проблему

ПОМИЛКА 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".

Вище сказане спрацювало для мене.


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_HOMEWindows 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");

PATH / TO / THE / DIR / bin = winutils.exe, незалежно від того, запускаєте ви в Eclipse як додаток Java або шляхом іскрового подання з 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 \ target \ spark-quickstart-0.0.1-SNAPSHOT.jar D: \ BigData \ spark-quickstart \ wordcount.txt


0

Це хитро ... Ваш лист на зберігання повинен бути великим. Наприклад " C : \ ..."

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.