Orc不比Hive中的csv快?

时间:2017-11-21 21:57:29

标签: hadoop hive orc

我在制作中使用Hadoop相当新。我用scoop将数据库中的大表引入Hive。 Scoop创建了一个逗号分隔的文本文件,并在Hive中创建了相应的表。

然后我执行了create table new_table_orc stored as orc as select * from old_table_csv

由于文本文件与ORC(二进制数据,胖表的列式数据存储,压缩等)相比效率低,我预计会有一个巨大的,数量级的改进但查询执行时间似乎根本没有变化!

我在两个版本(文本,ORC甚至是镶木地板)上都使用了相同的简单查询,并且当在连接中使用了其中几个表时,它们也做了同样的精简。

其他信息: 我测试的主表有大约4.3亿行和大约50列。

我正在运行几个查询: select sum(col1) from my_table;< = 40秒

select sum(col1) from my_table_orc;< = 31秒

select distinct col2 from my_table where col3 = someval;< = 53秒

select distinct col2 from my_table_orc where col3 = someval;< = 35秒

我也启用了矢量化,正如@sahil desai建议的那样,但似乎确实产生了巨大的差异(它确实将时间减少了几秒钟)。

这里发生了什么,为什么我没有看到数量级的加速?您需要更多细节吗?

1 个答案:

答案 0 :(得分:2)

根据我的经验,ORC更快。对每个HIVE表使用ORC文件应该非常有利于获得HIVE查询的快速响应时间。我认为你必须启用矢量化,矢量化查询执行可以提高扫描,聚合,过滤器和连接等操作的性能,通过一次1024行而不是单行执行它们。

set hive.vectorized.execution.enabled = true;    
set hive.vectorized.execution.reduce.enabled = true;  

有许多方法可以改善蜂巢性能,如Tez执行,基于成本的查询优化(CBO)等。