Gagal menemukan biner winutils di jalur biner hadoop


108

Saya mendapatkan kesalahan berikut saat memulai namenode untuk rilis hadoop-2.2 terbaru. Saya tidak menemukan file exe winutils di folder bin hadoop. Saya mencoba di bawah perintah

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


Mencoba menyingkirkan pesan kesalahan itu, saya menetapkan -Dhadoop.home.dir ke nilai yang berarti. Sekarang saya mendapatkan sesuatu seperti (jalur lokal diganti dengan nama variabel): Tidak dapat menemukan $ {HADOOP_HOME} \ bin \ winutils.exe yang dapat dieksekusi di binari Hadoop. Dan coba tebak: Pengaturan variabel tidak membuat biner itu muncul. Juga ERROR prioritas salah, karena aplikasi tampaknya terus berlanjut. Di mata saya, itu adalah bug di Hadoop 2.2.0.
Hiran

Ada (per hari ini buka) jira untuk ini> issues.apache.org/jira/browse/HADOOP-10051
René Nyffenegger


1
Terimalah jawaban yang diberikan oleh Prasad D. Ia telah menyediakan file-file yang sudah jadi untuk digunakan; sehingga menghindari upaya.
Kaushik Lele

Jawaban:


96

Solusi Sederhana: Unduh dari sini dan tambahkan ke$HADOOP_HOME/bin

( Sumber )

PEMBARUAN PENTING:

Untuk hadoop-2.6.0 Anda dapat mengunduh binari dari blog Titus Barik >> .

Saya tidak hanya perlu menunjuk HADOOP_HOMEke direktori yang diekstrak [path], tetapi juga menyediakan properti sistem -Djava.library.path=[path]\binuntuk memuat libs asli (dll).


Ini membantu untuk memulai hdfs tetapi ketika saya mencoba untuk meletakkan file teks ke dalam hdfs memberikan kesalahan Exception di thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsBy teArray (II [BI [BIILjava / lang / String; JZ) V
Kaushik Lele

Itu sebagian duplikat dari jawaban saya. Baik unduhan dan sumber adalah tautan blog saya seperti yang disebutkan dalam jawaban.
Abhijit

1
Ini tampaknya bekerja dengan Hadoop 2.7.3 juga. Atau apakah akan ada masalah? 1) unduh dari halaman di atas. tar xfvz yang memberikan distribusi Hadoop 2.6. Kemudian salin bin \ winutlis.exe ke direktori 2.73 \ bin. Seketika, itu berhasil. Sejauh ini - setidaknya.
RichMeister

28

Jika Anda menghadapi masalah ini saat menjalankan aplikasi lokal mandiri dengan Spark (yaitu, setelah menambahkan spark-assembly-xxx-hadoopx.xxjar atau ketergantungan Maven ke proyek), solusi yang lebih sederhana adalah meletakkan winutils.exe (unduh dari sini ) di "C: \ winutil \ bin". Kemudian Anda dapat menambahkan winutils.exe ke direktori home hadoop dengan menambahkan baris berikut ke kode:

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

Sumber: Klik di sini


Bagi saya itu cukup untuk memasukkan barang-barang winutils hadoop/bin/bin/. Jadi copy saja binfolder winutils di folder hadoop bin. ( HADOOP_HOMEdisetel di env vars)
holzkohlengrill

+1 Ada terlalu banyak garis miring di jalur direktori, jadi saya meninggalkan ini di sini untuk diri saya sendiri:System.setProperty("hadoop.home.dir", "c:\\winutil\\")
emragins

27

Jika kita secara langsung mengambil distribusi biner dari rilis Apache Hadoop 2.2.0 dan mencoba menjalankannya di Microsoft Windows, maka kita akan menemukan ERROR util.Shell: Gagal menemukan biner winutils di jalur biner hadoop.

Distribusi biner dari rilis Apache Hadoop 2.2.0 tidak berisi beberapa komponen asli windows (seperti winutils.exe, hadoop.dll, dll). Ini diperlukan (bukan opsional) untuk menjalankan Hadoop di Windows.

Jadi Anda perlu membangun distribusi biner asli windows dari hadoop dari kode sumber mengikuti file "BUILD.txt" yang terletak di dalam distribusi sumber hadoop. Anda juga dapat mengikuti posting berikut untuk panduan langkah demi langkah dengan tangkapan layar

Bangun, Instal, Konfigurasi, dan Jalankan Apache Hadoop 2.2.0 di OS Microsoft Windows

ERROR util.Shell: Gagal menemukan biner winutils di jalur biner hadoop


2
Hai Abhijit. Sudahkah Anda mengikuti arahan Anda sendiri? Hadoop tidak didukung di Windows. Sebenarnya ini hanya didukung pada versi Windows Server tertentu. Itu sangat buruk oleh Microsoft dan HortonWorks.
javadba

2
Itu lebih dari dua tahun yang lalu dan sangat (sangat!) Benar pada saat itu. Saya telah memverifikasi langsung dengan teknisi Hortonworks hanya dua minggu sebelumnya di sebuah konferensi.
javadba

18

Pernyataan java.io.IOException: Tidak dapat menemukan null \ bin \ winutils.exe yang dapat dieksekusi

menjelaskan bahwa nol diterima saat memperluas atau mengganti Variabel Lingkungan. Jika Anda melihat Source di Shell.Java di Common Package, Anda akan menemukan bahwa variabel HADOOP_HOME tidak disetel dan Anda menerima null sebagai gantinya dan karenanya terjadi kesalahan.

Jadi, HADOOP_HOME perlu disetel untuk ini dengan benar atau properti variabel hadoop.home.dir.

Semoga ini membantu.

Terima kasih, Kamleshwar.


1
Di file konfigurasi mana kita perlu menyetel properti hadoop.home.dir (Mis. Hdfs-site.xml, core-site.xml)?
Tushar Sarde

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

Jika Anda menggunakan Windows, pastikan Anda menggunakan garis miring terbalik ganda saat menulis jalur apa pun sebagai nilai.
rishirich

12

Winutils.exe digunakan untuk menjalankan perintah shell untuk SPARK. Saat Anda perlu menjalankan Spark tanpa menginstal Hadoop, Anda memerlukan file ini.

Langkah-langkahnya adalah sebagai berikut:

  1. Unduh winutils.exe dari lokasi berikut untuk hadoop 2.7.1 https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin [CATATAN: Jika Anda menggunakan versi hadoop terpisah, silakan unduh winutils dari folder versi hadoop yang sesuai di GITHUB dari lokasi seperti yang disebutkan di atas.]

  2. Sekarang, buat folder 'winutils' di C: \ drive. Sekarang buat folder 'bin' di dalam folder 'winutils' dan salin winutils.exe di folder itu. Jadi lokasi winutils.exe akan menjadi C: \ winutils \ bin \ winutils.exe

  3. Sekarang, buka variabel lingkungan dan setel HADOOP_HOME = C: \ winutils [CATATAN: Harap jangan menambahkan \ bin di HADOOP_HOME dan tidak perlu menyetel HADOOP_HOME di Path]

Masalah Anda harus diselesaikan !!


11

Saya baru saja mengalami masalah ini saat bekerja dengan Eclipse. Dalam kasus saya, saya mengunduh versi Hadoop yang benar (hadoop-2.5.0-cdh5.3.0.tgz), saya mengekstrak konten dan meletakkannya langsung di drive C. Lalu saya pergi ke

Eclipse-> Debug / Run Configurations -> Environment (tab) -> dan ditambahkan

variabel: HADOOP_HOME

Nilai: C: \ hadoop-2.5.0-cdh5.3.0



3

Di Pyspark, untuk menjalankan aplikasi percikan lokal menggunakan Pycharm gunakan baris di bawah ini

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

2

winutils.exe diperlukan untuk hadoop untuk melakukan perintah terkait hadoop. silakan unduh file zip hadoop-common-2.2.0. winutils.exe dapat ditemukan di folder bin. Ekstrak file zip dan salin di folder hadoop / bin lokal.


2

Saya menghadapi masalah yang sama. Menghapus bin\dari jalur HADOOP_HOME memecahkannya untuk saya. Path untuk variabel HADOOP_HOME akan terlihat seperti ini.

C:\dev\hadoop2.6\

Restart sistem mungkin diperlukan. Dalam kasus saya, memulai ulang IDE sudah cukup.


2

Siapkan variabel HADOOP_HOME di windows untuk menyelesaikan masalah.

Anda dapat menemukan jawabannya di org/apache/hadoop/hadoop-common/2.2.0/hadoop-common-2.2.0-sources.jar!/org/apache/hadoop/util/Shell.java:

IOException dari

  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 dari

// 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

Saya mendapatkan masalah yang sama di windows. Saya memperbaikinya dengan

  • Mendownload hadoop-common-2.2.0-bin-master dari link .
  • Buat variabel pengguna HADOOP_HOME di variabel Lingkungan dan tetapkan jalur direktori bin hadoop-common sebagai nilai.
  • Anda dapat memverifikasinya dengan menjalankan hadoop di cmd.
  • Mulai ulang IDE dan Jalankan.

1

Unduh versi folder hadoop yang diinginkan (Katakanlah jika Anda menginstal spark pada Windows maka versi hadoop yang dibuat untuk spark Anda) dari tautan ini sebagai zip.

Ekstrak zip ke direktori yang diinginkan. Anda perlu memiliki direktori dalam bentuk hadoop\bin(secara eksplisit membuat hadoop\binstruktur direktori seperti itu jika Anda mau) dengan binberisi semua file yang terdapat dalam binfolder hadoop yang diunduh. Ini akan berisi banyak file seperti hdfs.dll, hadoop.dll dll. Selain winutil.exe.

Sekarang buat variabel lingkungan HADOOP_HOME dan setel ke <path-to-hadoop-folder>\hadoop. Kemudian tambahkan ;%HADOOP_HOME%\bin; ke PATHvariabel lingkungan.

Buka "prompt perintah baru" dan coba jalankan kembali perintah Anda.


ini berhasil untuk saya, dan alternatif dengan HADOOP_HOME yang menunjuk ke direktori bin (bukan induknya) tidak.
philwalk

0

Saya menggunakan versi "hbase-1.3.0" dan "hadoop-2.7.3". Mengatur variabel lingkungan HADOOP_HOME dan menyalin file 'winutils.exe' di bawah folder HADOOP_HOME / bin memecahkan masalah pada os windows. Perhatian untuk mengatur lingkungan HADOOP_HOME ke folder instalasi hadoop (folder / bin tidak diperlukan untuk versi ini). Selain itu, saya lebih suka menggunakan alat lintas platform cygwin untuk menyelesaikan fungsionalitas os linux (sebisa mungkin) karena tim Hbase merekomendasikan linux / unix env.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.