복붙노트

[HADOOP] 아파치 돼지 java.lang.OutOfMemoryError와는 : 요청 배열 크기는 VM 제한을 초과

HADOOP

아파치 돼지 java.lang.OutOfMemoryError와는 : 요청 배열 크기는 VM 제한을 초과

나는 돼지 (15)을 실행하고있어 여기에 그룹 데이터에 노력하고 있습니다. 내가 요청 배열 크기로 실행하고있어 VM 한계 오차를 초과합니다. 파일 크기가 매우 작고없는 메모리 오류로 실행 2.5G 각각 10 매퍼 걸립니다.

표시 아래의 것은 내가 뭘하는지의 조각입니다 :

sample_set = LOAD 's3n://<bucket>/<dev_dir>/000*-part.gz' USING PigStorage(',') AS (col1:chararray,col2:chararray..col23:chararray);
sample_set_group_by_col1 = GROUP sample_set BY col1;
sample_set_group_by_col1_10 = LIMIT sample_set_group_by_col1 10;
DUMP sample_set_group_by_col1_10;

이 작업은 다음 오류와 함께 실패합니다 :

2016-08-08 14:28:59,622 FATAL [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.OutOfMemoryError: Requested array size exceeds VM limit
at java.util.Arrays.copyOf(Arrays.java:2271)
at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113)
at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:140)
at java.io.DataOutputStream.write(DataOutputStream.java:107)
at java.io.DataOutputStream.writeUTF(DataOutputStream.java:401)
at java.io.DataOutputStream.writeUTF(DataOutputStream.java:323)
at org.apache.pig.data.utils.SedesHelper.writeChararray(SedesHelper.java:66)
at org.apache.pig.data.BinInterSedes.writeDatum(BinInterSedes.java:580)
at org.apache.pig.data.BinInterSedes.writeDatum(BinInterSedes.java:462)
at org.apache.pig.data.utils.SedesHelper.writeGenericTuple(SedesHelper.java:135)
at org.apache.pig.data.BinInterSedes.writeTuple(BinInterSedes.java:650)
at org.apache.pig.data.BinInterSedes.writeBag(BinInterSedes.java:641)
at org.apache.pig.data.BinInterSedes.writeDatum(BinInterSedes.java:474)
at org.apache.pig.data.BinInterSedes.writeDatum(BinInterSedes.java:462)
at org.apache.pig.data.utils.SedesHelper.writeGenericTuple(SedesHelper.java:135)
at org.apache.pig.data.BinInterSedes.writeTuple(BinInterSedes.java:650)
at org.apache.pig.data.BinInterSedes.writeDatum(BinInterSedes.java:470)
at org.apache.pig.data.BinSedesTuple.write(BinSedesTuple.java:40)
at org.apache.pig.impl.io.PigNullableWritable.write(PigNullableWritable.java:139)
at org.apache.hadoop.io.serializer.WritableSerialization$WritableSerializer.serialize(WritableSerialization.java:98)
at org.apache.hadoop.io.serializer.WritableSerialization$WritableSerializer.serialize(WritableSerialization.java:82)
at org.apache.hadoop.mapred.IFile$Writer.append(IFile.java:198)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.spillSingleRecord(MapTask.java:1696)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:1180)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:712)
at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:89)
at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:112)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapReduce$Map.collect(PigGenericMapReduce.java:135)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.runPipeline(PigGenericMapBase.java:281)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.map(PigGenericMapBase.java:274)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.map(PigGenericMapBase.java:64)

아무도 전에이 에러를 본적이있다? 그렇다면,이에 대한 해결책은 무엇인가?

해결법

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

    1.문 BY GROUP의 출력이 크다 같은 오류에서 그것은 본다. 만든이 거대한 기록은 현재 자바 힙 공간에 적합하지 않습니다. 일반적으로 하둡 매퍼 감속기 작업 힙 공간 1GB의 할당됩니다. 매개 변수에 따라이 돼지 스크립트를 실행하는 동안 증가 Java 힙 크기를보십시오.

    문 BY GROUP의 출력이 크다 같은 오류에서 그것은 본다. 만든이 거대한 기록은 현재 자바 힙 공간에 적합하지 않습니다. 일반적으로 하둡 매퍼 감속기 작업 힙 공간 1GB의 할당됩니다. 매개 변수에 따라이 돼지 스크립트를 실행하는 동안 증가 Java 힙 크기를보십시오.

    SET mapreduce.map.memory.mb 4096;
    SET mapreduce.reduce.memory.mb 6144;
    

    여전히 작동하지 않는 경우, 위의 매개 변수를 사용하여 크기를 더 늘려보십시오.

  2. from https://stackoverflow.com/questions/38852893/apache-pig-java-lang-outofmemoryerror-requested-array-size-exceeds-vm-limit by cc-by-sa and MIT license