更改Hive数据库位置

时间:2015-06-01 16:11:18

标签: hadoop hive hdfs cloudera

有没有办法改变数据库指向的位置?

我尝试了以下方法:

  1. alter database <my_db> set DBPROPERTIES('hive.warehouse.dir'='<new_hdfs_loc>');

  2. alter database <my_db> set DBPROPERTIES('location'='<new_hdfs_loc>');

  3. alter database <my_db> set location '<new_hdfs_loc>';

  4. 前两个alter语句只更改了数据库属性,但数据库仍指向同一位置;而第三个alter语句给了我语义错误。

    任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:7)

经过一些试验和错误后,我了解到Hive在数据库上运行ALTER时不支持以下两个条件。

  1. 不允许更改目录位置或数据库名称。
  2. 不允许删除或取消之前定义的db属性。
  3. 但是,我找到了一个解决方法的链接,该链接涉及对Hive Metastore的直接数据库更新,只需在HDFS上移动目录。 http://gaganonthenet.com/2015/02/23/hive-change-location-for-database-or-schema/

    上一个不正确的答案:

    在alter之前创建的表将位于以前的位置。只有在alter之后创建的表才会被放入新位置。您必须手动移动HDFS上的目录并更新表位置。有关数据库和表位置的详细信息,请参阅https://issues.apache.org/jira/browse/HIVE-1537https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable/PartitionLocation

    要更改表的位置,您可以运行ALTER TABLE <table> SET LOCATION "/path/to/new/location";这也可以在分区级别应用。

答案 1 :(得分:-1)

您可以更改数据库位置。我在Hive 2.1.1(CDH 6.3.3)中实现了

  1. 运行CREATE DATABASE mydb LOCATION 'hdfs://<namespace_name>/mydirectory1/'
  2. 运行DESCRIBE DATABASE mydb并查看当前位置。
  3. 然后运行ALTER DATABASE mydb SET LOCATION 'hdfs://<namespace_name>/mydirectory2/'
  4. 再次运行2.步骤,您将看到新位置。创建示例表后,您还可以从HDFS中的该位置进行检查。