关于hadoop:Orc是否比Hive中的csv快?

Orc not faster than csv in Hive?

对于在生产环境中使用Hadoop来说,我还很陌生。我使用独家新闻将一个大表从数据库引入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所建议的那样,但似乎确实有很大的不同(它确实将时间减少了几秒钟)。

这是怎么回事,为什么我看不到数量级的加速?您还需要什么详细信息?


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

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

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