2012-09-11 30 views
10

Tôi đang cố định cấu hình Hadoop trên máy tính Windows 7 của mình. Tôi có thể bắt đầu tên nút và các dịch vụ khác, nhưng như tôi đang chạy một ví dụ mà đi kèm với các gói Hadoop (phiên bản 1.0.3), lỗi sau đang đến:Cấu hình Hadoop trên Windows thông qua Cygwin

bin/hadoop: line 320 : C:\Program: Command not found. 

Tôi chạy ví dụ như sau lệnh:

bin/hadoop jar hadoop-examples-1.0.3.jar pi 10 

tôi mở hadoop tập tin này, trong đó lỗi là đến và thấy rằng trong dòng 320 một con đường đang được tạo:

JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m ${HADOOP_JAVA_PLATFORM_OPTS} org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"` 

Vì vậy, tôi cảm thấy rằng vấn đề có thể là trong biến này JAVA như Cygwin sử dụng các quy ước khác nhau cho tên đường dẫn. Có ai cũng phải đối mặt với vấn đề này hoặc biết những gì đang gây ra vấn đề?

Trả lời

23

nhanh tóm tắt:

  • Kịch bản hadoop bash dưới (path)/bin/hadoop thực sự có một lỗi trong nó. Kịch bản giả định rằng không có tệp/đường dẫn nào cần có sẽ có khoảng trống trong chúng. Vâng, đối với bất cứ điều gì Windows, tất cả họ sẽ có một không gian ở đâu đó, vì "Program Files" có một không gian trong đó.

Chi tiết

Đây là một khó khăn ... Tôi chạy vào cùng một vấn đề và nó đã cho tôi một thời gian để sửa chữa. Đầu tiên, vấn đề: thiết lập các biến môi trường thông qua các script có thể có sơ sài khi không gian có liên quan đến đường dẫn/tên tệp (thường xảy ra khá thường xuyên trong các hệ thống không * nix trong những ngày này).

Tiếp theo, có khả năng hai những nơi mà bạn cần phải sửa chữa các vấn đề:

  1. Trong (path)/conf/hadoop-env.sh kịch bản của bạn, bạn nên thiết lập các kịch bản JAVA_HOME, và nó sẽ giống như thế:

    export JAVA_HOME=/cygdrive/c/"Program Files"/Java/jdk1.7.0_06 
    

    (Lưu ý rằng có dấu ngoặc kép xung quanh "Tệp chương trình", để nó được nhận dạng như một phần tử duy nhất. Bạn không thể u se các ký tự thoát \ vì cygwin không một số finagling của Windows để UNIX đường dẫn, do đó, \ không thể hoạt động như trốn thoát.

  2. Trong (path)/bin/hadoop kịch bản của bạn, dòng 320 có khả năng viết một cái gì đó như sau:

    JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m ${HADOOP_JAVA_PLATFORM_OPTS} org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"` 
    

    Bạn sẽ cần phải thay đổi nó để thay vào đó nói:

    JAVA_PLATFORM=`CLASSPATH="${CLASSPATH}" "${JAVA}" -Xmx32m ${HADOOP_JAVA_PLATFORM_OPTS} org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"` 
    

    Lưu ý rằng tôi đã thêm báo giá đánh dấu xung quanh các biến môi trường ${CLASSPATH}${JAVA}. Bằng cách đặt dấu ngoặc kép xung quanh nó, bạn đang nói rằng "toàn bộ các ký tự được chỉ định bởi biến này nên được coi là một đối tượng chuỗi".


OK, bây giờ nếu bạn quan tâm để hiểu tại sao điều này xảy ra và những gì đang xảy ra, vấn đề là JDK của bạn có khả năng lưu trữ dưới "Program Files", hoặc có thể dưới "Program Files (x86) ", cả hai đều có không gian trong đường dẫn. Tất cả các biến môi trường khác mà Hadoop cần không phụ thuộc vào bất kỳ thứ gì trong con đường "Program Files". Vì vậy, đó là lý do tại sao bạn chỉ thấy một lỗi được gắn cờ. Tất cả các biến môi trường khác thiếu dấu ngoặc kép chỉ đơn giản là không có dấu cách bên trong chúng.

+0

Tôi yêu bạn Mike: D Cảm ơn! –

+0

@AntonBelev aww ... Tôi KHÔNG BAO GIỜ được sử dụng để nhận xét phát sáng như vậy từ bất kỳ bảng tin nào! Chỉ cần đi để hiển thị như thế nào mát folks trên StackExchange được, tôi đoán. :) –

+0

Tôi thực sự không thể tin rằng họ thực hiện điều này rất khó khăn. Đây có phải là để giữ cho người không làm chủ (như tôi) rời khỏi chức tư tế Hadoop không? Tôi chưa bao giờ biết một chương trình rất khó để thiết lập! –

0

Đây là những mảnh vỡ, lỗi là: lệnh hadoop.util.Platform không tìm thấy

  • "CLASSPATH=cygpath -p "$CLASSPATH" phân phối, sản xuất lỗi
  • "CLASSPATH=cygpath -p -w "$CLASSPATH" thêm cửa sổ cờ, được sản xuất lỗi
  • "CLASSPATH=cygpath -wp "$CLASSPATH"vấn đề được giải quyết

Đây là trên Vista.

Các vấn đề liên quan