Hadoop ikili yolunda winutils ikili dosyası bulunamadı


109

En son hadoop-2.2 sürümü için namenode başlatılırken aşağıdaki hatayı alıyorum. Winutils exe dosyasını hadoop bin klasöründe bulamadım. Aşağıdaki komutları denedim

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


Bu hata mesajından kurtulmaya çalışarak -Dhadoop.home.dir'i anlamlı bir değere ayarladım. Şimdi şöyle bir şey alıyorum (yerel yol değişken adı ile değiştirildi): Hadoop ikili dosyalarında yürütülebilir $ {HADOOP_HOME} \ bin \ winutils.exe bulunamadı. Ve tahmin edin ne oldu: Değişkeni ayarlamak, bu ikilinin görünmesini sağlamadı. Ayrıca uygulama devam ediyor gibi göründüğü için öncelik ERROR yanlıştır. Benim gözümde bu Hadoop 2.2.0'daki bir hata.
Hiran

Bunun için (bugün açık olduğu gibi) bir jira var> issues.apache.org/jira/browse/HADOOP-10051
René Nyffenegger


1
Lütfen Prasad D tarafından verilen cevabı kabul edin. Kullanılması için hazır dosyalar sağladı; böylece çabalardan kaçınıyor.
Kaushik Lele

Yanıtlar:


96

Basit Çözüm: Buradan indirin ve şuraya ekleyin:$HADOOP_HOME/bin

( Kaynak )

ÖNEMLİ GÜNCELLEME:

İçin Hadoop-2.6.0 sizden ikili indirebilirsiniz >> Titus Barik blog .

Sadece HADOOP_HOMEçıkarılan dizini işaret etmem gerekmiyor [path], aynı zamanda -Djava.library.path=[path]\binyerel kütüphaneleri (dll) yüklemek için sistem özelliği sağlamam gerekiyor.


Bu, hdf'leri başlatmaya yardımcı olur, ancak bir metin dosyasını hdfs'ye koymaya çalıştığımda, "main" iş parçacığında Exception "ana" java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsBy teArray (II [BI [BIILjava / lang / String; JZ) V
Kaushik Lele

Cevabımın kısmen kopyası. Hem indirme hem de kaynak, yanıtta belirtildiği gibi blogumun bağlantılarıdır.
Abhijit

1
Bu, Hadoop 2.7.3 ile de çalışıyor gibi görünüyor. Yoksa bir sorun mu olur? 1) yukarıdaki sayfadan indirin. tar xfvz, bir Hadoop 2.6 dağılımı verir. Sonra bin \ winutlis.exe dosyasını 2.73 \ bin dizinine kopyalayın. Anında çalışır. Şimdiye kadar - en azından.
RichMeister

28

Spark ile bağımsız bir yerel uygulama çalıştırırken bu sorunla karşılaşırsanız (yani projeye spark-assembly-xxx-hadoopx.xxjar veya Maven bağımlılığını ekledikten sonra), daha basit bir çözüm winutils.exe'yi koymak olacaktır (indirme dan buraya olarak) "C: \ \ bin winutil". Ardından, koda aşağıdaki satırı ekleyerek winutils.exe'yi hadoop ana dizinine ekleyebilirsiniz:

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

Kaynak: Buraya tıklayın


Benim için winutils eşyalarını koymak yeterliydi hadoop/bin/bin/. Bu yüzden winutils binklasörünü hadoop'un klasörüne binkopyalayın. ( HADOOP_HOME
ortam

+1 Dizin yolunda çok fazla eğik çizgi var, bu yüzden bunu burada kendime bırakıyorum:System.setProperty("hadoop.home.dir", "c:\\winutil\\")
emragins

27

Apache Hadoop 2.2.0 sürümünün ikili dağıtımını doğrudan alırsak ve Microsoft Windows üzerinde çalıştırmayı denersek, ERROR util.Shell: hadoop ikili yolunda winutils ikili dosyasını bulamadık.

Apache Hadoop 2.2.0 sürümünün ikili dağıtımı, bazı Windows yerel bileşenlerini (winutils.exe, hadoop.dll vb.) İçermez. Hadoop'u Windows'ta çalıştırmak için bunlar gereklidir (isteğe bağlı değildir).

Bu nedenle hadoop'un kaynak dağıtımında bulunan "BUILD.txt" dosyasını izleyerek, hadoop'un kaynak kodlarından Windows yerel ikili dağıtımını oluşturmanız gerekir. Ekran görüntüsü ile adım adım kılavuz için aşağıdaki gönderileri de takip edebilirsiniz.

Microsoft Windows İşletim Sisteminde Apache Hadoop 2.2.0'ı Oluşturun, Kurun, Yapılandırın ve Çalıştırın

ERROR util.Shell: hadoop ikili yolunda winutils ikili dosyası bulunamadı


2
Merhaba Abhijit. Kendi talimatlarını takip ettin mi? Hadoop, Windows'ta desteklenmemektedir. Aslında yalnızca Windows Server'ın belirli sürümlerinde desteklenir. Bu Microsoft ve HortonWorks için çok kötü.
javadba

2
Bu iki yıldan fazla bir süre önceydi ve o zamanlar çok (çok!) Doğruydu. Sadece iki hafta önce bir konferansta Hortonworks mühendisleriyle doğrulamıştım.
javadba

18

Java.io.IOException ifadesi: Yürütülebilir null \ bin \ winutils.exe bulunamadı

bir Ortam Değişkenini genişletirken veya değiştirirken boş değerin alındığını açıklar. Source'u Shell.Java'da Common Package'da görürseniz, HADOOP_HOME değişkeninin ayarlanmadığını ve bunun yerine null aldığınızı ve dolayısıyla hatayı göreceksiniz.

Bu nedenle, HADOOP_HOME'un bunun için doğru şekilde ayarlanması veya hadoop.home.dir değişkeninin olması gerekir.

Bu yardımcı olur umarım.

Teşekkürler Kamleshwar.


1
Hangi yapılandırma dosyasında hadoop.home.dir özelliğini ayarlamamız gerekir (Örn. Hdfs-site.xml, core-site.xml)?
Tushar Sarde

4
System.setProperty ("hadoop.home.dir", "C: \\ winutil \\"); referans: stackoverflow.com/a/33610936/3110474
Himanshu Bhandari

Windows kullanıyorsanız, herhangi bir yolu değer olarak yazarken çift ters eğik çizgi kullandığınızdan emin olun.
rishirich

12

Winutils.exe, SPARK için kabuk komutlarını çalıştırmak için kullanılır. Spark'ı Hadoop'u kurmadan çalıştırmanız gerektiğinde, bu dosyaya ihtiyacınız vardır.

Adımlar aşağıdaki gibidir:

  1. Hadoop 2.7.1 https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin için winutils.exe dosyasını aşağıdaki konumdan indirin [NOT: Ayrı hadoop sürümünü kullanıyorsanız lütfen GITHUB'daki ilgili hadoop sürüm klasöründen yukarıda belirtilen konumdan winutils.]

  2. Şimdi, C: \ sürücüsünde bir 'winutils' klasörü oluşturun. Şimdi 'winutils' klasörünün içinde bir 'bin' klasörü oluşturun ve winutils.exe dosyasını bu klasöre kopyalayın. Dolayısıyla winutils.exe dosyasının konumu C: \ winutils \ bin \ winutils.exe olacaktır.

  3. Şimdi, açık ortam değişkeni ve HADOOP_HOME = C ayarlayın: \ winutils [NOT: katmayan Lütfen \ bin içinde HADOOP_HOME ve Yolu ayarlanan HADOOP_HOME gerek]

Sorununuz çözülmeli !!


11

Eclipse ile çalışırken bu sorunla karşılaştım. Benim durumumda, doğru Hadoop sürümünü indirdim (hadoop-2.5.0-cdh5.3.0.tgz), içerikleri çıkardım ve doğrudan C sürücüme yerleştirdim. O zaman ben gittim

Eclipse-> Hata Ayıklama / Çalıştırma Yapılandırmaları -> Ortam (sekme) -> ve eklendi

değişken: HADOOP_HOME

Değer: C: \ hadoop-2.5.0-cdh5.3.0



3

Pyspark'ta Pycharm kullanarak yerel kıvılcım uygulamasını çalıştırmak için aşağıdaki satırları kullanın

os.environ['HADOOP_HOME'] = "C:\\winutils"
print os.environ['HADOOP_HOME']

2

hadoop'un hadoop ile ilgili komutları gerçekleştirmesi için winutils.exe gereklidir. lütfen hadoop-common-2.2.0 zip dosyasını indirin. winutils.exe, bin klasöründe bulunabilir. Zip dosyasını çıkarın ve yerel hadoop / bin klasörüne kopyalayın.


2

Ben de aynı problemle karşı karşıyaydım. Çıkarma bin\HADOOP_HOME yolundan benim için çözüldü. HADOOP_HOME değişkeninin yolu şuna benzemelidir.

C:\dev\hadoop2.6\

Sistemin yeniden başlatılması gerekebilir. Benim durumumda IDE'yi yeniden başlatmak yeterliydi.


2

Sorunu çözmek için pencerelerde HADOOP_HOME değişkenini ayarlayın .

Cevabı şurada bulabilirsiniz 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");
}


1

Pencerelerde de aynı sorunu alıyordum. Tarafından düzelttim

  • Hadoop-common-2.2.0-bin-master'ı bağlantıdan indirme .
  • Ortam değişkeninde bir kullanıcı değişkeni HADOOP_HOME oluşturun ve hadoop-common bin dizininin yolunu bir değer olarak atayın.
  • Cmd'de hadoop'u çalıştırarak doğrulayabilirsiniz.
  • IDE'yi yeniden başlatın ve Çalıştırın.

1

Hadoop klasörünün istenen sürümünü bu bağlantıdan zip olarak indirin (Windows'a spark ve ardından kıvılcımınızın oluşturduğu hadoop sürümünü yüklüyorsanız) .

Zip dosyasını istenen dizine çıkarın. İndirilen hadoopun klasöründe bulunan tüm dosyaları içeren formun dizinine sahip olmanız gerekir hadoop\bin( hadoop\binisterseniz bu tür dizin yapısını açıkça oluşturun ) . Bu, winutil.exe'ye ek olarak hdfs.dll, hadoop.dll vb. Gibi birçok dosyayı içerecektir.binbin

Şimdi ortam değişkeni oluşturun HADOOP_HOME ve bunu olarak ayarlayın <path-to-hadoop-folder>\hadoop. Ardından eklemek ;%HADOOP_HOME%\bin; için PATHortam değişkeni.

"Yeni bir komut istemi" açın ve komutunuzu yeniden çalıştırmayı deneyin.


bu benim için çalıştı ve HADOOP_HOME'un bin dizinini işaret ettiği alternatif (ana dizin yerine) işe yaramadı.
philwalk

0

"Hbase-1.3.0" ve "hadoop-2.7.3" sürümlerini kullandım. HADOOP_HOME ortam değişkeninin ayarlanması ve 'winutils.exe' dosyasının HADOOP_HOME / bin klasörünün altına kopyalanması, Windows işletim sistemindeki sorunu çözer. HADOOP_HOME ortamını hadoop kurulum klasörüne ayarlamaya dikkat edin (bu sürümler için / bin klasörü gerekli değildir). Ayrıca ben çapraz platform aracını kullanarak tercih cygwin Hbase ekibi Linux / Unix env önerdiğimiz için (mümkün olduğu kadar mümkün gibi) yerleşmek linux os işlevselliğine.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.