java.io.IOException: Tidak dapat menemukan null \ bin \ winutils.exe yang dapat dieksekusi di binari Hadoop. percikan Eclipse di windows 7

92

Saya tidak dapat menjalankan sparkpekerjaan sederhana di Scala IDE(proyek percikan Maven) yang diinstalWindows 7

Ketergantungan inti percikan telah ditambahkan.

val conf = new SparkConf().setAppName("DemoDF").setMaster("local")
val sc = new SparkContext(conf)
val logData = sc.textFile("File.txt")
logData.count()

Kesalahan:

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>
Elvish_Blade
sumber

Jawaban:

142

Berikut adalah penjelasan yang bagus tentang masalah Anda dengan solusinya.

  1. Unduh winutils.exe dari http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe .
  2. Siapkan variabel lingkungan HADOOP_HOME Anda di tingkat OS atau secara terprogram:

    System.setProperty ("hadoop.home.dir", "jalur lengkap ke folder dengan winutils");

  3. Nikmati

Taky
sumber
14
Saya harus mengatur HADOOP_HOME ke folder hadoop alih-alih folder bin.
Stanley
4
Juga, pastikan untuk mengunduh winutils.exe yang benar berdasarkan versi hadoop yang dikompilasi oleh spark (jadi, belum tentu tautan di atas). Jika tidak, rasa sakit menunggu :)
NP3
System.setProperty ("hadoop.home.dir", "C: \\ hadoop-2.7.1 \\")
Shyam Gupta
1
ya persis seperti yang dikatakan @Stanley. bekerja dengan menyiapkan folder HADOOP_HOME ke hadoop, bukan folder bin.
Jazz
@ NP3 dan bagaimana Anda tahu versi itu? Saya menggunakan pyspark terbaru. Terima kasih,
JDPeckham
66
  1. Unduh winutils.exe
  2. Buat folder, katakanlah C:\winutils\bin
  3. Salin winutils.exedi dalamC:\winutils\bin
  4. Tetapkan variabel lingkungan HADOOP_HOMEkeC:\winutils
Deokant Gupta
sumber
juga, jika Anda memiliki baris cmd terbuka, mulai ulang agar variabel terpengaruh.
eych
26

Ikuti ini:

  1. Buat binfolder di direktori mana pun (untuk digunakan di langkah 3).

  2. Unduh winutils.exe dan letakkan di direktori bin.

  3. Sekarang tambahkan System.setProperty("hadoop.home.dir", "PATH/TO/THE/DIR");kode Anda.

Ani Menon
sumber
2
Terima kasih banyak, hanya apa yang saya cari
user373201
3
Perlu dicatat bahwa jalur yang akan dituju tidak boleh menyertakan direktori 'bin'. Contoh: Jika jalur di mana winutils.exe adalah "D: //Hadoop//bin//winutils.exe", maka jalur untuk hadoop.home.dir harus "D: // Hadoop"
Keshav Pradeep Ramanath
4

jika kita melihat masalah di bawah ini

ERROR Shell: Gagal menemukan biner winutils di jalur biner hadoop

java.io.IOException: Tidak dapat menemukan null \ bin \ winutils.exe yang dapat dieksekusi di binari Hadoop.

kemudian lakukan langkah-langkah berikut

  1. unduh winutils.exe dari http://public-repo-1.hortonworks.com/hdp- win-alpha / winutils.exe.
  2. dan simpan ini di bawah folder bin dari folder apa pun yang Anda buat. misalnya C: \ Hadoop \ bin
  3. dan dalam program tambahkan baris berikut sebelum membuat SparkContext atau SparkConf System.setProperty ("hadoop.home.dir", "C: \ Hadoop");
Prem S
sumber
4

Di Windows 10 - Anda harus menambahkan dua argumen berbeda.

(1) Tambahkan variabel dan nilai baru sebagai - HADOOP_HOME dan jalur (yaitu c: \ Hadoop) di bawah Variabel Sistem.

(2) Tambahkan / tambahkan entri baru ke variabel "Path" sebagai "C: \ Hadoop \ bin".

Di atas berhasil untuk saya.

pengguna1023627
sumber
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")"
Sampat Kumar
sumber
2

Saya mendapat masalah yang sama saat menjalankan tes unit. Saya menemukan solusi solusi ini:

Solusi berikut memungkinkan untuk menghilangkan pesan ini:

    File workaround = new File(".");
    System.getProperties().put("hadoop.home.dir", workaround.getAbsolutePath());
    new File("./bin").mkdirs();
    new File("./bin/winutils.exe").createNewFile();

dari: https://issues.cloudera.org/browse/DISTRO-544

Joabe Lucena
sumber
2

Sebagai alternatif, Anda dapat mengunduh winutils.exedari GITHub:

https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin

ganti hadoop-2.7.1dengan versi yang Anda inginkan dan tempatkan file tersebutD:\hadoop\bin

Jika Anda tidak memiliki hak akses ke pengaturan variabel lingkungan pada mesin Anda, cukup tambahkan baris di bawah ini ke kode Anda:

System.setProperty("hadoop.home.dir", "D:\\hadoop");
Saurabh
sumber
1

Menyetel variabel lingkungan Hadoop_Home di properti sistem tidak berhasil untuk saya. Tapi ini berhasil:

  • Setel Hadoop_Home di tab lingkungan Eclipse Run Configurations.
  • Ikuti 'Pengaturan Lingkungan Windows' dari sini
Ramya
sumber
0

Selain menyebutkan variabel lingkungan Anda untuk HADOOP_HOMEdi windows sebagai C:\winutils, Anda juga perlu memastikan bahwa Anda adalah administrator mesin. Jika tidak dan menambahkan variabel lingkungan meminta Anda untuk kredensial admin (bahkan di bawah USERvariabel) maka variabel ini akan berlaku setelah Anda memulai prompt perintah sebagai administrator.

Abhishek Sakhuja
sumber
0

Saya juga menghadapi masalah serupa dengan detail berikut Java 1.8.0_121, Spark spark-1.6.1-bin-hadoop2.6, Windows 10 dan Eclipse Oxygen. Saat saya menjalankan WordCount.java di Eclipse menggunakan HADOOP_HOME sebagai variabel sistem seperti yang disebutkan di posting sebelumnya, itu tidak berhasil, yang berhasil untuk saya adalah -

System.setProperty ("hadoop.home.dir", "PATH / TO / THE / DIR");

PATH / TO / THE / DIR / bin = winutils.exe apakah Anda menjalankan dalam Eclipse sebagai aplikasi Java atau dengan spark-submit dari cmd menggunakan

spark-submit --class groupid.artifactid.classname --master local [2] / path ke file jar yang dibuat menggunakan maven / path ke file uji demo / path ke perintah direktori keluaran

Contoh: Pergi ke lokasi bin Spark / home / location / bin dan jalankan spark-submit seperti yang disebutkan,

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

Abdus Mondal
sumber
0

Itu rumit ... Surat penyimpanan Anda harus berbentuk huruf kapital. Misalnya " C : \ ..."

Achilles
sumber