복붙노트

[HADOOP] Hadoop : Writable 인터페이스없이 출력 값으로 객체를 가지는 쉬운 방법

HADOOP

Hadoop : Writable 인터페이스없이 출력 값으로 객체를 가지는 쉬운 방법

나는 여러 모델을 훈련시키기 위해 hadoop을 이용하려고합니다. 내 데이터는 메모리에 들어가기에 충분히 작기 때문에 모든지도 작업에서 하나의 모델을 익히고 싶습니다.

제 문제는 제가 모델 훈련을 마치면 감속기로 보내야한다는 것입니다. 나는 모델을 훈련시키기 위해 Weka를 사용하고 있습니다. Weka 클래스에서 Writable 인터페이스를 구현하는 방법을 찾기 시작하고 싶지 않습니다. 많은 노력이 필요하기 때문입니다. 나는 이것을 할 수있는 간단한 방법을 찾고있다.

Weka의 Classifier 클래스는 Serializable 인터페이스를 구현합니다. 이 물체를 어떻게 감속기에 보낼 수 있습니까?

        edits

다음은 weka 객체 직렬화에 대한 링크입니다. http://weka.wikispaces.com/Serialization

내 코드는 다음과 같습니다. 작업 구성 (구성의 일부만 게시 됨) :

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

지도 기능 :

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

My Map 클래스는 Mapper (Object, Text, Text, Classifier)를 확장합니다.

하지만이 오류가 발생합니다.

     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)

내가 뭘 잘못하고있어 ??

해결법

  1. ==============================

    1.자신 만의 직렬화 메커니즘을 정의 할 수 있습니다.

    자신 만의 직렬화 메커니즘을 정의 할 수 있습니다.

    직렬화 인터페이스를 구현하고 io.serializations 구성 등록 정보에서 구현을 정의하는 방법을 생각합니다.

    귀하의 경우, 자바 직렬화를 사용하려는 경우이 속성을 다음과 같이 설정하십시오.

  2. from https://stackoverflow.com/questions/9913626/hadoop-easy-way-to-have-object-as-output-value-without-writable-interface by cc-by-sa and MIT license