创建ORC格式Hive表后InputFormat异常问题排查求助
嘿,这个问题其实挺常见的,我来帮你拆解下可能的原因和解决办法:
核心原因大概率是这个
当你在创建表时指定了LOCATION '/user/warehouse/hive',如果这个路径已经存在非ORC格式的数据(比如之前存的Text文件),Hive会自动沿用该路径下现有数据的输入输出格式,而忽略你指定的STORED AS ORC设置。这是Hive的一个特性,它会优先匹配已有数据的格式,避免格式冲突。
具体解决步骤
第一步:检查目标路径的现有数据
先通过HDFS命令查看指定路径下的内容:hdfs dfs -ls /user/warehouse/hive如果能看到类似
.txt或者非.orc的文件,说明路径里已有Text格式数据,这就是问题根源。方案1:更换为空路径重新建表
换一个不存在的空路径(或者提前清空目标路径),再重新执行建表语句,同时可以加上ORC的属性来明确格式:create table etl_stats.err_mstr_40sq_orc( audt_id int, err_col_lineage_id int, err_cd int, err_dscr string, cntxt_txt string, src_nm string, src_key string ) STORED AS ORC TBLPROPERTIES ("orc.compress"="ZLIB") -- 可选,指定ORC压缩格式,也可以省略 LOCATION '/user/warehouse/hive_orc'; -- 使用全新的空路径方案2:修改现有表的文件格式
如果必须使用原来的路径,先清空路径下的所有旧数据:hdfs dfs -rm -r /user/warehouse/hive/*然后执行ALTER语句强制修改表的文件格式:
ALTER TABLE etl_stats.err_mstr_40sq_orc SET FILEFORMAT ORC;之后再执行
describe formatted查看,应该就能看到正确的InputFormat: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat和OutputFormat: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat了。额外小技巧
如果你不确定路径是否有问题,可以先不指定LOCATION,让Hive使用默认的存储路径创建表,此时格式应该是正确的ORC。确认没问题后,再通过ALTER语句修改表的LOCATION到你需要的路径。
内容的提问来源于stack exchange,提问作者user3521180

