Không thể xác định vị trí nhị phân winutils trong đường dẫn nhị phân hadoop


108

Tôi gặp lỗi sau khi khởi động nút tên cho bản phát hành hadoop-2.2 mới nhất. Tôi không tìm thấy tệp exe winutils trong thư mục bin hadoop. Tôi đã thử các lệnh dưới đây

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


Cố gắng loại bỏ thông báo lỗi đó, tôi đã đặt -Dhadoop.home.dir thành một giá trị có ý nghĩa. Bây giờ tôi nhận được một cái gì đó giống như (đường dẫn cục bộ được thay thế bằng tên biến): Không thể định vị tệp thực thi $ {HADOOP_HOME} \ bin \ winutils.exe trong tệp nhị phân Hadoop. Và đoán xem: Đặt biến không làm cho tệp nhị phân đó xuất hiện. Ngoài ra, LỖI ưu tiên bị sai, vì ứng dụng dường như vẫn tiếp tục. Trong mắt tôi, đó là một lỗi trong Hadoop 2.2.0.
Hiran

Có một jira (theo ngày hôm nay đang mở) cho điều này> issue.apache.org/jira/browse/HADOOP-10051
René Nyffenegger


1
Vui lòng chấp nhận câu trả lời do Prasad D. Anh ấy đã cung cấp các tệp làm sẵn để sử dụng; do đó tránh được những nỗ lực.
Kaushik Lele

Câu trả lời:


96

Giải pháp đơn giản: Tải xuống từ đây và thêm vào$HADOOP_HOME/bin

( Nguồn )

CẬP NHẬT QUAN TRỌNG:

Đối với hadoop-2.6.0, bạn có thể tải xuống các tệp nhị phân từ blog Titus Barik >> .

Tôi không chỉ cần trỏ HADOOP_HOMEđến thư mục được trích xuất [path]mà còn cung cấp thuộc tính hệ thống -Djava.library.path=[path]\binđể tải các lib gốc (dll).


Điều này giúp khởi động hdfs nhưng khi tôi cố gắng đặt một tệp văn bản vào hdfs, nó sẽ xuất hiện lỗi Exception trong luồng "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsBy teArray (II [BI [BIILjava / lang / String; JZ) V
Kaushik Lele

Nó trùng lặp một phần với câu trả lời của tôi. Cả tải xuống và nguồn đều là liên kết của blog của tôi như đã đề cập trong câu trả lời.
Abhijit

1
Điều này dường như cũng hoạt động với Hadoop 2.7.3. Hoặc là sẽ có một vấn đề? 1) tải xuống từ trang trên. tar xfvz cung cấp phân phối Hadoop 2.6. Sau đó sao chép bin \ winutlis.exe vào thư mục 2.73 \ bin. Ngay lập tức, nó hoạt động. Cho đến nay - ít nhất.
RichMeister

28

Nếu bạn gặp phải vấn đề này khi chạy một ứng dụng cục bộ độc lập với Spark (tức là sau khi thêm spark-assembly-xxx-hadoopx.xxjar hoặc phụ thuộc Maven vào dự án), một giải pháp đơn giản hơn sẽ là đặt winutils.exe (tải xuống từ đây ) trong "C: \ winutil \ bin". Sau đó, bạn có thể thêm winutils.exe vào thư mục chính của hadoop bằng cách thêm dòng sau vào mã:

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

Nguồn: Bấm vào đây


Đối với tôi, chỉ cần đặt các thứ trong winutils là đủ hadoop/bin/bin/. Vì vậy, chỉ cần sao chép binthư mục winutils trong binthư mục của hadoop . ( HADOOP_HOMElấy bối cảnh trong env vars)
holzkohlengrill

+1 Có quá nhiều dấu gạch chéo trong đường dẫn thư mục, vì vậy tôi để điều này ở đây cho chính mình:System.setProperty("hadoop.home.dir", "c:\\winutil\\")
emragins

27

Nếu chúng tôi trực tiếp lấy bản phân phối nhị phân của bản phát hành Apache Hadoop 2.2.0 và cố gắng chạy nó trên Microsoft Windows, thì chúng tôi sẽ gặp phải LỖI SỬ DỤNG. Vỏ: Không xác định được tệp nhị phân winutils trong đường dẫn nhị phân hadoop.

Bản phân phối nhị phân của bản phát hành Apache Hadoop 2.2.0 không chứa một số thành phần gốc của cửa sổ (như winutils.exe, hadoop.dll, v.v.). Đây là những thứ bắt buộc (không phải tùy chọn) để chạy Hadoop trên Windows.

Vì vậy, bạn cần xây dựng cửa sổ phân phối nhị phân gốc của hadoop từ mã nguồn sau tệp "BUILD.txt" nằm bên trong phân phối nguồn của hadoop. Bạn cũng có thể theo dõi các bài viết sau để được hướng dẫn từng bước với ảnh chụp màn hình

Xây dựng, cài đặt, cấu hình và chạy Apache Hadoop 2.2.0 trong Microsoft Windows OS

LỖI use.Shell: Không xác định được tệp nhị phân winutils trong đường dẫn nhị phân hadoop


2
Xin chào Abhijit. Bạn đã làm theo chỉ dẫn của riêng bạn? Hadoop không được hỗ trợ trên Windows. Trên thực tế, nó chỉ được hỗ trợ trên một số phiên bản nhất định của Windows Server. Điều đó rất tệ hại của Microsoft và HortonWorks.
javadba

2
Đó là hơn hai năm trước và rất (rất!) Đúng vào thời điểm đó. Tôi đã xác minh trực tiếp với các kỹ sư Hortonworks chỉ hai tuần trước tại một hội nghị.
javadba

18

Câu lệnh java.io.IOException: Không thể định vị null \ bin \ winutils.exe có thể thực thi được

giải thích rằng giá trị null được nhận khi mở rộng hoặc thay thế một Biến Môi trường. Nếu bạn thấy Nguồn trong Shell.Java trong Gói chung, bạn sẽ thấy rằng biến HADOOP_HOME chưa được thiết lập và bạn đang nhận giá trị rỗng thay cho biến đó và do đó xảy ra lỗi.

Vì vậy, HADOOP_HOME cần được đặt cho điều này đúng cách hoặc thuộc tính biến hadoop.home.dir.

Hi vọng điêu nay co ich.

Cảm ơn, Kamleshwar.


1
Trên tệp cấu hình nào chúng ta cần đặt thuộc tính hadoop.home.dir (Ví dụ: hdfs-site.xml, core-site.xml)?
Tushar Sarde

4
System.setProperty ("hadoop.home.dir", "C: \\ winutil \\"); tài liệu tham khảo: stackoverflow.com/a/33610936/3110474
Himanshu Bhandari

Nếu bạn đang sử dụng Windows, hãy đảm bảo rằng bạn sử dụng dấu gạch chéo ngược kép khi viết bất kỳ đường dẫn nào dưới dạng giá trị.
rishirich

12

Winutils.exe được sử dụng để chạy các lệnh shell cho SPARK. Khi bạn cần chạy Spark mà không cần cài đặt Hadoop, bạn cần tệp này.

Các bước thực hiện như sau:

  1. Tải xuống winutils.exe từ vị trí sau cho hadoop 2.7.1 https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin [LƯU Ý: Nếu bạn đang sử dụng phiên bản hadoop riêng biệt thì vui lòng tải xuống winutils từ thư mục phiên bản hadoop tương ứng trên GITHUB từ vị trí như đã đề cập ở trên.]

  2. Bây giờ, tạo một thư mục 'winutils' trong ổ C: \. Bây giờ tạo một thư mục 'bin' bên trong thư mục 'winutils' và sao chép winutils.exe trong thư mục đó. Vì vậy, vị trí của winutils.exe sẽ là C: \ winutils \ bin \ winutils.exe

  3. Bây giờ, hãy mở biến môi trường và đặt HADOOP_HOME = C: \ winutils [LƯU Ý: Vui lòng không thêm \ bin vào HADOOP_HOME và không cần đặt HADOOP_HOME trong Đường dẫn]

Vấn đề của bạn phải được giải quyết !!


11

Tôi vừa gặp sự cố này khi làm việc với Eclipse. Trong trường hợp của tôi, tôi đã tải xuống đúng phiên bản Hadoop (hadoop-2.5.0-cdh5.3.0.tgz), tôi đã trích xuất nội dung và đặt nó trực tiếp vào ổ C của mình. Sau đó tôi đã đi đến

Eclipse-> Debug / Run Configurations -> Môi trường (tab) -> và thêm

biến: HADOOP_HOME

Giá trị: C: \ hadoop-2.5.0-cdh5.3.0



3

Trong Pyspark, để chạy ứng dụng tia lửa cục bộ bằng Pycharm, hãy sử dụng các dòng dưới đây

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

2

winutils.exe được yêu cầu để hadoop thực hiện các lệnh liên quan đến hadoop. vui lòng tải xuống tệp zip hadoop-common-2.2.0. winutils.exe có thể được tìm thấy trong thư mục bin. Giải nén tệp zip và sao chép nó trong thư mục hadoop / bin cục bộ.


2

Tôi đã phải đối mặt với cùng một vấn đề. Xóa bin\khỏi đường dẫn HADOOP_HOME đã giải quyết được vấn đề đó cho tôi. Đường dẫn cho biến HADOOP_HOME sẽ giống như sau.

C:\dev\hadoop2.6\

Khởi động lại hệ thống có thể cần thiết. Trong trường hợp của tôi, khởi động lại IDE là đủ.


2

Thiết lập biến HADOOP_HOME trong cửa sổ để giải quyết sự cố.

Bạn có thể tìm thấy câu trả lời trong org/apache/hadoop/hadoop-common/2.2.0/hadoop-common-2.2.0-sources.jar!/org/apache/hadoop/util/Shell.java:

IOException từ

  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 từ

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

Tôi đã gặp vấn đề tương tự trong các cửa sổ. Tôi đã sửa nó bằng cách

  • Đang tải xuống hadoop-common-2.2.0-bin-master từ liên kết .
  • Tạo một biến người dùng HADOOP_HOME trong biến Môi trường và gán đường dẫn của thư mục bin hadoop-common làm giá trị.
  • Bạn có thể xác minh nó bằng cách chạy hadoop trong cmd.
  • Khởi động lại IDE và chạy nó.

1

Tải xuống phiên bản mong muốn của thư mục hadoop (Giả sử nếu bạn đang cài đặt spark trên Windows thì phiên bản hadoop mà spark của bạn được xây dựng cho) từ đây liên kết dưới dạng zip.

Giải nén zip vào thư mục mong muốn. Bạn cần có thư mục của biểu mẫu hadoop\bin(tạo hadoop\bincấu trúc thư mục rõ ràng nếu bạn muốn) binchứa tất cả các tệp có trong binthư mục của hadoop đã tải xuống. Điều này sẽ chứa nhiều tệp như hdfs.dll, hadoop.dll, v.v. ngoài winutil.exe.

Bây giờ tạo biến môi trường HADOOP_HOME và đặt nó thành <path-to-hadoop-folder>\hadoop. Sau đó thêm ;%HADOOP_HOME%\bin; vào PATHbiến môi trường.

Mở "dấu nhắc lệnh mới" và thử chạy lại lệnh của bạn.


điều này đã hiệu quả với tôi và giải pháp thay thế với HADOOP_HOME trỏ đến thư mục bin (chứ không phải là cha mẹ) thì không.
philwalk

0

Tôi đã sử dụng phiên bản "hbase-1.3.0" và "hadoop-2.7.3". Đặt biến môi trường HADOOP_HOME và sao chép tệp 'winutils.exe' trong thư mục HADOOP_HOME / bin sẽ giải quyết được vấn đề trên hệ điều hành windows. Chú ý đặt môi trường HADOOP_HOME thành thư mục cài đặt của hadoop (thư mục / bin không cần thiết cho các phiên bản này). Ngoài ra, tôi thích sử dụng công cụ đa nền tảng cygwin để giải quyết chức năng hệ điều hành linux (càng tốt càng tốt) vì nhóm Hbase khuyên bạn nên sử dụng linux / unix env.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.