Lớp Storm của tôi sử dụng hàng đợi Redis để thu thập dữ liệu.
Tôi cố gắng chạy bình Storm của mình
Storm jar jar_file_name.jar Topology_name configure_file
Nhưng tôi gặp phải ngoại lệ sau:
Ngoại lệ trong chuỗi "chính" java.lang.NoClassDefFoundError: Lredis/clients/jedis/Jedis;
tại java.lang.Class.getDeclaredFields0 (Phương thức gốc)
tại java.lang.Class.privateGetDeclaredFields(Class.java:2397)
tại java.lang.Class.getDeclaredField(Class.java:1946)
tại java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1659)
tại java.io.ObjectStreamClass.access$700(ObjectStreamClass.java:72)
tại java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:480)
tại java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:468)
tại java.security.AccessController.doPrivileged(Phương thức gốc)
tại java.io.ObjectStreamClass.(ObjectStreamClass.java:468)
tại java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:365)
tại java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1133)
tại java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
tại backtype.storm.utils.Utils.serialize(Utils.java:77)
tại backtype.storm.topology.TopologyBuilder.createTopology(TopologyBuilder.java:111)
tại OutlierPredictor.main(OutlierPredictor.java:98)
Nguyên nhân là do: java.lang.ClassNotFoundException: redis.clients.jedis.Jedis
tại java.net.URLClassLoader$1.run(URLClassLoader.java:366)
tại java.net.URLClassLoader$1.run(URLClassLoader.java:355)
tại java.security.AccessController.doPrivileged(Phương thức gốc)
tại java.net.URLClassLoader.findClass(URLClassLoader.java:354)
tại java.lang.ClassLoader.loadClass(ClassLoader.java:425)
tại sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
tại java.lang.ClassLoader.loadClass(ClassLoader.java:358)
Tôi đã biên soạn bằng cách sử dụng
javac -classpath $HADOOP_CORE:$HBASE_CLASSPATH:/usr/local/hadoop- 2.2.0/redis_jar/commons-pool-1.5.5.jar:/usr/local/hadoop-2.2.0/redis_jar/jedis-2.1.0.jar:/usr/local/apache-storm-0.9.2- incubating/lib/storm-core-0.9.2-incubating.jar -d dir_name/ dir_name/Javafile.java
từ dòng lệnh.
Tôi làm điều này trong một thiết lập nút duy nhất.
Điều gì đã xảy ra?
Bạn cần đóng gói tất cả mã và phần phụ thuộc vào một cái lọ.
Trích dẫnHướng dẫn bão , phần tôpô,
Việc chạy một cấu trúc liên kết rất đơn giản. Đầu tiên, bạn đóng gói tất cả mã và các phần phụ thuộc vào một tệp duy nhất. Sau đó, bạn chạy một lệnh như sau:
Storm jar all-my-code.jar backtype.storm.MyTopology arg1 arg2
Bạn có thể phải sử dụng một số công cụ đóng gói như OneJAR, JarJar hoặc ANT và tạo một jar chứa tất cả các tệp và phần phụ thuộc. Vui lòng trích dẫn những bài viết SO này
- Hợp nhất nhiều lọ vào một lọ duy nhất
- Cách dễ nhất để hợp nhất một bản phát hành thành một tệp JAR
Tôi là một lập trình viên xuất sắc, rất giỏi!