Error: attempt to setup a Window for datatype VARCHAR 和 Hive Runtime Error while processing row (tag=0) {"key":{"_col0":"b","_col1":"2"},"value":{"_col0":1260}}
环境:
这个问题在我使用CDH搭建的集群上遇到的,主要是建表的时候统一用的VARCHAR类型,不要问为什么,我也不太清楚,总之生产上就是这么做的就是了。然后执行聚合函数的窗口函数的时候报的这个错误。之前也有过这种类似的操作,但是还是第一次碰见这种错误,在我解决这个问题的过程中,出现了两种错误,我都记录了,但是不保证都是因为我说的这个原因。
问题内容:
第一个错误
Vertex failed, vertexName=Reducer 2, vertexId=vertex_1604444511298_0012_18_01, diagnostics=[Task failed, taskId=task_1604444511298_0012_18_01_000000, diagnostics=[TaskAttempt 0 failed, info=[Error: Error while running task ( failure ) : attempt_1604444511298_0012_18_01_000000_0:java.lang.RuntimeException: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row (tag=0) {"key":{"_col0":"b","_col1":"2"},"value":{"_col0":1260}} at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor(TezProcessor.java:211) at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.run(TezProcessor.java:168) at org.apache.tez.runtime.LogicalIOProcessorRuntimeTask.run(LogicalIOProcessorRuntimeTask.java:374) at org.apache.tez.runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:73) at org.apache.tez.runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:61) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1875) at org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable.java:61) at org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable.java:37) at org.apache.tez.common.CallableWithNdc.call(CallableWithNdc.java:36) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row (tag=0) {"key":{"_col0":"b","_col1":"2"},"value":{"_col0":1260}} at org.apache.hadoop.hive.ql.exec.tez.ReduceRecordSource.pushRecord(ReduceRecordSource.java:296) at org.apache.hadoop.hive.ql.exec.tez.ReduceRecordProcessor.run(ReduceRecordProcessor.java:279) at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor(TezProcessor.java:185) ... 14 more Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row (tag=0) {"key":{"_col0":"b","_col1":"2"},"value":{"_col0":1260}} at org.apache.hadoop.hive.ql.exec.tez.ReduceRecordSource$GroupIterator.next(ReduceRecordSource.java:364) at org.apache.hadoop.hive.ql.exec.tez.ReduceRecordSource.pushRecord(ReduceRecordSource.java:286) ... 16 more Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Internal Error: attempt to setup a Window for datatype VARCHAR at org.apache.hadoop.hive.ql.exec.GroupByOperator.process(GroupByOperator.java:774) at org.apache.hadoop.hive.ql.exec.tez.ReduceRecordSource$GroupIterator.next(ReduceRecordSource.java:355) ... 17 more Caused by: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Internal Error: attempt to setup a Window for datatype VARCHAR at org.apache.hadoop.hive.ql.udf.ptf.WindowingTableFunction$WindowingIterator.next(WindowingTableFunction.java:1593) at org.apache.hadoop.hive.ql.exec.PTFOperator$PTFInvocation.finishPartition(PTFOperator.java:373) at org.apache.hadoop.hive.ql.exec.PTFOperator.process(PTFOperator.java:122) at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:882) at org.apache.hadoop.hive.ql.exec.GroupByOperator.forward(GroupByOperator.java:1024) at org.apache.hadoop.hive.ql.exec.GroupByOperator.processAggr(GroupByOperator.java:829) at org.apache.hadoop.hive.ql.exec.GroupByOperator.processKey(GroupByOperator.java:703) at org.apache.hadoop.hive.ql.exec.GroupByOperator.process(GroupByOperator.java:769) ... 18 more Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Internal Error: attempt to setup a Window for datatype VARCHAR at org.apache.hadoop.hive.ql.udf.ptf.WindowingTableFunction$SingleValueBoundaryScanner.getScanner(WindowingTableFunction.java:1177) at org.apache.hadoop.hive.ql.udf.ptf.WindowingTableFunction.getRange(WindowingTableFunction.java:694) at org.apache.hadoop.hive.ql.udf.ptf.WindowingTableFunction.access$100(WindowingTableFunction.java:70) at org.apache.hadoop.hive.ql.udf.ptf.WindowingTableFunction$WindowingIterator.next(WindowingTableFunction.java:1579) ... 25 more ]], Vertex did not succeed due to OWN_TASK_FAILURE, failedTasks:1 killedTasks:0, Vertex vertex_1604444511298_0012_18_01 [Reducer 2] killed/failed due to:OWN_TASK_FAILURE]DAG did not succeed due to VERTEX_FAILURE. failedVertices:1 killedVertices:0 20/11/04 08:48:45 INFO ql.Driver: Completed executing command(queryId=root_20201104084833_72e651e1-ee1d-4767-a102-79e0af819153); Time taken: 11.848 seconds
第二种错误
Internal Error: attempt to setup a Window for datatype VARCHAR
问题分析:
建表信息
CREATE EXTERNAL TABLE IF NOT EXISTS shop ( `db` VARCHAR(100), `mon` VARCHAR(3), `day` VARCHAR(3), `sale` VARCHAR(100) ) COMMENT "商店余额表" PARTITIONED (day string) ROW FORMAT delimited fields terminated by ',' LOCATION "/data/table/";
数据
INSERT INTO TABLE `shop` PARTITION (day='20201102') VALUES ('a','1','5','200'),('a','2','1','500'),('a','2','3','600'),('a','2','7','400'),('a','3','3','100'),('a','3','6','200'),('a','3','8','400'),('b','1','3','100'),('b','1','7','220'),('b','2','8','500'),('b','2','13','300'),('b','2','27','460'),('b','3','5','100'),('b','3','16','250'),('b','3','18','450');
脚本
select t.dp dp, t.m m, t.sale_sum amt, sum(t.sale_sum) over(partition by t.dp order by t.m) zonge from (select dp,m,sum(sale) sale_sum from shop group by dp,m) t;
说实话,没什么分析的过程,因为找到日志也是这样的错误信息,所以刚开始就各种网上搜索,但是后来说实话都没解决。最后的最后是我猜想,既然报错VARCHAR还有列的一下信息,会不会是因为的的数据类型呢,抱着试一试的态度搞了一下,还真的成了,刚开始我还是重新建表之后再写的,后来发现直接使用cast就可以了。
解决办法
第一种
修改建表语句
CREATE EXTERNAL TABLE IF NOT EXISTS shop (
`db` VARCHAR(100),
`mon` INT
。。。。。。
第二种
修改脚本
select
t.dp dp,
t.m m,
t.sale_sum amt,
sum(t.sale_sum) over(partition by t.dp order cast(by t.m as int)) zonge
。。。。。
总结
总之,这种奇奇怪怪的错误我也是第一次见,之前都没有见过,之前使用的时候都很正常。两个字有毒。
欢迎访问我的home:https://blog.csdn.net/weixin_43681796?spm=1000.2115.3001.5113 | https://www.zhihu.com/people/damon-51-73

浙公网安备 33010602011771号