2012-11-14 6 views
2

저는 Map Reduce로 이전에했던 숙제로 돼지 라틴어를 이해하려고 애쓰는 라틴계 돼지에게 새롭습니다. 그리고 GC 오버 헤드 오류가 발생했습니다. 추신 : 내 입력은 단지 10 줄 간단한 CSV 파일입니다.PigLatin : java.lang.OutOfMemoryError : GC 오버로드 한도를 초과했습니다.

저는 CSV 형식을 arff로 변환하려고합니다.

내 UDF :

public class CSV2ARFF extends EvalFunc<String> { 
private String arffDataString; 
private String arffHeaderString; 

public String exec(Tuple input) throws IOException { 
    if (input == null || input.size() == 0) 
     return null; 
    try{ 
      System.out.println(">>> " + input.get(0).toString()); 
      // csv to instances 
      ByteArrayInputStream inputStream = new ByteArrayInputStream(input.get(0).toString().getBytes("UTF-8")); 
      CSVLoader loader = new CSVLoader();    
      loader.setSource(inputStream); 
      Instances data = loader.getDataSet(); //**Line #30** 
      //convert into arff 
      ArffSaver arff = new ArffSaver();    
      arff.setInstances(data);     
      this.arffDataString = arff.getInstances().toString();    
      Instances arffdata = arff.getInstances(); 
      // header 
      Instances header = new Instances(arffdata, 0); 
      this.arffHeaderString = header.toString(); 
      this.arffDataString = this.arffDataString.substring(this.arffHeaderString.length()); 

      return arffDataString; 

    }catch(Exception e){ 
     System.err.println("CSV2ARFF: failed to proces input; error - " + e.getMessage()); 
     return null; 
    } 
} 

}

내 script.pig

REGISTER ./csv2arff.jar; 
REGISTER ./weka.jar; 

csvraw = LOAD 'sample' USING PigStorage('\n') as (c); 

arffraws = FOREACH csvraw GENERATE pighw2java.CSV2ARFF(c); 

--output 

STORE arffraws INTO 'output' using PigStorage(); 

오류

java.lang.OutOfMemoryError: GC overhead limit exceeded 
at java.nio.CharBuffer.wrap(CharBuffer.java:369) 
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:310) 
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177) 
at java.io.InputStreamReader.read(InputStreamReader.java:184) 
at java.io.BufferedReader.fill(BufferedReader.java:154) 
at java.io.BufferedReader.read(BufferedReader.java:175) 
at java.io.StreamTokenizer.read(StreamTokenizer.java:500) 
at java.io.StreamTokenizer.nextToken(StreamTokenizer.java:544) 
at weka.core.converters.ConverterUtils.getToken(ConverterUtils.java:888) 
at weka.core.converters.CSVLoader.readHeader(CSVLoader.java:937) 
at weka.core.converters.CSVLoader.readStructure(CSVLoader.java:578) 
at weka.core.converters.CSVLoader.getStructure(CSVLoader.java:563) 
at weka.core.converters.CSVLoader.getDataSet(CSVLoader.java:596) 
at pighw2java.CSV2ARFF.exec(CSV2ARFF.java:30) 
at pighw2java.CSV2ARFF.exec(CSV2ARFF.java:1) 
+0

[돼지 JVM 자바 힙 공간 오류] 가능한 복제본 (http://stackoverflow.com/questions/10822213/pig-jvm-java-heap-space-error) –

+0

@AndrewFinnell 나는 그 게시물을 게시하기 전에 이미 보았습니다. 질문 및 시도 돼지 -Dpig.mapred.child.java.opts = -Xms2048M script1.pig 1024 및 2048 모두 동일한 오류 –

+0

2048로 설정하면 프로세스가 더 오래 실행됩니까? 또한 최상위 레벨 Java 프로세스의 메모리가 부족할 수도 있습니다. 돼지 자식뿐만 아니라 부모 프로세스의 Xmx 크기를 늘릴 수 있습니까? –

답변

0

나는 비슷한 상황에 처했다. 돼지를 로컬 모드로 실행하면이 오류가 발생합니다 (돼지 -x 로컬). 지도 축소 모드에서 동일한 쿼리를 실행했을 때 해결되었습니다 (돼지).

희망이 있습니다.

관련 문제