hadoop - 更改 Hive 数据库位置

标签 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>';

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

如有任何帮助,我们将不胜感激。

最佳答案

经过反复试验,我了解到 Hive 在数据库上运行 ALTER 时不支持以下两种情况。

  1. 不允许更改目录位置或数据库名称。
  2. 不允许删除或取消设置之前定义的数据库属性。

但是,我找到了一个解决方法的链接,该链接涉及将数据库直接更新到 Hive Metastore 并简单地移动 HDFS 上的目录。 http://gaganonthenet.com/2015/02/23/hive-change-location-for-database-or-schema/

上一个不正确的答案:

在更改之前创建的表将位于以前的位置。只有在更改后创建的表才会放在新位置。您将必须手动移动 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";这也可以应用于分区级别。

关于hadoop - 更改 Hive 数据库位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30578259/

相关文章:

hadoop - 使用Column header 读取CSV并将其加载到配置单元表中

sql - 在SQL范围内选择

本地文件系统上的 Hadoop

postgresql - 将 postgresql 数组导入配置单元

java - 将 hadoop 的 Configuration 转换为 Map<String, String>

hadoop - 水槽+卡夫卡+HDFS : Split messages

Sqoop 安装的 Hadoop 问题

sql - Hive 爆炸并从字符串中提取值

java - SemanticException [错误 10014] 配置单元 UDF

mysql - sqoop Import 替换mysql的特殊字符