我已经使用以下查询创建了一个 ORC 格式的配置单元表,并且我能够在集群 1 中查询相同的表。现在我已经使用 distcp 将底层 ORC 文件传输到不同的集群(集群 2),并且我已经创建了相同的表结构在集群 2 中。当我运行 msck 修复表时,它能够加载分区,但是当我查询它的失败并出现严重问题时。
在来自集群 1 的 distcp orc 文件之后,用于在集群 2 中创建表的查询:
CREATE TABLE `test_db_cluster_2.test_audit`(
`sno` Int,
`source_timestamp` string,
`commit_timestamp` string,
`ing_timestamp` string,
`count` int,
`merge_timestamp` string)
partitioned by (tableName String)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat';
LOCATION
'hdfs://OMEGAPRD/user/svc-omg_1clrven_pld/cdl/test_audit';
执行 msck 修复:(成功)
hive> msck repair table 1clrven_prdstg_tbls.test_audit;
OK
Partitions not in metastore: test_audit:tablename=fin_s4hana_prd_tbls.ska1
Repair: Added partition to metastore 1clrven_prdstg_tbls.test_audit:tablename=fin_s4hana_prd_tbls.ska1
Time taken: 0.962 seconds, Fetched: 2 row(s)
当我查询表时,它失败并出现以下错误:
hive> select * from 1clrven_prdstg_tbls.test_audit;
OK
Failed with exception java.io.IOException:java.lang.RuntimeException: serious problem
你能帮忙解释一下为什么会这样吗?两者都有相同的兽人文件。但是 cluster-1 我们在创建表后使用插入数据insert into
,在 cluster-2 中我们传输文件并在其上创建表。