更改 Hive 数据库位置
Change Hive Database location
有没有办法改变数据库指向的位置?
我尝试了以下方法:
alter database <my_db> set DBPROPERTIES('hive.warehouse.dir'='<new_hdfs_loc>');
alter database <my_db> set DBPROPERTIES('location'='<new_hdfs_loc>');
alter database <my_db> set location '<new_hdfs_loc>';
前两个alter语句只是改变了数据库属性,但是数据库仍然指向同一个位置;而第三个 alter 语句给了我语义错误。
非常感谢任何帮助。
经过反复试验,我了解到在对数据库执行 运行 ALTER 操作时,Hive 不支持以下两种情况。
- 不允许更改目录位置或数据库名称。
- 不允许删除或取消设置之前定义的数据库属性。
但是,我发现了一个 link 解决方法,涉及直接将数据库更新到 Hive Metastore 并简单地移动 HDFS 上的目录。 http://gaganonthenet.com/2015/02/23/hive-change-location-for-database-or-schema/
上一个不正确的答案:
更改之前创建的表将位于之前的位置。只有 table 在更改后创建的才会放在新位置。您将必须手动移动 HDFS 上的目录并更新 table 位置。有关数据库和 table 位置的详细信息,请参阅 https://issues.apache.org/jira/browse/HIVE-1537 and https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable/PartitionLocation。
要更改 table 的位置,您可以 运行 ALTER TABLE <table> SET LOCATION "/path/to/new/location";
这也可以应用于分区级别。
如果您尝试修复数据库正在使用的 hdfs 主机:
只要您可以通过 CLI 访问 hive
命令,就可以一次更新所有数据库:
hive --service metatool -updateLocation hdfs://<the-new-address>:8020 hdfs://<the-old>:8020
有没有办法改变数据库指向的位置?
我尝试了以下方法:
alter database <my_db> set DBPROPERTIES('hive.warehouse.dir'='<new_hdfs_loc>');
alter database <my_db> set DBPROPERTIES('location'='<new_hdfs_loc>');
alter database <my_db> set location '<new_hdfs_loc>';
前两个alter语句只是改变了数据库属性,但是数据库仍然指向同一个位置;而第三个 alter 语句给了我语义错误。
非常感谢任何帮助。
经过反复试验,我了解到在对数据库执行 运行 ALTER 操作时,Hive 不支持以下两种情况。
- 不允许更改目录位置或数据库名称。
- 不允许删除或取消设置之前定义的数据库属性。
但是,我发现了一个 link 解决方法,涉及直接将数据库更新到 Hive Metastore 并简单地移动 HDFS 上的目录。 http://gaganonthenet.com/2015/02/23/hive-change-location-for-database-or-schema/
上一个不正确的答案:
更改之前创建的表将位于之前的位置。只有 table 在更改后创建的才会放在新位置。您将必须手动移动 HDFS 上的目录并更新 table 位置。有关数据库和 table 位置的详细信息,请参阅 https://issues.apache.org/jira/browse/HIVE-1537 and https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable/PartitionLocation。
要更改 table 的位置,您可以 运行 ALTER TABLE <table> SET LOCATION "/path/to/new/location";
这也可以应用于分区级别。
如果您尝试修复数据库正在使用的 hdfs 主机:
只要您可以通过 CLI 访问 hive
命令,就可以一次更新所有数据库:
hive --service metatool -updateLocation hdfs://<the-new-address>:8020 hdfs://<the-old>:8020