我决定使用 Parquet 作为 hive 表的存储格式,在我实际在集群中实现它之前,我决定运行一些测试。令人惊讶的是,Parquet 在我的测试中速度较慢,而一般认为它比纯文本文件更快。
请注意,我在 MapR 上使用 Hive-0.13
----------------------------------------------------------
| | Table A | Table B | Table C | |
----------------------------------------------------------
| Format | Text | Parquet | Parquet | |
| Size[Gb] | 2.5 | 1.9 | 1.9 | |
| Comrepssion | N/A | N/A | Snappy | |
| CPU [sec] | 123.33 | 204.92 | N/A | Operation1 |
| Time [sec] | 59.057 | 50.33 | N/A | Operation1 |
| CPU [sec] | 51.18 | 117.08 | N/A | Operation2 |
| Time [sec] | 25.296 | 27.448 | N/A | Operation2 |
| CPU [sec] | 57.55 | 113.97 | N/A | Operation3 |
| Time [sec] | 20.254 | 27.678 | N/A | Operation3 |
| CPU [sec] | 57.55 | 113.97 | N/A | Operation4 |
| Time [sec] | 20.254 | 27.678 | N/A | Operation4 |
| CPU [sec] | 127.85 | 255.2 | N/A | Operation5 |
| Time [sec] | 29.68 | 41.025 | N/A | Operation5 |
- Operation1:行计数操作
- 操作2:单行选择
- 操作 3:使用 Where 子句进行多行选择 [提取 1000 行]
- 操作 4:多行选择 [只有 4 列] 使用 Where 子句 [提取 1000 行]
- Operation5:聚合操作[在给定列上使用 sum 函数]
您可以看到,在我对这两个表应用的几乎所有操作中,Parquet 在执行查询所需的时间方面都落后了,但行计数操作除外。
我还使用表 C 来执行上述操作,但结果几乎与 TextFile 格式相似的行再次是两者中更快的。
有人可以让我知道我做错了什么吗?
谢谢!
编辑
我将 ORC 添加到存储格式列表中并再次运行测试。遵循细节。
行计数操作
文本格式累积 CPU - 123.33 秒
Parquet 格式累积 CPU - 204.92 秒
ORC 格式累积 CPU - 119.99 秒
具有 SNAPPY 累积 CPU 的 ORC - 107.05 秒
列操作的总和
文本格式累积 CPU - 127.85 秒
Parquet 格式累积 CPU - 255.2 秒
ORC 格式累积 CPU - 120.48 秒
具有 SNAPPY 累积 CPU 的 ORC - 98.27 秒
列操作的平均值
文本格式累积 CPU - 128.79 秒
Parquet 格式累积 CPU - 211.73 秒
ORC 格式累积 CPU - 165.5 秒
具有 SNAPPY 累积 CPU 的 ORC - 135.45 秒
使用 where 子句从给定范围中选择 4 列
文本格式累积 CPU - 72.48 秒
Parquet 格式累积 CPU - 136.4 秒
ORC 格式累积 CPU - 96.63 秒
具有 SNAPPY 累积 CPU 的 ORC - 82.05 秒
这是否意味着 ORC 比 Parquet 更快?或者我可以做些什么来使其在查询响应时间和压缩率方面更好地工作?
谢谢!