配置单元元数据默认存储在哪里?

aoyhnmkz  于 2021-06-03  发布在  Hadoop
关注(0)|答案(4)|浏览(519)

我在中创建了一个外部表 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

问题:
为什么要从原始路径中删除表( */input/hpd.txt 已从hdfs中删除,但表是在中创建的 */external 路径)
在我像第2步那样从hdfs中删除表之后,我再次使用show tables;它仍然在外部路径中提供表hpd泷u txt。那么这是从哪里来的呢。
提前谢谢。

jtw3ybtb

jtw3ybtb1#

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

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

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

drop if exists tablename;

由于已将表创建为外部表,因此将从配置单元中删除该表。如果您没有删除这些文件,它们将保留下来。如果要删除外部表及其读取的文件,可以执行以下操作之一:
删除表,然后删除文件
将表更改为托管并删除表
最后,配置单元的元存储的位置默认位于此处 /usr/hive/warehouse .

bttbmeg0

bttbmeg02#

external关键字允许您创建一个表并提供一个位置,以便配置单元不为此表使用默认位置。如果您已经生成了数据,那么这将非常方便。否则,您将加载数据(常规方式或通过在配置单元表所指向的目录中创建文件),在删除外部表时,表中的数据不会从文件系统中删除。外部表指向其存储的任何hdfs位置,而不是存储在配置属性hive.metastore.warehouse.dir指定的文件夹中。
来源:hive文档
因此,在步骤2中,删除文件/user/hive/external/hpd\u txt将删除数据源(指向表的数据),但表仍然存在并将继续指向hdfs://localhost:9000/user/hive/external
@不确定这是否回答了你的问题。如果你还有什么问题,请告诉我。

a7qyws3x

a7qyws3x3#

在浏览了你们的帮助评论和其他帖子之后,我找到了问题的答案。如果我使用loadinpath命令,那么它会将源文件“移动”到创建外部表的位置。这虽然不会受到影响的情况下,下降表,但改变位置是不好的。因此,在内部表中加载数据时使用localinpath。
要从hdfs中的文件加载外部表中的数据,请使用create table查询中的位置,该位置将指向源文件,例如:

create external table hpd(WbanNum string,
YearMonthDay string , 
Time string, 
hourprecip string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
stored as textfile
location 'hdfs://localhost:9000/input/hpd/';

所以这个示例位置将指向hdfs中已经存在的数据。所以这里不需要使用loadinpath命令。
将源文件存储在其专用目录中是一种很好的做法。因此,当外部表作为数据在正确管理的目录系统中创建时,不会出现歧义。
非常感谢你们帮我理解这个概念!干杯!

bz4sfanl

bz4sfanl4#

不要使用加载路径命令。加载操作用于将数据移动(而不是复制)到相应的配置单元表中。使用put或copyfromlocal将文件从非hdfs格式复制到hdfs格式。执行put命令后,只需在create表中提供hdfs文件位置。
删除表不会从磁盘中删除hdfs文件。这就是外部表的优点。配置单元表只存储元数据以访问数据文件。配置单元表在配置单元表中存储数据文件的实际数据。如果删除该表,则数据文件在hdfs文件位置中是不变的。但对于内部表,如果删除表,元数据和数据都将被删除。

相关问题