Spark填坑之旅

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 解决方案

参考文章:java.lang.IllegalArgumentException: Wrong FS running Hive query on EXTERNAL in HA cluster – Hortonworks

用 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 来验证修改。

    原文作者:苦咖啡JerryKFC
    原文地址: https://www.jianshu.com/p/21fdedb0c7ce
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞