Hadoop中有一种存储格式名为Har, 也就是Hadoop Archive(Hadoop归档文件)的简写. 一个HAR文件就想再HDFS文件系统中一个Tar文件一样是一个单独的文件. 不够其内部可以存放多个文件和文件夹. 在一些使用场景下, 较旧的文件夹和文件比较新的文件夹和文件访问概率要低很多. 如果某个特定分区下保存的成千上万的话,那么就需要 hdfs中的NameNode消耗非常大的代价来管理这些文件 . 通常将分区下的文件归档成一个巨大的, 但是同时可以被Hive访问的文件, 可以减轻NameNode的压力. 不过缺点是, HAR文件查询效率不高, 同时, HAR文件并非是压缩的. 因此也不会节约存储空间.
实例:
// 开始归档
set hive.archive.enabled=true;
// 将某一个分区进行归档 (归档后数据还是可以正常访问的)
alter table test_archive archive partition(dt='20190806');
归档后结果:
然后我们可以使用unarchive 进行解归档
alter table test_archive unarchive partition(dt='20190806')
恢复归档结果:
注意: 归档相当于将文件进行打包, 但是并不是对其进行压缩. 存储空间还是不变的. 文件还是能够正常访问的.
可以使用此方法来管理小文件;