java.io.IOException: ไม่พบ null \ bin \ winutils.exe ที่ปฏิบัติการได้ในไบนารี Hadoop spark Eclipse บน windows 7


92

ฉันไม่สามารถเรียกใช้sparkงานง่ายๆในScala IDE(โครงการ Maven spark) ที่ติดตั้งบนWindows 7

เพิ่มการพึ่งพาหลักของ Spark

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

ข้อผิดพลาด:

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>

คำตอบ:


142

นี่คือคำอธิบายที่ดีเกี่ยวกับปัญหาของคุณพร้อมวิธีแก้ปัญหา

  1. ดาวน์โหลด winutils.exe จากhttp://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe
  2. ตั้งค่าตัวแปรสภาพแวดล้อม HADOOP_HOME ของคุณในระดับ OS หรือโดยใช้โปรแกรม:

    System.setProperty ("hadoop.home.dir", "เส้นทางแบบเต็มไปยังโฟลเดอร์ที่มี winutils");

  3. สนุก


14
ฉันต้องตั้งค่า HADOOP_HOME เป็นโฟลเดอร์ hadoop แทนโฟลเดอร์ bin
Stanley

4
นอกจากนี้อย่าลืมดาวน์โหลด winutils.exe ที่ถูกต้องตามเวอร์ชันของ hadoop ที่รวบรวม spark ไว้ (ดังนั้นไม่จำเป็นต้องเป็นลิงค์ด้านบน) ไม่งั้นความเจ็บปวดรออยู่ :)
NP3

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

1
ใช่ตามที่ @Stanley พูด ทำงานร่วมกับการตั้งค่า HADOOP_HOME ไปยังโฟลเดอร์ hadoop แทนโฟลเดอร์ bin
แจ๊ส

@ NP3 แล้วรู้เวอร์ชั่นนั้นได้อย่างไร? ฉันใช้ pyspark ล่าสุด ขอบคุณ
JDPeckham

66
  1. ดาวน์โหลด winutils.exe
  2. สร้างโฟลเดอร์พูด C:\winutils\bin
  3. คัดลอกwinutils.exeภายในC:\winutils\bin
  4. ตั้งค่าตัวแปรสภาพแวดล้อมHADOOP_HOMEเป็นC:\winutils

นอกจากนี้หากคุณเปิดบรรทัด cmd ให้รีสตาร์ทเพื่อให้ตัวแปรมีผล
ตา

26

ทำตามนี้:

  1. สร้างbinโฟลเดอร์ในไดเร็กทอรีใดก็ได้ (เพื่อใช้ในขั้นตอนที่ 3)

  2. ดาวน์โหลดwinutils.exeและวางไว้ในไดเรกทอรี bin

  3. ตอนนี้เพิ่มSystem.setProperty("hadoop.home.dir", "PATH/TO/THE/DIR");รหัสของคุณ


2
ขอบคุณมากสิ่งที่ฉันกำลังมองหา
user373201

3
เป็นที่น่าสังเกตว่าเส้นทางที่จะชี้ไม่ควรมีไดเร็กทอรี "bin" เช่นถ้าเส้นทางที่ winutils.exe เป็น "D: //Hadoop//bin//winutils.exe" ดังนั้นเส้นทางสำหรับ hadoop.home.dir ควรเป็น "D: // Hadoop"
Keshav Pradeep Ramanath

4

หากเราเห็นปัญหาด้านล่าง

ERROR Shell: ไม่สามารถค้นหาไบนารี winutils ในเส้นทางไบนารี hadoop

java.io.IOException: ไม่พบ null \ bin \ winutils.exe ที่ปฏิบัติการได้ในไบนารี Hadoop

จากนั้นทำตามขั้นตอนต่อไปนี้

  1. ดาวน์โหลด winutils.exe จาก http://public-repo-1.hortonworks.com/hdp- win-alpha / winutils.exe
  2. และเก็บสิ่งนี้ไว้ในโฟลเดอร์ bin ของโฟลเดอร์ใด ๆ ที่คุณสร้างขึ้นเช่น C: \ Hadoop \ bin
  3. และในโปรแกรมให้เพิ่มบรรทัดต่อไปนี้ก่อนที่จะสร้าง SparkContext หรือ SparkConf System.setProperty ("hadoop.home.dir", "C: \ Hadoop");

4

ใน Windows 10 - คุณควรเพิ่มอาร์กิวเมนต์ที่แตกต่างกันสองข้อ

(1) เพิ่มตัวแปรและค่าใหม่เป็น - HADOOP_HOME และ path (เช่น c: \ Hadoop) ภายใต้ System Variables

(2) เพิ่ม / ต่อท้ายรายการใหม่ในตัวแปร "Path" เป็น "C: \ Hadoop \ bin"

ข้างต้นใช้ได้ผลสำหรับฉัน


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

ฉันพบปัญหาเดียวกันในขณะที่เรียกใช้การทดสอบหน่วย ฉันพบวิธีแก้ปัญหานี้:

วิธีแก้ปัญหาต่อไปนี้ช่วยให้สามารถกำจัดข้อความนี้ได้:

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

จาก: https://issues.cloudera.org/browse/DISTRO-544


2

คุณสามารถดาวน์โหลดได้winutils.exeจาก GITHub:

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

แทนที่hadoop-2.7.1ด้วยเวอร์ชันที่คุณต้องการและวางไฟล์ไว้D:\hadoop\bin

หากคุณไม่มีสิทธิ์เข้าถึงการตั้งค่าตัวแปรสภาพแวดล้อมบนเครื่องของคุณเพียงแค่เพิ่มบรรทัดด้านล่างลงในรหัสของคุณ:

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

1

การตั้งค่าตัวแปรสภาพแวดล้อม Hadoop_Home ในคุณสมบัติของระบบไม่ได้ผลสำหรับฉัน แต่สิ่งนี้ทำ:

  • ตั้งค่า Hadoop_Home ในแท็บสภาวะแวดล้อม Eclipse Run Configurations
  • ติดตาม 'Windows Environment Setup' จากที่นี่

0

นอกเหนือจากการกล่าวถึงตัวแปรสภาพแวดล้อมของคุณHADOOP_HOMEใน windows as C:\winutilsแล้วคุณยังต้องแน่ใจว่าคุณเป็นผู้ดูแลระบบของเครื่อง หากไม่ใช่และการเพิ่มตัวแปรสภาพแวดล้อมจะแจ้งให้คุณป้อนข้อมูลประจำตัวของผู้ดูแลระบบ (แม้จะอยู่ภายใต้USERตัวแปร) ตัวแปรเหล่านี้จะใช้ได้เมื่อคุณเริ่มพร้อมรับคำสั่งในฐานะผู้ดูแลระบบ


0

ฉันประสบปัญหาที่คล้ายกันกับรายละเอียดต่อไปนี้ Java 1.8.0_121, Spark spark-1.6.1-bin-hadoop2.6, Windows 10 และ Eclipse Oxygen เมื่อฉันเรียกใช้ WordCount.java ใน Eclipse โดยใช้ HADOOP_HOME เป็นตัวแปรระบบ ตามที่กล่าวไว้ในโพสต์ก่อนหน้านี้ไม่ได้ผลสิ่งที่ได้ผลสำหรับฉันคือ -

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

PATH / TO / THE / DIR / bin = winutils.exe ไม่ว่าคุณจะรันภายใน Eclipse เป็นแอ็พพลิเคชัน Java หรือโดย spark-submit จาก cmd โดยใช้

spark-submit --class groupid.artifactid.classname --master local [2] / พา ธ ไปยังไฟล์ jar ที่สร้างโดยใช้ maven / path ไปยังไฟล์ทดสอบสาธิต / พา ธ ไปยังคำสั่งไดเร็กทอรีเอาต์พุต

ตัวอย่าง: ไปที่ตำแหน่งถังขยะของ Spark / home / location / bin และดำเนินการส่งประกายไฟตามที่กล่าวไว้

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

นั่นเป็นเรื่องยุ่งยาก ... จดหมายเก็บข้อมูลของคุณต้องเป็นตัวพิมพ์ใหญ่ ตัวอย่างเช่น " C : \ ... "

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.