我想了解 Impala 表中的压缩,但找不到可供研究的材料。
有哪些不同的技术以及我在哪里可以找到研究它的材料。
主要技术为compaction
是为了避免small file problem
这取决于您的用例。
例如,您可能有一个将小文件写入的进程HDFS
并且您想像查询这些文件一样Impala table
。你可以有一个staging table
对于这些小文件并加载base table
using INSERT INTO TABLE base_table SELECT .....FROM stg_table
将小文件压缩成更大的文件。
另一个用例是partitioning
。
使用分区时的一个主要风险是创建分区,这会导致您遇到小文件问题。
发生这种情况时,对表进行分区实际上会降低查询性能
(与使用分区时的目标相反)因为它会导致创建太多小文件。
使用时更可能出现这种情况dynamic partitioning
,但仍然可以
发生与static partitioning
—例如,如果您向销售表添加了新分区
每天包含前一天的销售额,
而且每天的数据也不是特别大。
选择分区时,您希望在过多的分区之间取得良好的平衡
(导致小文件问题)和分区太少(对性能几乎没有好处)。
分区列应具有合理数量的值
对于分区——但是你应该认为合理的东西很难量化。
Using dynamic partitioning
特别危险,因为如果你不小心,
在具有太多不同值的列上进行分区很容易。
想象一个用例,您经常寻找属于以下范围的数据
您在查询中指定的时间范围。
您可能认为在与时间相关的列上进行分区是个好主意。
但一个TIMESTAMP
列的时间可以达到纳秒,因此每一行都可以有唯一的值;
对于分区列来说,这将是一个糟糕的选择!甚至到分钟或小时都可以创造
分区太多,具体取决于数据的性质;
按更大的时间单位(例如日、月甚至年)进行分区可能是更好的选择。
上面的阅读只是对问题的介绍,还有更多的用例,一般主题是性能和调优。
您可以从 Cloudera 文档开始。您可以点击此链接:
调整 Impala 的性能 https://docs.cloudera.com/documentation/enterprise/5-6-x/topics/impala_performance.html
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)