hive on tez 错误:java.lang.OutOfMemoryError

问题描述

在具有超过 70 列的配置单元表上按日期执行分区时,我遇到此错误:

错误:状态:失败 错误:顶点失败,vertexName =地图1,vertexId = vertex_1612203694878_0265_4_00,诊断= [任务失败,任务id = task_1612203694878_0265_4_00_000058,诊断= [TaskAttempt 0失败,信息= [容器container_e16_1612203694878_0265_01_000167设定为[集装箱失败,退出码= -104诊断结束。 [2021-02-02 11:00:58.498]容器 [pid=1577,containerID=container_e16_1612203694878_0265_01_000167] 正在运行 3022848B 超出“物理”内存限制。当前使用情况:已使用 1.0 GB 的 1 GB 物理内存;使用了 2.7 GB 的 2.1 GB 虚拟内存。杀死容器。 转储 container_e16_1612203694878_0265_01_000167 的进程树: |- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE |- 1577 1567 1577 1577 (bash) 0 0 116011008 301 /bin/bash -c /usr/jdk64/jdk1.8.0_112/bin/java -Xmx819m -server -Djava.net.preferDIPv4dp.version=true .4.0-315 -XX:+PrintGCDetails -verbose:gc -XX:+PrintGCTimeStamps -XX:+UseNUMA -XX:+UseG1GC -XX:+ResizeTLAB -server -Djava.net.preferIPv4Stack=true -XX:NewRatio=8 - XX:+UseNUMA -XX:+UseG1GC -XX:+ResizeTLAB -XX:+PrintGCDetails -verbose:gc -XX:+PrintGCTimeStamps -Dlog4j.configuratorClass=org.apache.tez.common.TezLog4jConfigurator -Dlog4j.configuration=tez-container -log4j.properties -Dyarn.app.container.log.dir=/usr/hadoop/yarn/log/application_1612203694878_0265/container_e16_1612203694878_0265_01_000167 -Dtez.hadoop/yarn/log/application_1612203694878_0265/container_e16_1612203694878_0265_01_000167 -Dtez. /本地/ usercache /蜂巢/应用程序缓存/ application_1612203694878_0265 / container_e16_1612203694878_0265_01_000167 / TMP org.apache.tez.runtime.task.TezChild从属-06-n.fawryhq.corp 43250 container_e16_1612203694878_0265_01_000167 application_1612203694878_0265 1 1>的/ usr / hadoop的/纱线/日志/application_1612203694878_0265/container_e16_1612203694878_0265_01_000167/stdout 2>/usr/hadoop/yarn/log/application_1612203694878_02961072016101010707container_0265/107container_026501_000167/stdout 2 |- 1658 1577 1577 1577 (java) 1414 128 2788896768 262581 /usr/jdk64/jdk1.8.0_112/bin/java -Xmx819m -server-DjavaStackversion.preferIPv31=DjavaStackversion.prefer3Dh41 :+PrintGCDetails -verbose:gc -XX:+PrintGCTimeStamps -XX:+UseNUMA -XX:+UseG1GC -XX:+ResizeTLAB -server -Djava.net.preferIPv4Stack=true -XX:NewRatio=8 -XX:+UseNUMA -XX :+UseG1GC -XX:+ResizeTLAB -XX:+PrintGCDetails -verbose:gc -XX:+PrintGCTimeStamps -Dlog4j.configuratorClass=org.apache.tez.common.TezLog4jConfigurator -Dlog4j.configuration=tez-container-log4j.properties -Dyarn .app.container.log.dir=/usr/hadoop/yarn/log/application_1612203694878_0265/container_e16_1612203694878_0265_01_000167 -Dtez.root.logger=INFO,CLA/localhadoophhdr/CLA/localhadoophd /应用程序缓存/ application_1612203694878_0265 / container_e16_1612203694878_0265_01_000167 / TMP org.apache.tez.runtime.task.TezChild从属-06-n.fawryhq.corp 43250 container_e16_1612203694878_0265_01_000167 application_1612203694878_0265 1 [2021-02-02 11:00:58.512]容器应要求被杀死。退出代码是 143 [2021-02-02 11:00:58.521]容器以非零退出代码 143 退出。 ]],TaskAttempt 1 failed,info=[Error: Error while running task ( failure ) : java.lang.OutOfMemoryError: Java heap space 在 java.nio.HeapByteBuffer.(HeapByteBuffer.java:57) 在 java.nio.ByteBuffer.allocate(ByteBuffer.java:335) 在 org.apache.tez.runtime.library.common.sort.impl.PipelinedSorter.allocateSpace(PipelinedSorter.java:256) 在 org.apache.tez.runtime.library.common.sort.impl.PipelinedSorter.(PipelinedSorter.java:205) 在 org.apache.tez.runtime.library.output.OrderedPartitionedKVOutput.start(OrderedPartitionedKVOutput.java:146) 在 org.apache.hadoop.hive.ql.exec.tez.MapRecordProcessor.init(MapRecordProcessor.java:193) 在 org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor(TezProcessor.java:266) 在 org.apache.hadoop.hive.ql.exec.tez.TezProcessor.run(TezProcessor.java:250) 在 org.apache.tez.runtime.LogicalIOProcessorRuntimeTask.run(LogicalIOProcessorRuntimeTask.java:374) 在 org.apache.tez.runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:73) 在 org.apache.tez.runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:61) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:422) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1730) 在 org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable.java:61) 在 org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable.java:37) 在 org.apache.tez.common.CallableWithNdc.call(CallableWithNdc.java:36) 在 com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptably(TrustedListenableFutureTask.java:125) 在 com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:69) 在 com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745),errorMessage=无法从这个错误中恢复:java.lang.OutOfMemoryError: Java heap space 在 java.nio.HeapByteBuffer.(HeapByteBuffer.java:57) 在 java.nio.ByteBuffer.allocate(ByteBuffer.java:335) 在 org.apache.tez.runtime.library.common.sort.impl.PipelinedSorter.allocateSpace(PipelinedSorter.java:256) 在 org.apache.tez.runtime.library.common.sort.impl.PipelinedSorter.(PipelinedSorter.java:205) 在 org.apache.tez.runtime.library.output.OrderedPartitionedKVOutput.start(OrderedPartitionedKVOutput.java:146) 在 org.apache.hadoop.hive.ql.exec.tez.MapRecordProcessor.init(MapRecordProcessor.java:193) 在 org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor(TezProcessor.java:266) 在 org.apache.hadoop.hive.ql.exec.tez.TezProcessor.run(TezProcessor.java:250) 在 org.apache.tez.runtime.LogicalIOProcessorRuntimeTask.run(LogicalIOProcessorRuntimeTask.java:374) 在 org.apache.tez.runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:73) 在 org.apache.tez.runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:61) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:422) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1730) 在 org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable.java:61) 在 org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable.java:37) 在 org.apache.tez.common.CallableWithNdc.call(CallableWithNdc.java:36) 在 com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptably(TrustedListenableFutureTask.java:125) 在 com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:69) 在 com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745) ]],Vertex 没有成功由于 OWN_TASK_FAILURE,failedTasks:1 KilledTasks:17,Vertex vertex_1612203694878_0265_4_00 [Map 1] 因为:OWN_TASK_FAILURE] 被杀死/失败 错误:顶点被杀死,vertexName=Reducer 2,vertexId=vertex_1612203694878_0265_4_01,diagnostics=[Vertex 在 RUNNING 状态时收到 Kill。,Vertex 由于 OTHER_VERTEX_FAILURE,failedTasks:0killedTasks2780304252160304252520165125252030412522016 年由于:OTHER_VERTEX_FAILURE] 错误:由于 VERTEX_FAILURE,DAG 未成功。 failedVertices:1 被杀顶点:1

解决方法

尝试(按此顺序)

  1. 增加映射器并行度。目标是获得更多更小的映射器。检查它启动了多少映射器并调整数字。如果像 gzip 这样的不可拆分格式的文件太大,这将不起作用,然后继续执行以下两个步骤。

    --This is example,check your current setings and adjust to get x2 or more mappers
    set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
    set tez.grouping.max-size=32000000; --bigger files will be splitted
    set tez.grouping.min-size=32000;    --smaller files will be combined on single mapper
    
    
  2. 禁用map-side聚合(map-side聚合经常导致OOM)

    set hive.map.aggr=false;
    
    
  3. 如果以上两个步骤没有帮助,请增加映射器内存(尝试找到最小工作容器大小)

    set hive.tez.container.size=9216; --Adjust figures and chose minimum working size
    set hive.tez.java.opts=-Xmx6144m;
    
    

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...