복붙노트

[HADOOP] 하둡에서 CompressionCodec를 사용하는 방법

HADOOP

하둡에서 CompressionCodec를 사용하는 방법

감속기에서 o / p 파일을 압축하기 위해 다음을 수행하고 있습니다.

OutputStream out = ipFs.create( new Path( opDir + "/" + fileName ) );
CompressionCodec codec = new GzipCodec(); 
OutputStream cs = codec.createOutputStream( out );
BufferedWriter cout = new BufferedWriter( new OutputStreamWriter( cs ) );
cout.write( ... )

그러나 3 번째 줄에서 null 포인터 예외가 발생했습니다.

java.lang.NullPointerException
    at org.apache.hadoop.io.compress.zlib.ZlibFactory.isNativeZlibLoaded(ZlibFactory.java:63)
    at org.apache.hadoop.io.compress.GzipCodec.createOutputStream(GzipCodec.java:92)
    at myFile$myReduce.reduce(myFile.java:354)

또한 JIRA를 따라갔습니다.

내가 잘못하고 있는지 제안 해 주시겠습니까?

해결법

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

    1.표준 OutputFormat 처리 외부에서 압축을 사용하려면 CompressionCodecFactory를 사용해야합니다 (@linker 답변 참조).

    표준 OutputFormat 처리 외부에서 압축을 사용하려면 CompressionCodecFactory를 사용해야합니다 (@linker 답변 참조).

    CompressionCodecFactory ccf = new CompressionCodecFactory(conf)
    CompressionCodec codec = ccf.getCodecByClassName(GzipCodec.class.getName());
    OutputStream compressedOutputSream = codec.createOutputStream(outputStream)
    
  2. ==============================

    2.당신은 잘못하고있다. 이를 수행하는 표준 방법은 다음과 같습니다.

    당신은 잘못하고있다. 이를 수행하는 표준 방법은 다음과 같습니다.

    TextOutputFormat.setOutputCompressorClass(job, GzipCodec.class);
    

    GzipCodec는 구성 가능하며 직접 인스턴스화하면 올바르게 초기화해야합니다 (setConf, ...)

    이것을 시도하고 그것이 작동하는지 알려주십시오.

  3. from https://stackoverflow.com/questions/10155602/how-to-use-compressioncodec-in-hadoop by cc-by-sa and MIT license