从har档案查询数据-apache配置单元

9cbw7uwe  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(255)

我正在使用hadoop,面临着大量小文件的可怕问题。我需要能够从现有的配置单元分区中创建har存档,并同时查询它们。然而,hive显然只支持在托管表中而不支持在外部表中归档分区,这是非常悲哀的。我试图找到一个解决方法,通过使用hadoop的归档工具手动归档分区目录中的文件。我现在需要配置配置单元,以便能够查询存储在这些存档中的数据,以及存储在其他分区目录中的未存档数据。请注意,我们只使用外部表。
用于访问所创建分区har中的文件的名称空间对应于分区dir的hdfs路径。例如,hdfs中的文件:

hdfs:///user/user1/data/db1/tab1/ds=2016_01_01/f1.txt

存档后可以访问:

har:///user/user1/data/db1/tab1/ds=2016_01_01.har/f1.txt

hive是否可以从外部表查询har归档文件?如果是,请建议一种方法。
致以最诚挚的问候

fhg3lkii

fhg3lkii1#

实际上,“托管”表和“外部”表之间的界限很窄。
我的建议是:
创建“托管”表
在未来的几天内显式地添加分区,但要使用特别的位置,即外部进程期望使用的目录
让外部进程直接在hdfs级别转储它的文件——它们在配置单元查询中自动公开,“托管”或“不托管”
(metastore不跟踪单个文件和块,它们在每个查询中都会被检测到;顺便说一句,如果愿意,您可以在hdfs级别运行备份和还原操作,只要不弄乱目录结构就可以了)
当一个分区处于“冷”状态并且您非常确定不会有另一个文件转储到该分区时,您可以运行hive命令来存档该分区,即在单个har中移动小文件+在metastore中将该分区标记为“已存档”
好处:很容易在hive中取消分区的归档(而没有归档) hadoop unarchive 命令afaik)。
警告:这是一个“托管”表,所以请记住不要删除任何内容,除非您已将数据安全地移出配置单元托管目录。

相关问题