1、报错截图

2、原因分析
该异常发生在insert overwrite阶段,即select出来的数据插入目标表时抛出异常。从异常栈中可以清楚地看到OrcOutputFormat、java.lang.ClassCastException这些信息,可见这是Reduce任务将最终结果进行持久化(写入HDFS文件系统)时出现错误。首先,我们需要明确这个数据持久化的大体流程是什么样的。
Read过程:InputFormat将输入流(InputStream)分割成纪录(<key,value>),Deserializer将纪录(<key,value>)解析成列对象。
Write过程:Serializer将列对象转化为纪录(<key,value>),OutputFormat将纪录(<key,value>)格式化为输出流(OutputStream)。
上图中描绘的分别是数据载入内存和持久化的过程。异常信息中的OrcOutputFormat说明错误出在数据持久化过程中。从图中可知,序列化器Serializer的输出数据,就是OutputFormat的输入数据。接下来就是确定目标表的SerDe/InputFormat/OutputFormat分别是什么。通过下面命令查看。
desc formatted $table
结果如下:
Storage InformationSerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
InputFormat: org.apache.hadoop.hive.ql.io.orc.OrcInputForm

文章描述了一个在Hive中使用OrcOutputFormat进行数据插入时遇到的ClassCastException问题。分析指出,异常源于LazySimpleSerDe序列化后的数据类型与OrcOutputFormat期望的OrcSerdeRow类型不匹配。解决方案是将表的fileformat修改为orc,以避免类型转换错误。
最低0.47元/天 解锁文章
&spm=1001.2101.3001.5002&articleId=127015864&d=1&t=3&u=5bf5bd2f33b046e9881934a6b78614f6)
4255

被折叠的 条评论
为什么被折叠?



