java.io.IOException: Hadoop ikili dosyalarında çalıştırılabilir null \ bin \ winutils.exe bulunamadı. Windows 7'de Tutulma kıvılcımı


92

(Maven kıvılcım projesinde) yüklü basit bir sparkişi çalıştıramıyorumScala IDEWindows 7

Spark çekirdek bağımlılığı eklendi.

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

Hata:

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>

Yanıtlar:


142

İşte çözümle ilgili probleminizin iyi bir açıklaması.

  1. Winutils.exe dosyasını http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe adresinden indirin .
  2. HADOOP_HOME ortam değişkeninizi işletim sistemi düzeyinde veya programlı olarak ayarlayın:

    System.setProperty ("hadoop.home.dir", "winutils içeren klasörün tam yolu");

  3. Zevk almak


14
HADOOP_HOME'u bin klasörü yerine hadoop klasörüne ayarlamam gerekiyor.
Stanley

4
Ayrıca, kıvılcım için derlenen hadoop sürümüne bağlı olarak doğru winutils.exe dosyasını indirdiğinizden emin olun (bu nedenle, yukarıdaki bağlantı olması gerekmez). Aksi takdirde, acı sizi bekliyor :)
NP3

System.setProperty ("hadoop.home.dir", "C: \\ hadoop-2.7.1 \\")
Shyam Gupta

1
evet aynen @Stanley'in dediği gibi. bin klasörü yerine HADOOP_HOME'u hadoop klasörüne kurarken çalıştı.
Jazz

@ NP3 ve bu sürümü nasıl biliyorsunuz? En son pyspark kullanıyorum. Teşekkürler,
JDPeckham

66
  1. Winutils.exe dosyasını indirin
  2. Diyelim ki klasör oluştur C:\winutils\bin
  3. winutils.exeİçini kopyalaC:\winutils\bin
  4. Set ortam değişkeni HADOOP_HOMEiçinC:\winutils

ayrıca, açık bir cmd hattınız varsa, değişkenlerin etkili olması için onu yeniden başlatın.
eych

26

Bunu takip et:

  1. binHerhangi bir dizinde bir klasör oluşturun (3. adımda kullanılacak).

  2. Winutils.exe dosyasını indirin ve bin dizinine yerleştirin.

  3. Şimdi System.setProperty("hadoop.home.dir", "PATH/TO/THE/DIR");kodunuzu ekleyin .


2
Çok teşekkürler, tam aradığım şey
user373201

3
Belirtilecek yolun 'bin' dizinini içermemesi gerektiğine dikkat edilmelidir. Ör: winutils.exe dosyasının "D: //Hadoop//bin//winutils.exe" olduğu yol "D: //Hadoop//bin//winutils.exe" ise hadoop.home.dir yolu "D: // Hadoop" olmalıdır
Keshav Pradeep Ramanath

4

aşağıdaki sorunu görürsek

HATA Kabuğu: hadoop ikili yolunda winutils ikili dosyası bulunamadı

java.io.IOException: Hadoop ikili dosyalarında çalıştırılabilir null \ bin \ winutils.exe bulunamadı.

sonra aşağıdaki adımları uygulayın

  1. http://public-repo-1.hortonworks.com/hdp- win-alpha / winutils.exe adresinden winutils.exe dosyasını indirin.
  2. ve bunu için oluşturduğunuz herhangi bir klasörün bin klasörü altında tutun. örneğin C: \ Hadoop \ bin
  3. ve programda SparkContext veya SparkConf System.setProperty ("hadoop.home.dir", "C: \ Hadoop") oluşturmadan önce aşağıdaki satırı ekleyin;

4

Windows 10'da - iki farklı argüman eklemelisiniz.

(1) Yeni değişkeni ve değeri - HADOOP_HOME ve yol (yani c: \ Hadoop) olarak Sistem Değişkenleri altına ekleyin.

(2) "Yol" değişkenine "C: \ Hadoop \ bin" olarak yeni giriş ekleyin / ekleyin.

Yukarıdakiler benim için çalıştı.


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

2

Birim testlerini çalıştırırken de aynı sorunu yaşadım. Bu geçici çözümü buldum:

Aşağıdaki geçici çözüm, bu mesajdan kurtulmanızı sağlar:

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

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



1

Sistem özelliklerinde Hadoop_Home ortam değişkenini ayarlamak benim için işe yaramadı. Ama bu yaptı:

  • Eclipse Çalıştırma Yapılandırmaları ortamı sekmesinde Hadoop_Home'u ayarlayın.
  • Buradan 'Windows Ortamı Kurulumu'nu izleyin

0

HADOOP_HOMEWindows için ortam değişkeninizden bahsetmenin yanı sıra C:\winutils, makinenin yöneticisi olduğunuzdan da emin olmanız gerekir. Değilse ve ortam değişkenleri eklemek sizden yönetici kimlik bilgilerini ( USERdeğişkenler altında bile ) sorarsa, bu değişkenler komut isteminizi yönetici olarak başlattığınızda geçerli olacaktır.


0

Java 1.8.0_121, Spark spark-1.6.1-bin-hadoop2.6, Windows 10 ve Eclipse Oxygen ile benzer bir sorunla da karşılaştım. WordCount.java'mı Eclipse'de sistem değişkeni olarak HADOOP_HOME kullanarak çalıştırdığımda önceki gönderide belirtildiği gibi, işe yaramadı, benim için işe yarayan şey -

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

YOL / TO / THE / DIR / bin = winutils.exe, Eclipse'de bir Java uygulaması olarak veya cmd'den spark-submit ile çalıştırsanız da,

spark-submit --class groupid.artifactid.classname --master local [2] / maven / yol kullanılarak oluşturulmuş jar dosyasına giden yol / bir demo test dosyasına giden yol / çıktı dizini komutuna giden yol

Örnek: Spark / home / location / bin'in çöp kutusu konumuna gidin ve spark-submit'u belirtildiği gibi çalıştırın,

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


0

Bu aldatıcı bir şey ... Depo mektubunuz kısa olmalı. Örneğin " C : \ ..."

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.