0 背景
公司最近迁移 Hadoop 集群到堡垒机内部,我顺手把这些机器统一重命名了一下,折腾了几个小时,集群终于正常上线。但是其他部门的同事跑来说 spark-sql 不能建表了,报错如下:
Error in query: [java.lang.IllegalArgumentException:] Wrong FS: hdfs://aaa:9000/path/to/table, expected: hdfs://bbb:9000;
原因: Hive 在建表的时候保存了该表的数据存放路径,而存放路径里面就会带有 fs.defaultFS
属性的值,这时如果该属性修改,查询就会出现错误。
1 解决方案
用 Hive 自带的 metatool 修改 FS Root:
metatool -updateLocation <new-location> <old-location>
即
$ metatool -updateLocation hdfs://bbb:9000/ hdfs://aaa:9000/
Initializing HiveMetaTool..
Looking for LOCATION field in SDS table to update..
Successfully updated the following locations..
old location: hdfs://aaa:9000/path/to/table1 new location: hdfs://bbb:9000/path/to/table1
old location: hdfs://aaa:9000/path/to/table2 new location: hdfs://bbb:9000/path/to/table2
old location: hdfs://aaa:9000/path/to/table3 new location: hdfs://bbb:9000/path/to/table3
Updated 3 records in SDS table
最后,可以用 metatool -listFSRoot
来验证修改。