ไม่สามารถค้นหาไบนารีของ winutils ในเส้นทางไบนารี hadoop


109

ฉันได้รับข้อผิดพลาดต่อไปนี้ขณะเริ่มต้น Namenode สำหรับรุ่นล่าสุดของ hadoop-2.2 ฉันไม่พบไฟล์ winutils exe ในโฟลเดอร์ hadoop bin ฉันลองคำสั่งด้านล่าง

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


พยายามกำจัดข้อความแสดงข้อผิดพลาดนั้นฉันตั้งค่า -Dhadoop.home.dir เป็นค่าที่มีความหมาย ตอนนี้ฉันได้รับบางอย่างเช่น (เส้นทางในเครื่องแทนที่ด้วยชื่อตัวแปร): ไม่พบ $ {HADOOP_HOME} \ bin \ winutils.exe ที่ปฏิบัติการได้ในไบนารี Hadoop และเดาอะไร: การตั้งค่าตัวแปรไม่ได้ทำให้ไบนารีนั้นปรากฏขึ้น นอกจากนี้ข้อผิดพลาดลำดับความสำคัญยังไม่ถูกต้องเนื่องจากแอปพลิเคชันดูเหมือนจะดำเนินการต่อ ในสายตาของฉันนั่นคือจุดบกพร่องใน Hadoop 2.2.0
หิรัญ

มีจิรา (ตามที่เปิดในวันนี้) สำหรับสิ่งนี้> issue.apache.org/jira/browse/HADOOP-10051
René Nyffenegger

1
มีความเป็นHadoop-11003
Remus Rusanu

1
โปรดยอมรับคำตอบของ Prasad D. เขาได้จัดเตรียมไฟล์สำเร็จรูปไว้ให้ใช้งาน จึงหลีกเลี่ยงความพยายาม
Kaushik Lele

คำตอบ:


96

วิธีแก้ปัญหาง่ายๆ: ดาวน์โหลดจากที่นี่และเพิ่มลงในไฟล์$HADOOP_HOME/bin

( ที่มา )

การอัปเดตที่สำคัญ:

สำหรับHadoop-2.6.0คุณสามารถดาวน์โหลดไบนารีจากติตัส Barik บล็อก >>

ฉันไม่เพียง แต่ต้องการชี้HADOOP_HOMEไปที่ไดเร็กทอรีที่แยก[path]แล้ว แต่ยังให้คุณสมบัติของระบบ-Djava.library.path=[path]\binเพื่อโหลดเนทีฟ libs (dll)


สิ่งนี้ช่วยในการเริ่มต้น hdfs แต่เมื่อฉันพยายามใส่ไฟล์ข้อความลงใน hdfs มันให้ข้อผิดพลาด Exception ในเธรด "main" java.lang.UnsantediedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsBy teArray (II [BI [BIILjava / lang / String; JZ) V
Kaushik Lele

คำตอบนี้ซ้ำกันบางส่วน ทั้งดาวน์โหลดและแหล่งที่มาคือลิงค์ของบล็อกของฉันตามที่กล่าวไว้ในคำตอบ
Abhijit

1
ดูเหมือนว่าจะทำงานร่วมกับ Hadoop 2.7.3 ได้เช่นกัน หรือจะมีปัญหา? 1) ดาวน์โหลดจากหน้าด้านบน tar xfvz ซึ่งให้การแจกแจง Hadoop 2.6 จากนั้นคัดลอก bin \ winutlis.exe ไปยังไดเร็กทอรี 2.73 \ bin ทันทีมันใช้งานได้ จนถึงตอนนี้ - อย่างน้อย
RichMeister

28

หากคุณประสบปัญหานี้เมื่อเรียกใช้แอปพลิเคชันภายในที่มีอยู่ในตัวด้วย Spark (เช่นหลังจากเพิ่ม spark-assembly-xxx-hadoopx.xxjar หรือการพึ่งพา Maven ในโครงการ) วิธีแก้ปัญหาที่ง่ายกว่าคือการใส่ winutils.exe (ดาวน์โหลด จากที่นี่ ) ใน "C: \ winutil \ bin" จากนั้นคุณสามารถเพิ่ม winutils.exe ลงในไดเร็กทอรีหลัก hadoop โดยเพิ่มบรรทัดต่อไปนี้ในโค้ด:

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

ที่มา: คลิกที่นี่


สำหรับผมมันก็มากพอที่จะนำสิ่งที่ winutils hadoop/bin/bin/ใน ดังนั้นเพียงแค่คัดลอกbinโฟลเดอร์winutils ในbinโฟลเดอร์ของ hadoop ( HADOOP_HOMEตั้งอยู่ใน env vars)
holzkohlengrill

+1 มีเครื่องหมายทับมากเกินไปในเส้นทางไดเรกทอรีดังนั้นฉันจึงออกจากที่นี่เพื่อตัวเอง:System.setProperty("hadoop.home.dir", "c:\\winutil\\")
emragins

27

หากเราใช้การแจกแจงไบนารีของ Apache Hadoop 2.2.0 โดยตรงและลองรันบน Microsoft Windows เราจะพบ ERROR util Shell: ไม่สามารถค้นหาไบนารีของ winutils ในเส้นทางไบนารี hadoop

การแจกแจงไบนารีของ Apache Hadoop 2.2.0 รีลีสไม่มีส่วนประกอบดั้งเดิมของ Windows (เช่น winutils.exe, hadoop.dll เป็นต้น) สิ่งเหล่านี้จำเป็น (ไม่ใช่ทางเลือก) เพื่อเรียกใช้ Hadoop บน Windows

ดังนั้นคุณต้องสร้างการกระจายไบนารีแบบเนทีฟของ windows ของ hadoop จากซอร์สโค้ดตามไฟล์ "BUILD.txt" ที่อยู่ภายในการกระจายแหล่งที่มาของ hadoop คุณสามารถติดตามโพสต์ต่อไปนี้เพื่อดูคำแนะนำทีละขั้นตอนพร้อมภาพหน้าจอ

สร้างติดตั้งกำหนดค่าและเรียกใช้ Apache Hadoop 2.2.0 ใน Microsoft Windows OS

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


2
สวัสดี Abhijit คุณได้ทำตามคำแนะนำของคุณเองหรือไม่? ไม่รองรับ Hadoop บน Windows จริงๆแล้วรองรับเฉพาะ Windows Server บางเวอร์ชันเท่านั้น Microsoft และ HortonWorks เป็นที่น่ารังเกียจมาก
javadba

2
นั่นเป็นเวลากว่าสองปีที่แล้วและเป็นความจริง (มาก!) ในเวลานั้น ฉันได้ยืนยันโดยตรงกับวิศวกรของ Hortonworks เพียงสองสัปดาห์ก่อนในการประชุม
javadba

18

คำสั่ง java.io.IOException: ไม่พบ null \ bin \ winutils.exe ที่ปฏิบัติการได้

อธิบายว่าได้รับค่าว่างเมื่อขยายหรือแทนที่ตัวแปรสภาพแวดล้อม หากคุณเห็น Source ใน Shell Java ใน Common Package คุณจะพบว่าตัวแปร HADOOP_HOME ไม่ได้รับการตั้งค่าและคุณได้รับค่า null แทนดังนั้นจึงเกิดข้อผิดพลาด

ดังนั้นต้องตั้งค่า HADOOP_HOME สำหรับสิ่งนี้อย่างถูกต้องหรือคุณสมบัติตัวแปร hadoop.home.dir

หวังว่านี่จะช่วยได้

ขอบคุณ Kamleshwar


1
ไฟล์คอนฟิกูเรชันใดที่เราต้องตั้งค่าคุณสมบัติ hadoop.home.dir (เช่น hdfs-site.xml, core-site.xml)
Tushar Sarde

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

หากคุณใช้ Windows ตรวจสอบให้แน่ใจว่าคุณใช้แบ็กสแลชคู่ในขณะที่เขียนพา ธ ใด ๆ เป็นค่า
rishirich

12

Winutils.exe ใช้สำหรับเรียกใช้คำสั่งเชลล์สำหรับ SPARK เมื่อคุณต้องการเรียกใช้ Spark โดยไม่ต้องติดตั้ง Hadoop คุณต้องมีไฟล์นี้

ขั้นตอนมีดังนี้:

  1. ดาวน์โหลด winutils.exe จากตำแหน่งต่อไปนี้สำหรับ hadoop 2.7.1 https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin [หมายเหตุ: หากคุณใช้รุ่น hadoop แยกจากกันโปรดดาวน์โหลด winutils จากโฟลเดอร์เวอร์ชัน hadoop ที่เกี่ยวข้องบน GITHUB จากตำแหน่งตามที่กล่าวไว้ข้างต้น]

  2. ตอนนี้สร้างโฟลเดอร์ 'winutils' ใน C: \ drive ตอนนี้สร้างโฟลเดอร์ 'bin' ภายในโฟลเดอร์ 'winutils' และคัดลอก winutils.exe ในโฟลเดอร์นั้น ดังนั้นตำแหน่งของ winutils.exe จะเป็นC: \ winutils \ bin \ winutils.exe

  3. ตอนนี้เปิดตัวแปรสภาพแวดล้อมและตั้งค่า HADOOP_HOME = C: \ winutils [หมายเหตุ: โปรดอย่าเพิ่ม \ binในHADOOP_HOMEและไม่จำเป็นต้องตั้งค่า HADOOP_HOME ใน Path]

ปัญหาของคุณต้องได้รับการแก้ไข !!


11

ฉันเพิ่งพบปัญหานี้ในขณะที่ทำงานกับ Eclipse ในกรณีของฉันฉันดาวน์โหลดเวอร์ชัน Hadoop ที่ถูกต้องแล้ว (hadoop-2.5.0-cdh5.3.0.tgz) ฉันแยกเนื้อหาและวางไว้ในไดรฟ์ C โดยตรง จากนั้นฉันก็ไป

Eclipse-> Debug / Run Configurations -> Environment (tab) -> และเพิ่ม

ตัวแปร: HADOOP_HOME

ค่า: C: \ hadoop-2.5.0-cdh5.3.0



3

ใน Pyspark เพื่อเรียกใช้แอปพลิเคชัน Spark ในท้องถิ่นโดยใช้ Pycharm ให้ใช้บรรทัดด้านล่าง

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

2

winutils.exe จำเป็นสำหรับ hadoop เพื่อดำเนินการคำสั่งที่เกี่ยวข้องกับ hadoop โปรดดาวน์โหลดไฟล์ zip hadoop-common-2.2.0 winutils.exe อยู่ในโฟลเดอร์ bin แตกไฟล์ zip และคัดลอกในโฟลเดอร์ hadoop / bin ในเครื่อง


2

ฉันประสบปัญหาเดียวกัน การนำออกbin\จากเส้นทาง HADOOP_HOME ช่วยแก้ปัญหาให้ฉัน เส้นทางสำหรับตัวแปร HADOOP_HOME ควรมีลักษณะดังนี้

C:\dev\hadoop2.6\

อาจจำเป็นต้องรีสตาร์ทระบบ ในกรณีของฉันการรีสตาร์ท IDE ก็เพียงพอแล้ว


2

ตั้งค่าตัวแปรHADOOP_HOMEใน windows เพื่อแก้ไขปัญหา

คุณสามารถหาคำตอบได้ใน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

ฉันได้รับปัญหาเดียวกันใน windows ฉันแก้ไขโดย

  • ดาวน์โหลด Hadoop ทั่วไป-2.2.0-bin ต้นแบบจากการเชื่อมโยง
  • สร้างตัวแปรผู้ใช้ HADOOP_HOME ในตัวแปรสภาพแวดล้อมและกำหนดพา ธ ของไดเร็กทอรี bin ทั่วไป hadoop เป็นค่า
  • คุณสามารถตรวจสอบได้โดยเรียกใช้ hadoop ใน cmd
  • รีสตาร์ท IDE และเรียกใช้

1

ดาวน์โหลดเวอร์ชันที่ต้องการของโฟลเดอร์ hadoop (สมมติว่าคุณกำลังติดตั้ง spark บน Windows จากนั้นเวอร์ชัน hadoop ที่สร้างจุดประกายของคุณ) จากลิงค์นี้เป็น zip

แตกไฟล์ zip ไปยังไดเร็กทอรีที่ต้องการ คุณต้องมีไดเร็กทอรีของฟอร์มhadoop\bin(สร้างhadoop\binโครงสร้างไดเร็กทอรีดังกล่าวอย่างชัดเจนหากคุณต้องการ) โดยbinมีไฟล์ทั้งหมดที่มีอยู่ในbinโฟลเดอร์ของ hadoop ที่ดาวน์โหลดมา ซึ่งจะมีไฟล์มากมายเช่น hdfs.dll, hadoop.dll เป็นต้นนอกเหนือจาก winutil.exe

ตอนนี้สร้างตัวแปรสภาพแวดล้อม และตั้งค่าให้HADOOP_HOME <path-to-hadoop-folder>\hadoopจากนั้นเพิ่ม ;%HADOOP_HOME%\bin;ไปยังPATHตัวแปรสภาพแวดล้อม

เปิด "พรอมต์คำสั่งใหม่" และลองเรียกใช้คำสั่งของคุณใหม่


สิ่งนี้ใช้ได้ผลสำหรับฉันและทางเลือกที่มี HADOOP_HOME ที่ชี้ไปยังไดเร็กทอรี bin (แทนที่จะเป็นพาเรนต์) ไม่ได้
philwalk

0

ฉันใช้เวอร์ชัน "hbase-1.3.0" และ "hadoop-2.7.3" การตั้งค่าตัวแปรสภาพแวดล้อม HADOOP_HOME และการคัดลอกไฟล์ 'winutils.exe' ภายใต้โฟลเดอร์ HADOOP_HOME / bin ช่วยแก้ปัญหาบนระบบปฏิบัติการ Windows ข้อควรสนใจในการตั้งค่าสภาวะแวดล้อม HADOOP_HOME เป็นโฟลเดอร์การติดตั้งของ hadoop (โฟลเดอร์ / bin ไม่จำเป็นสำหรับเวอร์ชันเหล่านี้) นอกจากนี้ฉันชอบใช้cygwinเครื่องมือข้ามแพลตฟอร์มเพื่อชำระการทำงานของระบบปฏิบัติการ linux (เท่าที่จะทำได้) เพราะทีมงาน Hbase แนะนำ linux / unix env

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