修复Hive创建外部表的一个设计缺陷
前面的文章我提到Hive的一个缺陷,我测试的版本主要是存在于3.1.X的版本,问题这一张图可以直接概括:
也可以翻一下之前的文章:https://baifachuan.com/posts/c5888fa1.html
我也给Hive提了一个issue,链接在这里:https://issues.apache.org/jira/browse/HIVE-25912
顺带修复了一下,MR在这里:https://github.com/apache/hive/pull/2987
修复思路我开始是让它删除成功,所以在:common/src/java/org/apache/hadoop/hive/common/FileUtils.java的746行左右添加了这个检查:
if(path.getParent() == null) { |
后来觉得加在这里不太合适,不严谨,于是添加到创建表的地方,也就是路径不合理的话就抛出异常,修复的位置是:standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
在create_table_core
方法里面添加了如下内容:
if (!MetaStoreUtils.validateTblStorage(tbl.getSd())) { |
其中validateTblStorage
的方法如下:
/* |
这样的话,创建如果是不合法的表,就会失败,演示一下就是这样:。
继续和社区讨论一下如何把这个合进去。
扫码手机观看或分享: