Apache spark 在用压缩文件替换HDFS中的小文件时,如何避免中断活动配置单元/Presto查询?

Apache spark 在用压缩文件替换HDFS中的小文件时,如何避免中断活动配置单元/Presto查询?,apache-spark,hadoop,hive,hdfs,presto,Apache Spark,Hadoop,Hive,Hdfs,Presto,我们每天每小时都要写入100个HDFS分区。这些分区每天都在加载到蜂巢中,数据以拼花格式写入 我们遇到的问题是,因为我们希望尽可能快地获得可查询的数据,每小时的写入会导致大量小文件 有很多例子,比如组合代码;我的问题是,在移动/替换新压缩的文件以替换小文件时,如何避免破坏人们的活动查询?元存储区为每个分区都有一个文件系统位置。此位置通常基于表和分区: hdfs://namenode/data/web/request_logs/ds=2018-05-03 但是,位置可以是完全任意的,因此您可以利

我们每天每小时都要写入100个HDFS分区。这些分区每天都在加载到蜂巢中,数据以拼花格式写入

我们遇到的问题是,因为我们希望尽可能快地获得可查询的数据,每小时的写入会导致大量小文件


有很多例子,比如组合代码;我的问题是,在移动/替换新压缩的文件以替换小文件时,如何避免破坏人们的活动查询?

元存储区为每个分区都有一个文件系统位置。此位置通常基于表和分区:

hdfs://namenode/data/web/request_logs/ds=2018-05-03
但是,位置可以是完全任意的,因此您可以利用它来实现快照隔离或版本控制。压缩分区中的文件时,将新文件写入新位置:

hdfs://namenode/data/web/request_logs/v2_ds=2018-05-03

压缩完成后,更新元存储中的分区位置以指向新位置。最后,在没有查询使用旧位置后,在将来的某个时候清理它。

我原以为分区的ds部分必须与配置单元透视图中的分区键名称匹配?路径可以是任意值。@DainSundstrom我认为这不是重点。用户会说在哪里ds=x,然后引入v2_ds=y,用户必须重写查询以获取新数据我觉得要求大量用户重写查询是不可行的。从元存储返回的位置路径可以是任何东西。它包含表/分区的唯一原因是因为这是Hive、Presto等使用的默认值。但是,您可以自由地将其更改为您想要的任何内容。Partton值单独存储在metastore中。您可以使用Hive Streaming w/ORC文件,该文件运行自己的压缩处理器数据最初是从Spark jobs写入的..好的。。。在任何情况下,正如您所发现的,HDFS不喜欢小文件,并且您无法通过HDFS和其上的配置单元表尽可能快地提供查询。。。推荐的模式通常是将数据放入实际数据库(如HBase),然后导出数据块,以便使用Hive进行长期存储