我正在尝试插入一个带有动态分区的配置单元表。同样的查询在过去几天一直运行良好,但现在给出了以下错误。
Diagnostic Messages for this Task: java.lang.RuntimeException:
org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error:
Unable to deserialize reduce input key from
x1x128x0x0x46x234x240x192x148x1x68x69x86x50x0x1x128x0x104x118x1x128x0x0x46x234x240x192x148x1x128x0x0x25x1x128x0x0x46x1x128x0x0x72x1x127x255x255x255x0x0x0x0x1x71x66x80x0x255
with properties
{columns=reducesinkkey0,reducesinkkey1,reducesinkkey2,reducesinkkey3,reducesinkkey4,reducesinkkey5,reducesinkkey6,reducesinkkey7,reducesinkkey8,reducesinkkey9,reducesinkkey10,reducesinkkey11,reducesinkkey12,
serialization.lib=org.apache.hadoop.hive.serde2.binarysortable.BinarySortableSerDe,
serialization.sort.order=+++++++++++++,
columns.types=bigint,string,int,bigint,int,int,int,string,int,string,string,string,string}
at org.apache.hadoop.hive.ql.exec.mr.ExecReducer.reduce(ExecReducer.java:283)
at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:506)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:447)
at org.apache.hadoop.mapred.Child$4.run(Child.java
FAILED: Execution Error, return code 2 from
org.apache.hadoop.hive.ql.exec.mr.MapRedTask MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 3.33 sec HDFS
Read: 889 HDFS Write: 314 SUCCESS Stage-Stage-2: Map: 1 Reduce: 1
Cumulative CPU: 1.42 sec HDFS Read: 675 HDFS Write: 0 FAIL
当我使用下面的设置时,查询运行良好
set hive.optimize.sort.dynamic.partition=false
当我将这个值设置为true时,它会给出相同的错误。
源表以序列格式存储,目标表以rc格式存储。有人能解释一下这种设置在内部有什么不同吗?
2条答案
按热度按时间wyyhbhjk1#
有时当我们试着
Insert Table
当动态分区设置为true时,我们得到这些错误。这是因为hive传递一些内部列来帮助reducer阶段,而reducer阶段在
hive.optimize.sort.dynamic.partition
已启用。此设置不稳定。这就是为什么在hive0.14.0及更高版本中默认禁用此设置,但在hive0.13.0中默认启用此设置的原因。希望你能得到。。。。
7cjasjjr2#
发生此错误的原因是rc文件条带缓冲区由于同时打开的记录写入程序太多而变空。
配置单元配置属性:
启用时,动态分区列将被全局排序。这样我们就可以为reducer中的每个分区值只打开一个记录编写器,从而减少reducer的内存压力。
默认值:在配置单元0.13.0和0.13.1中为真;在hive 0.14.0及更高版本(hive-8151)中为false
添加到:hive 0.13.0和hive-6455
源-配置单元配置属性