hadoop - Orc 不比 Hive 中的 csv 快?

标签 hadoop hive orc

我对在生产中使用 Hadoop 还很陌生。我使用 scoop 将一个大表从数据库导入到 Hive 中。 Scoop 创建了一个逗号分隔的文本文件,并在 Hive 中创建了相应的表。

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

由于文本文件与 ORC(二进制数据、脂肪表的列式数据存储、压缩等)相比效率低下,我预计会有一个巨大的数量级改进,但查询执行时间好像一点都没变!

我在两个版本(文本、ORC 甚至 Parquet )上使用了相同的简单查询,并且在连接中使用其中几个表时做了同样的细化。

附加信息: 我正在测试的主表有大约 4.3 亿行和大约 50 列。

我正在运行几个查询: 从 my_table 中选择总和(col1); <= 40 秒

从 my_table_orc 中选择总和(col1); <= 31 秒

从 my_table 中选择不同的 col2,其中 col3 = someval; <= 53 秒

从 my_table_orc 中选择不同的 col2,其中 col3 = someval; <= 35 秒

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

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

最佳答案

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

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

有很多方法可以提高 Hive 性能,例如 Tez 执行、基于成本的查询优化 (CBO) 等。

关于hadoop - Orc 不比 Hive 中的 csv 快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47423435/

相关文章:

hadoop - Sqoop导出速度加快了1亿条记录

python - 使用 python 返回 map<string,string> 类型的 Hive 转换

mysql - 使用 import-all-tables 优化从 MySQL 到 Hive 的 Sqoop 数据导入

hadoop - 有没有办法防止在 Hive 中插入重复行?

hadoop - 将 ORC 文件转换为 Parquet 文件

eclipse - 虚拟机上的Hadoop

hadoop - 当我设置 Hadoop 时,*底层* 文件系统需要哪些权限?

hadoop - 无法在 Hadoop 集群上启动 H2O - ClassNotFound 异常

sql - 如何根据某些条件在配置单元中获取收集集

hadoop - Hive:合并配置设置不起作用