복붙노트

[HADOOP] TEZ / 하이브에서 OOM

HADOOP

TEZ / 하이브에서 OOM

[: 메모리 부족 하이브 / TEZ의 측면보기의 json_tuple와 함께 몇 가지 답변과 의견 후에 여기 얻은 지식을 기반으로 새 질문을]

내 쿼리 중 하나는 지속적으로 오류와 함께 실패합니다 :

ERROR : Status: Failed
ERROR : Vertex failed, vertexName=Map 1, vertexId=vertex_1516602562532_3606_2_03, diagnostics=[Task failed, taskId=task_1516602562532_3606_2_03_000001, diagnostics=[TaskAttempt 0 failed, info=[Container container_e113_1516602562532_3606_01_000008 finished with diagnostics set to [Container failed, exitCode=255. Exception from container-launch.
Container id: container_e113_1516602562532_3606_01_000008
Exit code: 255
Stack trace: ExitCodeException exitCode=255: 
    at org.apache.hadoop.util.Shell.runCommand(Shell.java:933)
    at org.apache.hadoop.util.Shell.run(Shell.java:844)
    at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:1123)
    at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:237)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:317)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:83)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Container exited with a non-zero exit code 255
]], TaskAttempt 1 failed, info=[Error: Failure while running task:java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space
    at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor(TezProcessor.java:173)

Java 힙 공간 : 키워드는 여기 java.lang.OutOfMemoryError와 것 같다.

나는 주위를 둘러 보았다하지만 난 TEZ에서 이해 무슨 생각을 아무도 나에게 도움이되지 :

내 쿼리가 매우 빠르게 이동 3 사 매퍼을 가지고, 4는 매번 죽는다. 다음은 쿼리의 TEZ 그래픽보기는 다음과 같습니다

이 이미지에서 :

전자 및 연락처 분할과 WHERE 절에서 선택한 하나의 파티션에 있습니다.

나는 이렇게지도의 수를 증가하려고 :

이 관련이 있다면, 여기에 몇 가지 다른 메모리 설정은 다음과 같습니다

나의 이해는 TEZ 따라서 완료 결국 오래 걸려 있지만, 많은 부하에서 작업을 분할 할 수 있습니다이었다. 내가 잘못 오전, 또는 거기에 내가 발견하지 않은 방법입니다?

상황 : hdp2.6, 직선을 통해 JSON 실행에 따라 땅딸막 한 측면보기를 사용 32기가바이트 램, 쿼리 8 개 데이타 노드.

해결법

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

    1.이 문제는 명확하게 기울어 져 데이터 때문이다. 난 당신이 만회 균등하게 데이터를 분산하고있다 있도록 소스에서 쿼리를 선택에 COL에 의해, 배포 추가하는 것이 운영자 추천합니다. 아래 예에서 더 고르게 COL3 컬럼 ID 등의 데이터를 배포 예

    이 문제는 명확하게 기울어 져 데이터 때문이다. 난 당신이 만회 균등하게 데이터를 분산하고있다 있도록 소스에서 쿼리를 선택에 COL에 의해, 배포 추가하는 것이 운영자 추천합니다. 아래 예에서 더 고르게 COL3 컬럼 ID 등의 데이터를 배포 예

    ORIGINAL QUERY : insert overwrite table X AS SELECT COL1,COL2,COL3 from Y
    NEW QUERY      : insert overwrite table X AS SELECT COL1,COL2,COL3 from Y distribute by COL3
    
  2. ==============================

    2.저도 같은 문제를 가지고 모든 메모리 매개 변수가 도움이되지 않았다 증가.

    저도 같은 문제를 가지고 모든 메모리 매개 변수가 도움이되지 않았다 증가.

    그럼 난 MR로 전환하고 다음 오류가 발생했습니다.

    Failed with exception Number of dynamic partitions created is 2795, which is more than 1000.
    

    높은 값을 설정 한 후 내가 다시 TEZ에 반환하고, 문제가 해결되었다.

  3. from https://stackoverflow.com/questions/48403972/oom-in-tez-hive by cc-by-sa and MIT license