Impala 表中的压缩

Compaction in Impala Tables

我想了解 Impala 表中的压缩,但找不到 material 来研究。 有哪些不同的技术以及在哪里可以找到 material 来研究它。

compaction 的主要技术是避免 small file problem,这取决于您的用例。

例如,您可能有一个正在将小文件写入 HDFS 的进程,并且您想像查询 Impala table 一样查询这些文件。您可以为这些小文件设置 staging table 并使用 INSERT INTO TABLE base_table SELECT .....FROM stg_table 加载 base table 以将小文件压缩成更大的文件。

另一个用例是 partitioning。 使用分区时的一个主要风险是创建导致您陷入小文件问题的分区。 发生这种情况时,分区 table 实际上会降低查询性能 (与使用分区时的目标相反)因为它会导致创建太多的小文件。 这在使用 dynamic partitioning 时更有可能,但它仍然可以 发生在 static partitioning 中——例如,如果您向销售 table 添加了一个新分区 每天包含前一天的销售额, 而且每天的数据量都不是特别大

选择分区时,您想在太多分区之间取得平衡 (导致小文件问题)和分区太少(提供性能好处不大)。 分区列或列应具有合理数量的值 对于分区——但你认为合理的东西很难量化。

使用 dynamic partitioning 特别危险,因为如果你不小心, 很容易在具有太多不同值的列上进行分区。 想象一个用例,您经常在其中查找属于以下范围的数据 您将在查询中指定的时间范围。 您可能认为在与时间相关的列上进行分区是个好主意。 但是 TIMESTAMP 列的时间可以精确到纳秒,所以每一行都可以有一个唯一的值; 对于分区列来说,这将是一个糟糕的选择!甚至到分钟或小时都可以创造 分区太多,具体取决于数据的性质; 按日、月甚至年等较大的时间单位进行分区可能是更好的选择。

上面的阅读只是问题的介绍,还有更多的用例,一般主题是性能和调优。

您可以从 Cloudera 文档开始。你可以关注这个 link:

Tuning Impala for Performance

希望这对您有所帮助。