Hive 在INSERT INTO TABLE子句中,UDF失败

Hive 在INSERT INTO TABLE子句中,UDF失败,hive,hive-udf,Hive,Hive Udf,我创建了一个UDF translateText(),它调用API来翻译给定的文本,并在select子句中返回正确的结果,但当我将INSERT应用到表中时,如下所示: INSERT OVERWRITE TABLE gl_staging_eve.header_text select header_text, translateText(header_text) from gl_staging_eve.header_text_only; 查询失败,输出如下: 失败:执行错误,从org.apache.

我创建了一个UDF translateText(),它调用API来翻译给定的文本,并在select子句中返回正确的结果,但当我将INSERT应用到表中时,如下所示:

INSERT OVERWRITE TABLE gl_staging_eve.header_text select header_text, translateText(header_text) from gl_staging_eve.header_text_only;
查询失败,输出如下:

失败:执行错误,从org.apache.hadoop.hive.ql.exec.tez.TezTask返回代码2。顶点失败,顶点名称=映射1,顶点ID=顶点_1543885299280_8715_1_00,诊断=[任务失败,任务ID=任务_1543885299280_8715_1_00_000040,诊断=[任务尝试0失败,信息=[容器容器_e14_1543885299280_8715_01000042已完成,诊断设置为[容器已完成],任务尝试1失败,信息]=[Container Container_e14_1543885299280_8715_01_000043完成,诊断设置为[Container completed.],任务尝试2失败,信息=[Container Container_e14_1543885299280_8715_01_000087完成,诊断设置为[Container completed.],任务尝试3失败,信息=[Container Container_e14_1543885299280_8715_01_000137在诊断设置为[Container completed.]]的情况下完成,Vertex由于自己的任务失败而未成功,failedTasks:1 killedTasks:40,Vertex Vertex_1543885299280_8715_1_00[Map 1]由于自己的任务失败而终止/失败]由于VERTEX_失败,DAG未成功。FailedVertex:1 KilledVertex:019/02/12 06:54:58[ATS记录器0]:信息挂钩。ATShake:收到的挂钩后通知为:bduser_20190212065438_6cf35096-aa74-48d1-a8ae-6d76b0049099 19/02/12 06:54:58[main]:错误ql.Driver:失败:执行错误,从org.apache.hadoop.hive.ql.exec.tez.TezTask返回代码2.vertexfailed,vertexName=Map 1,vertexId=Vertex_1543885299280_8715_100,诊断=[任务失败,任务ID=Task_15438852992808715_1_00,诊断=[任务尝试0失败,信息]=[Container Container_e14_1543885299280_8715_01_000042完成,诊断设置为[Container completed.]],任务尝试1失败,信息=[Container Container_e14_1543885299280_8715_01_000043完成,诊断设置为[Container completed.]],任务尝试2失败,信息=[Container Container_e14_1543885299280_8715_01_000087完成,诊断设置为[Container completed.]],任务尝试3失败,信息=[Container Container_e14_1543885299280_8715_01_000137完成,诊断设置为[Container completed.]],顶点因自身任务失败而未成功,失败的任务:1终止的任务:40,顶点因自身任务失败而终止/失败[Map 1]DAG因顶点失败而未成功。失败的顶点:1终止的顶点:0 12月19日06:54:58[ATS Logger 0]:DEBUG security.UserGroupInformation:PrivilegedAction as:bduser(auth:SIMPLE)from:org.apache.hadoop.warn.client.api.impl.TimelineWriter.doPosting(TimelineWriter.java:112)


基本上,INSERT INTO TABLE不起作用。

配置单元1.2.x中默认情况下配置单元.execution.enginetez

当我将INSERT提交到SELECT具有UDF的表查询时,查询失败

但是,当我将执行引擎更改为MapReduce:
set hive.execution.engine=mr;
时,我的插入查询成功运行


希望这对其他人也有帮助!

可以指定translateText正在做什么,以及它调用了什么API?当您运行simple select query时,配置单元不会将作业提交到群集,而是在本地提交。当执行INSERT INTO TABLE时,配置单元会将作业提交到群集。您可能无法访问正在从中调用的翻译服务m个群集的节点,这就是失败的原因。我正在调用API,但我如何知道我没有从群集的访问权限?即使我对API调用进行了注释,并且在evaluate方法中,我只是返回了我得到的输入,然后我也得到了相同的问题。很难说问题出在哪里。尝试将执行引擎更改为MapReduce:
sethive.execution.engine=mr
,然后再次执行查询以查看将输出哪些错误。当我将执行引擎更改为MapReduce时:设置hive.execution.engine=mr;然后我的插入查询成功运行。