hadoop - 默认情况下,HIVE 元数据存储在哪里?

标签 hadoop hive hdfs

我使用以下方法在 Hive 中创建了一个外部表:

create external table hpd_txt(
WbanNum INT,
YearMonthDay INT , 
Time INT, 
HourlyPrecip INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
stored as textfile
location 'hdfs://localhost:9000/user/hive/external';

现在该表已在位置 */hive/external 中创建。

第 1 步:我使用以下方法在此表中加载数据:

load data inpath '/input/hpd.txt' into table hpd_txt;

数据成功加载到指定路径(*/external/hpd_txt)

第 2 步: 我使用以下方法从 */hive/external 路径中删除表:

hadoop fs -rmr /user/hive/external/hpd_txt

问题:

  1. 为什么从原来的路径中删除了表? (*/input/hpd.txt 从 hdfs 中删除,但在 */external 路径中创建表)
  2. 按照第 2 步从 HDFS 中删除表后,我再次使用 show tables;它仍然在外部路径中提供表 hpd_txt。 那么这是从哪里来的。

提前致谢。

最佳答案

Hive 不知道您删除了这些文件。 Hive 仍希望在您指定的位置找到文件。你可以在 HDFS 中做任何你想做的事,这不会传达给配置单元。如果事情发生变化,你必须告诉 hive 。

hadoop fs -rmr /user/hive/external/hpd_txt

例如,上面的命令不会删除表,它只会删除文件。该表仍然存在于配置单元元存储中。如果要删除表,请使用:

drop if exists tablename;

由于您将表创建为外部表,这将从配置单元中删除该表。如果您没有删除文件,这些文件将保留下来。如果要删除外部表和该表正在读取的文件,您可以执行以下操作之一:

  1. 放下表格,然后删除文件
  2. 将表更改为托管并删除表

最后,hive 的 metastore 位置默认位于此处 /usr/hive/warehouse

关于hadoop - 默认情况下,HIVE 元数据存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32403289/

相关文章:

hadoop - 大 gz 文件上的 Mapreduce

java - hadoop 2.5.0 启动datanode失败

java.lang.NoClassDefFoundError : Could not initialize class org. apache.hadoop.hbase.shaded.protobuf.ProtobufUtil$ClassLoaderHolder 错误

java - HADOOP - 从 MapReduce 作业发出 JSON

hadoop - Map Reduce 程序中的问题

shell - 如何使用oozie中执行的脚本访问本地目录?

hadoop - 是否可以在 Hive 中导出多个分区

hadoop - 在 spark 中访问 Hive 表

mysql - 多列配置单元上的动态分区

hadoop - 如何获取数据节点超时?