为什么镶木地板对于我来说对于hive中的文本文件格式较慢?

时间:2015-09-02 10:25:57

标签: hadoop hive parquet mapr snappy

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秒

  • 使用Where子句[1000行提取]
  • 进行多行选择

表A

地图 - 15

减少 - 0

累积CPU - 57.55秒

所花费的时间 - 20.254秒

表B

地图 - 8

减少 - 0

累计CPU - 113.97秒

所花费的时间 - 27.678秒

  • 多行选择[仅包含4列]使用Where子句[已提取1000行]

表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更快?或者我可以做些什么来使查询响应时间和压缩率更好地工作?

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,我想指出的是,实际上不可能用给定的细节来回答您的问题。

几点:

  • 在分布式环境中测量时间不是确定某件事是否缓慢的方法(如果您正在运行许多查询并竞争资源,那么您就无法衡量自己的想法)

  • 不提供实际的表定义,并且针对这些表运行的查询使该问题无法重现

  • 不提供表的行数和基数及其单个字段也无济于事

通常,查询Parquet的速度比查询文本文件的速度快得多,这是因为Parquet使用许多东西来使读取操作快得多。这些东西很少:

  • 压缩
  • 游程长度编码
  • 字典编码

根据用例,可以将事物的某些参数调整为确切的用例。