Hive:修改外部表的位置需要太长时间

Posted

技术标签:

【中文标题】Hive:修改外部表的位置需要太长时间【英文标题】:Hive: modify external table's location take too long 【发布时间】:2019-08-26 07:54:34 【问题描述】:

Hive 有 Managed Tables 和 External Tables 两种表,区别可以查看Managed. VS External Tables。

目前,要将外部数据库从HDFS 移动到Alluxio,我需要将外部表的位置修改为alluxio://

声明类似于:alter table catalog_page set location "alluxio://node1:19998/user/root/tpcds/1000/catalog_returns"

根据我的理解,应该是简单的metastore修改,但是对于一些表的修改,要花上几十分钟。顺便说一句,数据库本身包含大约 1TB 的数据。

我有什么办法可以加速表更改过程吗?如果不是,为什么这么慢?欢迎大家提出意见,谢谢。

【问题讨论】:

假设我有 10 个表,我启动 10 个 hive 客户端进程并且每个进程更改一个表是否有意义? 【参考方案1】:

我在$HIVE_HOME/bin 下找到了建议的方式,即metatool

metatool -updateLocation <new-loc> <old-loc>      Update FS root location in the
                                          metastore to new location.Both
                                          new-loc and old-loc should be
                                          valid URIs with valid host names
                                          and schemes.When run with the
                                          dryRun option changes are
                                          displayed but are not persisted.
                                          When run with the
                                          serdepropKey/tablePropKey option
                                          updateLocation looks for the
                                          serde-prop-key/table-prop-key
                                          that is specified and updates
                                          its value if found.

使用此工具,位置修改速度非常快。 (可能几秒钟。)

将此主题留给可能遇到相同情况的任何人。

【讨论】:

updateLocation后还需要运行MSCK REPAIR TABLE 吗? @apc999,老实说,我没有执行该操作。我通过两种方式确认了修改。 1、通过'desc formatted table_name"查看hive中的外部位置。 2、查看mysql metastore中的SDS表。 这个听起来很有趣

以上是关于Hive:修改外部表的位置需要太长时间的主要内容,如果未能解决你的问题,请参考以下文章

hive 内部表和外部表的区别

删除 hive 分区外部表但保留分区

Hive内部表和外部表的区别

hive简单建表

Hive 外部表架构重新连接

hive中创建外部分区表使用location是指定数据存放位置还是指数据来源