Hadoop 配置单元表能否在基础目录更改时自动更新

Hadoop 配置单元表能否在基础目录更改时自动更新,hadoop,amazon-s3,hive,hdfs,Hadoop,Amazon S3,Hive,Hdfs,如果我在一些S3(或HDFS)目录上构建一个配置单元表,如下所示: create external table newtable (name string) row format delimited fields terminated by ',' stored as textfile location 's3a://location/subdir/'; 当我将文件添加到S3位置时,配置单元表不会自动更新。只有在该位置创建新的配置单元表时,才会包含新数据。是否有一种方法可以构建配置单元表

如果我在一些S3(或HDFS)目录上构建一个配置单元表,如下所示:

create external table newtable (name string) 
row format delimited 
fields terminated by ',' 
stored as textfile location 's3a://location/subdir/';

当我将文件添加到S3位置时,配置单元表不会自动更新。只有在该位置创建新的配置单元表时,才会包含新数据。是否有一种方法可以构建配置单元表(可能使用分区),以便在将新文件添加到基础目录时,配置单元表自动显示数据(无需重新创建配置单元表)?

在HDFS上,每次查询@dududu Markovitz所指的表时,都会扫描每个文件。HDFS中的文件立即保持一致。S3上的文件在创建后立即保持一致,在删除或覆盖后最终保持一致。在s3表文件夹中添加新文件时,在查询配置单元表时可以立即访问这些文件。如果您正在重写文件,S3中的最终一致性可能会出现问题。如果您重写的文件不是立即一致的,则它们最终是一致的,请参见此处:。很少有方法可以消除最终的一致性问题,比如每次根据时间戳写入新创建的分区,或者根据时间戳或一些runID删除并创建具有新位置的表。这个想法是每次创建新文件。 也可以看看这个:


另外,在添加文件后查询表时使用统计信息可能会有问题,请参见此处:

@leftjoin所说的一切都是正确的,还有一个额外的细节:s3不提供列表的即时一致性。可以上载新blob,HEAD/GET将返回它,但父路径上的列表操作可能看不到它。这意味着列出目录的配置单元代码可能看不到数据。使用唯一的名称并不能解决这个问题,只能使用像Dynamo这样的一致数据库,它会随着文件的添加/删除而更新。即使在那里,您也添加了一个新的东西来保持同步…

文件是否直接添加到
s3a://location/subdir/
或此位置下的任何子目录?这没有意义。元存储保存位置,而不是其内容。当您查询表时,应该扫描该位置内的每个文件。@franklinsijo这些文件被添加到
s3a://location/subdir/
目录中@Dudu每个文件都应该被扫描,这就是为什么如果我将另一个文件添加到该子目录中,我希望在表上运行“select*”时显示该数据。但事实并非如此;它显示相同的表(没有新添加的数据)。