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

109

При запуске namenode для последней версии hadoop-2.2 возникает следующая ошибка. Я не нашел exe-файл winutils в папке bin hasoop. Я пробовал команды ниже

$ bin/hdfs namenode -format
$ sbin/yarn-daemon.sh start resourcemanager

ERROR [main] util.Shell (Shell.java:getWinUtilsPath(303)) - 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.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:863)
user2925491
источник
Пытаясь избавиться от этого сообщения об ошибке, я установил для -Dhadoop.home.dir значимое значение. Теперь я получаю что-то вроде (локальный путь заменен именем переменной): Не удалось найти исполняемый файл $ {HADOOP_HOME} \ bin \ winutils.exe в двоичных файлах Hadoop. И угадайте, что: установка переменной не привела к появлению этого двоичного файла. Также приоритет ERROR неверен, поскольку приложение, похоже, продолжает работу. На мой взгляд, это ошибка в Hadoop 2.2.0.
Hiran
Для этого существует (на сегодняшний день открыта) jira> issues.apache.org/jira/browse/HADOOP-10051
René Nyffenegger
1
Есть HADOOP-11003 .
Ремус Русану
1
Пожалуйста, примите ответ Прасада Д. Он предоставил готовые файлы для использования; таким образом избегая усилий.
Kaushik Lele

Ответы:

96

Простое решение: загрузите его отсюда и добавьте в$HADOOP_HOME/bin

( Источник )

ВАЖНОЕ ОБНОВЛЕНИЕ:

Для hadoop-2.6.0 вы можете скачать двоичные файлы из блога Titus Barik >> .

Мне нужно было не только указать HADOOP_HOMEна извлеченный каталог [path], но и предоставить системное свойство -Djava.library.path=[path]\binдля загрузки собственных библиотек (dll).

Прасад D
источник
Это помогает запустить hdfs, но когда я пытаюсь поместить текстовый файл в hdfs, он выдает ошибку Exception в потоке «main» java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsBy teArray (II [BI [BIILjava / lang / String; JZ) V
Kaushik Lele
Это частично дублирует мой ответ. Как загрузка, так и источник являются ссылками на мой блог, как указано в ответе.
Abhijit
1
Похоже, это работает и с Hadoop 2.7.3. Или возникнет проблема? 1) скачать со страницы выше. tar xfvz, который дает дистрибутив Hadoop 2.6. Затем скопируйте bin \ winutlis.exe в каталог 2.73 \ bin. Мгновенно это работает. Пока - по крайней мере.
RichMeister
28

Если вы столкнетесь с этой проблемой при запуске автономного локального приложения с Spark (например, после добавления в проект зависимости spark-assembly-xxx-hadoopx.xxjar или Maven), более простым решением будет установка winutils.exe (скачать из здесь ) в "C: \ winutil \ Bin". Затем вы можете добавить winutils.exe в домашний каталог hadoop, добавив в код следующую строку:

System.setProperty("hadoop.home.dir", "c:\\\winutil\\\")

Источник: нажмите здесь

ТрнХ
источник
Для меня этого было достаточно, чтобы вставить файл winutils hadoop/bin/bin/. Так что просто скопируйте binпапку winutils в binпапку hadoop . ( HADOOP_HOMEустановлен в env vars)
holzkohlengrill
+1 В пути к каталогу слишком много косой черты, поэтому я оставляю это для себя:System.setProperty("hadoop.home.dir", "c:\\winutil\\")
emragins
27

Если мы напрямую возьмем двоичный дистрибутив Apache Hadoop 2.2.0 и попытаемся запустить его в Microsoft Windows, то мы столкнемся с ERROR util.Shell: не удалось найти двоичный файл winutils в двоичном пути hadoop.

Бинарный дистрибутив Apache Hadoop 2.2.0 не содержит некоторых компонентов Windows (например, winutils.exe, hadoop.dll и т. Д.). Они необходимы (не являются обязательными) для запуска Hadoop в Windows.

Таким образом, вам необходимо собрать собственный двоичный дистрибутив hadoop для Windows из исходных кодов, следующих за файлом «BUILD.txt», который находится внутри исходного дистрибутива hadoop. Вы также можете следить за следующими сообщениями, чтобы получить пошаговое руководство со снимком экрана

Сборка, установка, настройка и запуск Apache Hadoop 2.2.0 в ОС Microsoft Windows

ОШИБКА util.Shell: не удалось найти двоичный файл winutils в двоичном пути hadoop

Абхиджит
источник
2
Привет, Абхиджит. Вы следовали своим собственным указаниям? Hadoop не поддерживается в Windows. На самом деле он поддерживается только в определенных версиях Windows Server. Это очень неприятно для Microsoft и HortonWorks.
javadba
2
Это было более двух лет назад и очень (очень!) Верно в то время. Я проверил это напрямую с инженерами Hortonworks всего за две недели до этого на конференции.
javadba
18

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

объясняет, что при расширении или замене переменной среды получено значение null. Если вы видите Источник в Shell.Java в Общем пакете, вы обнаружите, что переменная HADOOP_HOME не устанавливается, и вместо нее вы получаете null и, следовательно, ошибку.

Итак, для этого необходимо правильно установить HADOOP_HOME или свойство переменной hadoop.home.dir.

Надеюсь это поможет.

Спасибо, Камлешвар.

Камлешвар
источник
1
В каком файле конфигурации нам нужно установить свойство hadoop.home.dir (например, hdfs-site.xml, core-site.xml)?
Тушар Сарде
4
System.setProperty ("hadoop.home.dir", "C: \\ winutil \\"); ссылка: stackoverflow.com/a/33610936/3110474
Химаншу Бхандари
Если вы используете Windows, убедитесь, что вы используете двойную обратную косую черту при записи любого пути в качестве значения.
rishirich 04
12

Winutils.exe используется для выполнения команд оболочки SPARK. Когда вам нужно запустить Spark без установки Hadoop, вам понадобится этот файл.

Шаги следующие:

  1. Загрузите winutils.exe из следующего места для hadoop 2.7.1 https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin [ПРИМЕЧАНИЕ. Если вы используете отдельную версию hadoop, загрузите winutils из соответствующей папки версии hadoop на GITHUB из указанного выше места.]

  2. Теперь создайте папку winutils на диске C: \. Теперь создайте папку bin внутри папки winutils и скопируйте в нее файл winutils.exe. Таким образом, расположение winutils.exe будет C: \ winutils \ bin \ winutils.exe

  3. Теперь откройте переменную среды и установите HADOOP_HOME = C: \ winutils [ПРИМЕЧАНИЕ: пожалуйста, не добавляйте \ bin в HADOOP_HOME, и нет необходимости устанавливать HADOOP_HOME в пути]

Ваш вопрос должен быть решен !!

Анураг
источник
11

Я столкнулся с этой проблемой только во время работы с Eclipse. В моем случае у меня была загружена правильная версия Hadoop (hadoop-2.5.0-cdh5.3.0.tgz), я извлек содержимое и поместил его прямо на свой диск C. Затем я пошел в

Eclipse-> Debug / Run Configurations -> Environment (tab) -> и добавлено

переменная: HADOOP_HOME

Значение: C: \ hadoop-2.5.0-cdh5.3.0

Дэниел Эпштейн
источник
3

В Pyspark для запуска локального искрового приложения с использованием Pycharm используйте строки ниже

os.environ['HADOOP_HOME'] = "C:\\winutils"
print os.environ['HADOOP_HOME']
Нарсиредды
источник
2

Программа winutils.exe необходима для выполнения команд, связанных с hadoop. загрузите zip-файл hadoop-common-2.2.0. winutils.exe можно найти в папке bin. Распакуйте zip-файл и скопируйте его в локальную папку hadoop / bin.

Мохан Радж
источник
2

Я столкнулся с той же проблемой. Удаление bin\из пути HADOOP_HOME решило эту проблему для меня. Путь к переменной HADOOP_HOME должен выглядеть примерно так.

C:\dev\hadoop2.6\

Может потребоваться перезагрузка системы. В моем случае перезапуска IDE было достаточно.

Асмат Али
источник
2

Настройте переменную HADOOP_HOME в Windows, чтобы решить проблему.

Вы можете найти ответ в org/apache/hadoop/hadoop-common/2.2.0/hadoop-common-2.2.0-sources.jar!/org/apache/hadoop/util/Shell.java:

IOException из

  public static final String getQualifiedBinPath(String executable) 
  throws IOException {
    // construct hadoop bin path to the specified executable
    String fullExeName = HADOOP_HOME_DIR + File.separator + "bin" 
      + File.separator + executable;
    File exeFile = new File(fullExeName);
    if (!exeFile.exists()) {
      throw new IOException("Could not locate executable " + fullExeName
        + " in the Hadoop binaries.");
    }
    return exeFile.getCanonicalPath();
  }

HADOOP_HOME_DIR из

// first check the Dflag hadoop.home.dir with JVM scope
String home = System.getProperty("hadoop.home.dir");
// fall back to the system/user-global env variable
if (home == null) {
  home = System.getenv("HADOOP_HOME");
}
Энди
источник
2
  1. Загрузите [winutils.exe]
    с URL-адреса:
    https://github.com/steveloughran/winutils/hadoop-version / bin
  2. Пройдите через HADOOP_HOME / bin.
    Примечание. Вы должны установить переменные среды:
    Пользовательская переменная:
    Переменная : HADOOP_HOME.
    Значение : Hadoop или Spark.
Мостафа М.Шоки
источник
1

У меня была такая же проблема в Windows. Я исправил это

  • Скачивание hadoop-common-2.2.0-bin-master по ссылке .
  • Создайте пользовательскую переменную HADOOP_HOME в переменной среды и назначьте путь к общему каталогу bin HADOOP в качестве значения.
  • Вы можете проверить это, запустив hadoop в cmd.
  • Перезагрузите среду IDE и запустите ее.
Дипак Шоу
источник
1

Загрузите желаемую версию папки hadoop (скажем, если вы устанавливаете Spark в Windows, тогда версия hadoop, для которой создана ваша искра) по этой ссылке в виде zip-архива.

Распакуйте zip-архив в желаемый каталог. У вас должен быть каталог формы hadoop\bin(явно создайте такую hadoop\binструктуру каталогов, если хотите), binсодержащий все файлы, содержащиеся в binпапке загруженного хадупа. Он будет содержать много файлов, таких как hdfs.dll, hadoop.dll и т. Д., В дополнение к winutil.exe.

Теперь создайте переменную среды HADOOP_HOME и установите для нее значение <path-to-hadoop-folder>\hadoop. Затем добавьте ;%HADOOP_HOME%\bin; в PATHпеременную среды.

Откройте «новую командную строку» и попробуйте повторно выполнить команду.

Махеша999
источник
это сработало для меня, а альтернатива с HADOOP_HOME, указывающим на каталог bin (а ​​не на его родительский), не сработала.
philwalk
0

Я использовал версии "hbase-1.3.0" и "hadoop-2.7.3". Установка переменной среды HADOOP_HOME и копирование файла 'winutils.exe' в папку HADOOP_HOME / bin решает проблему в ОС Windows. Внимание, чтобы установить среду HADOOP_HOME в папку установки hadoop (для этих версий папка / bin не требуется). Кроме того, я предпочел использовать кросс-платформенный инструмент cygwin для настройки функциональности ОС Linux (насколько это возможно), потому что команда Hbase рекомендует linux / unix env.

махрас
источник