OK!所以我决定使用Parquet作为hive表的存储格式,在我实际在集群中实现它之前,我决定运行一些测试。令人惊讶的是,Parquet在我的测试中速度较慢,因为它比普通文本文件更快。
请注意我在MapR上使用Hive-0.13
遵循我的操作流程
表A
格式 - 文字格式
表格大小 - 2.5 Gb
表B
格式 - 镶木地板
表格大小 - 1.9 Gb
[将表格B存储为镶木地板,作为选择*来自A]
表C
格式 - 带有快速压缩的镶木地板
表格大小 - 1.9 Gb
[创建表格C存储为镶木地板tblproperties(" parquet.compression" =" SNAPPY")作为select * from A]
现在我对上面提到的表进行了一些测试并遵循了详细信息。
表A
地图 - 15
减少 - 1
累计CPU - 123.33秒
所花费的时间 - 59.057秒
表B
地图 - 8
减少 - 1
累计CPU - 204.92秒
所花费的时间 - 50.33秒
表A
地图 - 15
减少 - 0
累积CPU - 51.18秒
所花费的时间 - 25.296秒
表B
地图 - 8
减少 - 0
累积CPU - 117.08秒
所花费的时间 - 27.448秒
表A
地图 - 15
减少 - 0
累积CPU - 57.55秒
所花费的时间 - 20.254秒
表B
地图 - 8
减少 - 0
累计CPU - 113.97秒
所花费的时间 - 27.678秒
表A
地图 - 15
减少 - 0
累积CPU - 57.55秒
所花费的时间 - 20.254秒
表B
地图 - 8
减少 - 0
累计CPU - 113.97秒
所花费的时间 - 27.678秒
表A
地图 - 15
减少 - 1
累积CPU - 127.85秒
所花费的时间 - 29.68秒
表B
地图 - 8
减少 - 1
累积CPU - 255.2秒
所花费的时间 - 41.025秒
您可以看到,在我在两个表上应用的几乎所有操作中,Parquet在执行查询所花费的时间方面落后,但行计数操作除外。
我还使用表C来执行上述操作,但结果几乎在类似的行上,TextFile格式再次是两者的快捷方式。
有人可以让我知道我做错了吗?
谢谢!
修改
我将ORC添加到存储格式列表中并再次运行测试。遵循细节。
行计数操作
文本格式累积CPU - 123.33秒
实用木地板格式累计CPU - 204.92秒
ORC格式累积CPU - 119.99秒
ORC与SNAPPY累计CPU - 107.05秒
列操作的总和
文本格式累积CPU - 127.85秒
实用木地板格式累计CPU - 255.2秒
ORC格式累积CPU - 120.48秒
ORC与SNAPPY累积CPU - 98.27秒
列操作的平均值
文本格式累积CPU - 128.79秒
实用木地板格式累计CPU - 211.73秒
ORC格式累积CPU - 165.5秒
ORC与SNAPPY累积CPU - 135.45秒
使用where子句
从给定范围中选择4列文本格式累积CPU - 72.48秒
实用木地板格式累积CPU - 136.4秒
ORC格式累积CPU - 96.63秒
ORC与SNAPPY累积CPU - 82.05秒
这是否意味着ORC比Parquet更快?或者我可以做些什么来使查询响应时间和压缩率更好地工作?
谢谢!
答案 0 :(得分:0)
首先,我想指出的是,实际上不可能用给定的细节来回答您的问题。
几点:
在分布式环境中测量时间不是确定某件事是否缓慢的方法(如果您正在运行许多查询并竞争资源,那么您就无法衡量自己的想法)
不提供实际的表定义,并且针对这些表运行的查询使该问题无法重现
不提供表的行数和基数及其单个字段也无济于事
通常,查询Parquet的速度比查询文本文件的速度快得多,这是因为Parquet使用许多东西来使读取操作快得多。这些东西很少:
根据用例,可以将事物的某些参数调整为确切的用例。