在配置单元中加入 2 个大表时发生顶点故障

Vertex failure while joining 2 big tables in hive

我在配置单元中有 2 个 table。 Table A 有 300M 行,Table B 有 26M 行。 我在 3 列 col1、col2、col3 上加入 Table A 和 Table B。

下面是我正在使用的查询

创建临时 table AB_TEMP AS select A.col1,A.col2,A.col3,A.col4,A.col5 来自A 加入B 在 A.col1=B.col1 和 A.col2=B.col2 和 A.col3=B.col3 上;

我每次 运行 这个查询时都会收到一个名为顶点失败的错误。

如何解决这个问题?

下面是我遇到的错误

状态:失败 顶点失败,vertexName=Map 1,vertexId=vertex_1617665530644_1398582_10_01,diagnostics=[Task failed,taskId=task_1617665530644_1398582_10_01_000147,diagnostics=[TaskAttempt 0 failed,info=[AttemptID:attempt_1617665530644_1398582_10_01_000147_0 Timed out after 300 秒],TaskAttempt 1 失败,信息=[AttemptID:attempt_1617665530644_1398582_10_01_000147_1 300 秒后超时],TaskAttempt 2 失败,信息=[AttemptID:attempt_1617665530644_1398582_10_01_000147_2 300 秒后超时],TaskAttempt 3 失败, info=[Container container_e42_1617665530644_1398582_01_002060 timed out]], Vertex 由于 OWN_TASK_FAILURE, failedTasks:1 killedTasks:220, Vertex vertex_1617665530644_1398582_10_01 [Map 1] [=24] 未成功=]到期to:OWN_TASK_FAILURE] 由于 VERTEX_FAILURE,DAG 没有成功。 failedVertices:1 killedVertices:0 失败:执行错误,return 来自 org.apache.hadoop.hive.ql.exec.tez.TezTask 的代码 2。顶点失败,vertexName=Map 1,vertexId=vertex_1617665530644_1398582_10_01,diagnostics=[Task failed,taskId=task_1617665530644_1398582_10_01_000147,diagnostics=[TaskAttempt 0 failed,info=[AttemptID:attempt_1617665530644_1398582_10_01_000147_0 Timed out after 300 秒],TaskAttempt 1 失败,信息=[AttemptID:attempt_1617665530644_1398582_10_01_000147_1 300 秒后超时],TaskAttempt 2 失败,信息=[AttemptID:attempt_1617665530644_1398582_10_01_000147_2 300 秒后超时],TaskAttempt 3 失败, info=[Container container_e42_1617665530644_1398582_01_002060 timed out]], Vertex 由于 OWN_TASK_FAILURE, failedTasks:1 killedTasks:220, Vertex vertex_1617665530644_1398582_10_01 [Map 1] [=24] 未成功=] 由于 to:OWN_TASK_FAILURE]DAG 由于 VERTEX_FAILURE 而未成功。 failedVertices:1killedVertices:0

不要在 tez 上执行此查询。我们可以在 Map Reduce 中完成这个。

set hive.execution.engine=mr;
set hive.auto.convert.join=false;
set mapreduce.map.memory.mb=2048;
set mapreduce.reduce.memory.mb=4096;

设置完上述所有参数后,您可以运行代码并执行正常

Tez 的内存设置(数字只是示例):

--For AM
set tez.am.resource.memory.mb=8192;
set tez.am.java.opts=-Xmx6144m;
--Mapper and Reducer
set tez.reduce.memory.mb=6144;
set hive.tez.container.size=9216;
set hive.tez.java.opts=-Xmx6144m;