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:修改外部表的位置需要太长时间的主要内容,如果未能解决你的问题,请参考以下文章