2012-03-28 32 views
5

Tôi đang cố gắng khai thác hadoop để đào tạo nhiều mô hình. Dữ liệu của tôi đủ nhỏ để vừa với bộ nhớ nên tôi muốn có một mô hình được đào tạo trong mọi tác vụ bản đồ.Hadoop: Cách dễ dàng để có đối tượng là giá trị đầu ra không có giao diện có thể ghi

Vấn đề của tôi là khi tôi đã đào tạo xong mô hình của mình, tôi cần gửi nó đến bộ giảm tốc. Tôi đang sử dụng Weka để đào tạo mô hình. Tôi không muốn bắt đầu tìm cách thực hiện giao diện có thể ghi trong các lớp Weka, bởi vì nó cần rất nhiều nỗ lực. Tôi đang tìm một cách đơn giản để làm điều này.

Lớp Trình phân loại trong Weka triển khai giao diện Serializable. Làm thế nào tôi có thể gửi đối tượng này để giảm tốc?

 edits 

Dưới đây là liên kết đề cập đến WEKA đối tượng serialization: http://weka.wikispaces.com/Serialization

Đây là những gì mã của tôi trông giống như: Cấu hình công việc (chỉ là một phần của cấu hình được đăng tải):

 conf.set("io.serializations","org.apache.hadoop.io.serializer.JavaSerialization," + "org.apache.hadoop.io.serializer.WritableSerialization"); 
     job.setOutputKeyClass(Text.class); 
     job.setOutputValueClass(Classifier.class); 

Chức năng bản đồ:

 //load dataset in data variable 
    Classifier tree=new J48(); 
    tree.buildClassifier(); 
    context.write(new Text("whatever"), tree); 

Bản đồ lớp của tôi kéo dài Mapper (Object, Text, Text, Classifier) ​​

Nhưng tôi đang nhận được lỗi này:

 java.lang.NullPointerException 
at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73) 
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:964) 
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:673) 
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:755) 
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:369) 
at org.apache.hadoop.mapred.Child$4.run(Child.java:259) 
at java.security.AccessController.doPrivileged(Native Method) 
at javax.security.auth.Subject.doAs(Subject.java:416) 
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) 
at org.apache.hadoop.mapred.Child.main(Child.java:253) 

gì tôi đang làm vậy ??

Trả lời

6

Bạn có thể xác định cơ chế serialization của riêng bạn

Tôi nghĩ rằng nó giải quyết xung quanh việc thực hiện các giao diện serialization, và xác định thực hiện của bạn trong bất động sản io.serializations cấu hình

Trong trường hợp của bạn, nếu bạn chỉ muốn sử dụng java serial ization, thiết lập thuộc tính này để:

  • org.apache.hadoop.io.serializer.JavaSerialization
+0

Ohh thanks..I sẽ kiểm tra xem nó ra ngày hôm nay và gửi thắc mắc gì thêm. – jojoba

+0

Tôi đã thực hiện một số chỉnh sửa vì tôi gặp sự cố. – jojoba

+0

Văn bản chắc chắn không triển khai Serializable do đó hadoop không biết cách xử lý loại này - bạn có thể sử dụng cả tuần tự hóa của Java và hadoop cùng nhau - đặt 'io.serializations' thành' org.apache.hadoop.io.serializer.JavaSerialization , org.apache.hadoop.io.serializer.WritableSerialization' –

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