Nie udało się zlokalizować pliku binarnego winutils w ścieżce binarnej Hadoop

108

Otrzymuję następujący błąd podczas uruchamiania namenode dla najnowszej wersji Hadoop-2.2. Nie znalazłem pliku winutils exe w folderze bin Hadoop. Wypróbowałem poniższe polecenia

$ 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
źródło
Próbując pozbyć się tego komunikatu o błędzie, ustawiłem -Dhadoop.home.dir na znaczącą wartość. Teraz otrzymuję coś takiego (lokalna ścieżka zastąpiona nazwą zmiennej): Nie można zlokalizować pliku wykonywalnego $ {HADOOP_HOME} \ bin \ winutils.exe w plikach binarnych Hadoop. I wiecie co: ustawienie zmiennej nie spowodowało pojawienia się tego pliku binarnego. Również priorytet ERROR jest nieprawidłowy, ponieważ aplikacja wydaje się kontynuować. Moim zdaniem jest to błąd w Hadoop 2.2.0.
Hiran
Istnieje (jak na dzisiejszy otwarty) jira dla tego> Issues.apache.org/jira/browse/HADOOP-10051
René Nyffenegger
1
Jest HADOOP-11003 .
Remus Rusanu
1
Proszę przyjąć odpowiedź udzieloną przez Prasad D. Dostarczył on gotowe pliki do wykorzystania; unikając w ten sposób wysiłków.
Kaushik Lele

Odpowiedzi:

96

Proste rozwiązanie: pobierz go stąd i dodaj do$HADOOP_HOME/bin

( Źródło )

WAŻNA AKTUALIZACJA:

Dla hadoop-2.6.0 możesz pobrać binaria z bloga Titus Barik >> .

Musiałem nie tylko wskazać HADOOP_HOMEwyodrębniony katalog [path], ale także podać właściwość systemową -Djava.library.path=[path]\bindo załadowania natywnych bibliotek (dll).

Prasad D
źródło
Pomaga to uruchomić hdfs, ale kiedy próbuję umieścić plik tekstowy w hdfs, wyświetla błąd Wyjątek w wątku "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsBy teArray (II [BI [BIILjava / lang / String; JZ) V
Kaushik Lele
To częściowo kopia mojej odpowiedzi. Jak wspomniano w odpowiedzi, zarówno plik do pobrania, jak i źródło są linkami do mojego bloga.
Abhijit
1
Wydaje się, że działa to również z Hadoop 2.7.3. A może byłby problem? 1) pobierz z powyższej strony. tar xfvz, który zawiera dystrybucję Hadoop 2.6. Następnie skopiuj plik bin \ winutlis.exe do katalogu 2.73 \ bin. Działa natychmiast. Jak dotąd - przynajmniej.
RichMeister,
28

Jeśli napotkasz ten problem podczas uruchamiania samodzielnej aplikacji lokalnej ze Spark (tj. Po dodaniu do projektu spark-assembly-xxx-hadoopx.xxjar lub zależności Maven), prostszym rozwiązaniem byłoby umieszczenie winutils.exe (pobierz od tutaj ) w "C: \ winutil \ bin". Następnie możesz dodać winutils.exe do katalogu domowego Hadoop, dodając następujący wiersz do kodu:

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

Źródło: Kliknij tutaj

TrnKh
źródło
Dla mnie to wystarczyło włożyć rzeczy z winutilsem hadoop/bin/bin/. Więc po prostu skopiuj binfolder winutils do folderu Hadoop bin. ( HADOOP_HOME
Akcja rozgrywa się w warach środkowych
+1 W ścieżce katalogu jest o jeden ukośnik, więc zostawiam to dla siebie:System.setProperty("hadoop.home.dir", "c:\\winutil\\")
emragins
27

Jeśli bezpośrednio weźmiemy binarną dystrybucję wydania Apache Hadoop 2.2.0 i spróbujemy uruchomić ją w systemie Microsoft Windows, napotkamy ERROR util.Shell: Nie udało się zlokalizować pliku binarnego winutils w ścieżce binarnej Hadoop.

Binarna dystrybucja wydania Apache Hadoop 2.2.0 nie zawiera niektórych natywnych komponentów systemu Windows (takich jak winutils.exe, hadoop.dll itp.). Są one wymagane (nie opcjonalne) do uruchomienia Hadoop w systemie Windows.

Musisz więc zbudować natywną dystrybucję binarną hadoopa dla systemu Windows z kodów źródłowych po pliku „BUILD.txt” znajdującym się w źródłowej dystrybucji hadoop. Możesz również śledzić następujące posty, aby uzyskać przewodnik krok po kroku ze zrzutem ekranu

Twórz, instaluj, konfiguruj i uruchamiaj Apache Hadoop 2.2.0 w systemie operacyjnym Microsoft Windows

ERROR util.Shell: nie można zlokalizować pliku binarnego Winutils w ścieżce binarnej Hadoop

Abhijit
źródło
2
Cześć Abhijit. Czy postępowałeś według własnych wskazówek? Usługa Hadoop nie jest obsługiwana w systemie Windows. W rzeczywistości jest obsługiwany tylko w niektórych wersjach systemu Windows Server. To jest bardzo kiepskie dla Microsoft i HortonWorks.
javadba
2
To było ponad dwa lata temu i wtedy było bardzo (bardzo!) Prawdziwe. Weryfikowałem bezpośrednio z inżynierami Hortonworks zaledwie dwa tygodnie przed konferencją.
javadba
18

Instrukcja java.io.IOException: nie można zlokalizować pliku wykonywalnego null \ bin \ winutils.exe

wyjaśnia, że ​​wartość null jest uzyskiwana podczas rozszerzania lub zastępowania zmiennej środowiskowej. Jeśli zobaczysz źródło w Shell.Java we wspólnym pakiecie, zauważysz, że zmienna HADOOP_HOME nie jest ustawiana i zamiast tego otrzymujesz wartość null, a zatem błąd.

Tak więc, HADOOP_HOME musi być odpowiednio ustawione lub właściwość zmiennej hadoop.home.dir.

Mam nadzieję że to pomoże.

Dzięki, Kamleshwar.

Kamleshwar
źródło
1
Na którym pliku konfiguracyjnym musimy ustawić właściwość hadoop.home.dir (np. Hdfs-site.xml, core-site.xml)?
Tushar Sarde
4
System.setProperty ("hadoop.home.dir", "C: \\ winutil \\"); odniesienie: stackoverflow.com/a/33610936/3110474
Himanshu Bhandari,
Jeśli używasz systemu Windows, upewnij się, że podczas zapisywania dowolnej ścieżki jako wartości używasz podwójnych odwrotnych ukośników.
rishirich
12

Winutils.exe służy do uruchamiania poleceń powłoki dla SPARK. Jeśli chcesz uruchomić Spark'a bez instalowania Hadoop, potrzebujesz tego pliku.

Kroki są następujące:

  1. Pobierz plik winutils.exe z następującej lokalizacji dla hadoop 2.7.1 https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin [UWAGA: Jeśli używasz oddzielnej wersji hadoop, pobierz winutils z odpowiedniego folderu wersji hadoop na GITHUB z lokalizacji, jak wspomniano powyżej.]

  2. Teraz utwórz folder „winutils” na dysku C: \. Teraz utwórz folder „bin” w folderze „winutils” i skopiuj plik winutils.exe do tego folderu. Więc lokalizacja winutils.exe będzie C: \ winutils \ bin \ winutils.exe

  3. Teraz otwórz zmienną środowiskową i ustaw HADOOP_HOME = C: \ winutils [UWAGA: Proszę nie dodawać \ bin do HADOOP_HOME i nie trzeba ustawiać HADOOP_HOME w ścieżce]

Twój problem musi zostać rozwiązany !!

Anurag
źródło
11

Właśnie napotkałem ten problem podczas pracy z Eclipse. W moim przypadku pobrałem poprawną wersję Hadoop (hadoop-2.5.0-cdh5.3.0.tgz), rozpakowałem zawartość i umieściłem ją bezpośrednio na moim dysku C. Potem poszedłem do

Eclipse-> Debug / Run Configurations -> Environment (tab) -> i dodane

zmienna: HADOOP_HOME

Wartość: C: \ hadoop-2.5.0-cdh5.3.0

Daniel Epstein
źródło
3

W Pyspark, aby uruchomić lokalną aplikację Spark przy użyciu Pycharm użyj poniższych linii

os.environ['HADOOP_HOME'] = "C:\\winutils"
print os.environ['HADOOP_HOME']
Narsireddy
źródło
2

Winutils.exe są wymagane, aby hadoop mógł wykonywać polecenia związane z hadoop. pobierz plik zip hadoop-common-2.2.0. winutils.exe można znaleźć w folderze bin. Wyodrębnij plik zip i skopiuj go do lokalnego folderu hadoop / bin.

Mohan Raj
źródło
2

Miałem ten sam problem. Usunięcie bin\ze ścieżki HADOOP_HOME rozwiązało to za mnie. Ścieżka do zmiennej HADOOP_HOME powinna wyglądać mniej więcej tak.

C:\dev\hadoop2.6\

Może być konieczne ponowne uruchomienie systemu. W moim przypadku wystarczyło zrestartowanie IDE.

Asmat Ali
źródło
2

Ustaw zmienną HADOOP_HOME w systemie Windows, aby rozwiązać problem.

Odpowiedź znajdziesz w org/apache/hadoop/hadoop-common/2.2.0/hadoop-common-2.2.0-sources.jar!/org/apache/hadoop/util/Shell.java:

IOException z

  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 z

// 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");
}
Andy
źródło
2
  1. Pobierz [winutils.exe]
    z adresu URL:
    https://github.com/steveloughran/winutils/hadoop-version / bin
  2. Wklej go w HADOOP_HOME / bin
    Uwaga: Powinieneś ustawić zmienne środowiskowe:
    Zmienna użytkownika:
    Zmienna : HADOOP_HOME
    Wartość : Hadoop lub spark dir
Mostafa M.Shawky
źródło
1

Otrzymałem ten sam problem w systemie Windows. Naprawiłem to przez

  • Pobieranie hadoop-common-2.2.0-bin-master z linku .
  • Utwórz zmienną użytkownika HADOOP_HOME w zmiennej środowiskowej i przypisz ścieżkę do wspólnego katalogu bin Hadoop jako wartość.
  • Możesz to sprawdzić, uruchamiając hadoop w cmd.
  • Uruchom ponownie IDE i uruchom je.
Dipak Shaw
źródło
1

Pobierz żądaną wersję folderu Hadoop (powiedz, że instalujesz Spark w systemie Windows, a następnie wersję Hadoop, dla której jest zbudowany Twój Spark) z tego łącza jako plik zip.

Rozpakuj plik zip do żądanego katalogu. Musisz mieć katalog formularza hadoop\bin(jawnie utwórz taką hadoop\binstrukturę katalogów, jeśli chcesz) binzawierający wszystkie pliki zawarte wbin folderze pobranego hadoopa. Będzie on zawierał wiele plików, takich jak hdfs.dll, hadoop.dll itp. Oprócz winutil.exe.

Teraz utwórz zmienną środowiskową HADOOP_HOME i ustaw ją na <path-to-hadoop-folder>\hadoop. Następnie dodać ;%HADOOP_HOME%\bin; do PATHzmiennej środowiskowej.

Otwórz „nowy wiersz polecenia” i spróbuj ponownie uruchomić polecenie.

Mahesha999
źródło
to zadziałało dla mnie, a alternatywa z HADOOP_HOME wskazującym na katalog bin (a nie jego nadrzędny) nie.
philwalk
0

Użyłem wersji "hbase-1.3.0" i "hadoop-2.7.3". Ustawienie zmiennej środowiskowej HADOOP_HOME i skopiowanie pliku „winutils.exe” do folderu HADOOP_HOME / bin rozwiązuje problem w systemie operacyjnym Windows. Uwaga, aby ustawić środowisko HADOOP_HOME na folder instalacyjny hadoop (folder / bin nie jest konieczny dla tych wersji). Dodatkowo wolałem używać narzędzia wieloplatformowego cygwin, aby ustawić funkcjonalność systemu Linux (tak jak to tylko możliwe), ponieważ zespół Hbase poleca linux / unix env.

mahkras
źródło