2010-09-26 45 views
15

Tôi đã thiết lập Hadoop trên máy tính xách tay của mình và chạy chương trình mẫu được cung cấp trong hướng dẫn cài đặt thành công. Nhưng, tôi không thể chạy một chương trình.Làm cách nào để chạy chương trình Hadoop?

[email protected]:~/hadoop/ch2$ hadoop MaxTemperature input/ncdc/sample.txt output 
Exception in thread "main" java.lang.NoClassDefFoundError: MaxTemperature 
Caused by: java.lang.ClassNotFoundException: MaxTemperature 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
Could not find the main class: MaxTemperature. Program will exit. 

Cuốn sách nói rằng chúng ta nên thiết lập một Classpath Hadoop bằng cách viết

[email protected]:~/hadoop/ch2$ export HADOOP_CLASSPATH=build/classes 

Các lớp học chính được định nghĩa trong tập tin MaxTemperature.java mà tôi đang thực hiện. Làm thế nào để chúng ta thiết lập Classpath Hadoop? Chúng ta có phải làm điều đó để thực hiện tất cả chương trình hay chỉ một lần? Tôi nên đặt thư mục đầu vào ở đâu. Mã của tôi là/home/rohit/hadoop/ch2 và cài đặt Hadoop của tôi là/home/hadoop.

Trả lời

8

Bạn nên đóng gói ứng dụng của mình vào một tệp JAR, dễ dàng hơn nhiều và ít xảy ra lỗi hơn là không quan trọng với các thư mục classpath.

Trong trường hợp của bạn, bạn cũng phải biên dịch tệp .java. Bạn đã nói nó là MaxTemparature.java, nhưng cũng phải có một MaxTemperature.class trước khi bạn có thể chạy nó.

+0

Cuốn sách tôi đề cập đã nói rằng chúng ta nên đóng gói các tập tin trong một file jar để phân phối dễ dàng hơn một cụm. Tuy nhiên, để đơn giản, họ đang sử dụng các tệp riêng lẻ khi bắt đầu. – rohitmishra

6

đây là ansewer trong 3 bước:

1:

javac -verbose -classpath C:\\hadoop\\hadoop-0.19.2-core.jar MaxTemperature*.java -d build/classes 

2:

put *.class in build/classes 

3:

export HADOOP_CLASSPATH=${HADOOP_HOME}/path/to/build/classes 

(bạn phải tạo xây dựng/thư mục lớp học)

Trân trọng Walid

+1

+1 để biết hướng dẫn từng bước – Shekhar

1

sau khi bạn thực hiện lớp học của bạn một file jar:

hadoop jar MaxTemperature.jar MaxTemperature 

về cơ bản:

hadoop jar jarfile main [args] 
6

tôi thấy vấn đề này cũng như khi đi qua Sách Hadoop (O'Reilly). Tôi đã sửa nó bằng cách thiết lập biến HADOOP_CLASSPATH trong tệp hadoop-env.sh trong thư mục cấu hình của bạn.

6
  1. Đầu tiên biên dịch các tập tin Java như lời kể của Walid:

    javac -classpath path-to-hadoop-0.19.2-core.jar .java-files -d folder-to-contain-classes 
    
  2. Tạo file jar của các lớp học ứng dụng:

    jar cf filename.jar *.classes 
    

    Trong cả hai, cho dù bạn đang xuất các lớp vào tệp jar hoặc sử dụng thư mục cụ thể để lưu trữ các tệp lớp, bạn nên xác định HADOOP_CLASSPATH trỏ đến cla cụ thể đó ss tệp hoặc thư mục chứa tệp lớp. Vì vậy, tại thời điểm chạy lệnh Hadoop, nó nên biết vị trí được chỉ định cho lớp chính.

  3. thiết HADOOP_CLASSPATH

    export HADOOP_CLASSPATH=path-to-filename.jar 
    

    hoặc

    export HADOOP_CLASSPATH=path-to-folder-containing-classes 
    
  4. Run sử dụng Hadoop lệnh:

    hadoop main-class args 
    
2

Bạn không nhất thiết cần một file jar, nhưng đã yo u đặt MaxTemperature trong một gói?

Nếu vậy, nói tập tin MaxTemperature.class của bạn là trong yourdir/bin/yourpackage/, tất cả các bạn cần làm là:

export HADOOP_CLASSPATH=yourdir/bin 
hadoop yourpackage.MaxTemperature 
+0

Cảm ơn bạn đã trả lời rõ ràng – Vor

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