【问题标题】:Orc not faster than csv in Hive?兽人在 Hive 中不比 csv 快吗?
【发布时间】:2018-05-05 12:38:46
【问题描述】:

我对在生产环境中使用 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 列。

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

select sum(col1) from my_table_orc;

select distinct col2 from my_table where col3 = someval;

select distinct col2 from my_table_orc where col3 = someval;

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

这里发生了什么,为什么我没有看到数量级的加速?您还需要什么详细信息?

【问题讨论】:

  • 您运行了什么查询? ORC 或 Parquet 更快,但不适用于扫描整个表
  • 您拥有多大的数据以及您正在运行的查询是什么问题。如果您正在测试小数据集,您将无法找到任何性能差异。
  • @sandeeprawat 在描述中添加了更多信息。数据不小,虽然我还是站在单机的角度思考。
  • @cricket_007 在其中一个查询中我正在进行全面扫描,但仅针对 50 列中的 1 列,仅此一项,就应该给我一个巨大的加速。
  • 您期望的数量级是多少?数百万行没有说明数据的大小。 Hadoop 也不喜欢小文件。任何 mapreduce 进程的启动只需几秒钟。启用 Tez,或切换到 SparkSQL、Impala、Presto、Drill 等,让您的查询在几秒钟内运行。

标签: hadoop hive orc


【解决方案1】:

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

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

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

【讨论】:

  • 我在 JDBC 客户端中执行了您的标志,没有出现错误。但是,性能似乎保持不变。
猜你喜欢
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 2020-01-13
  • 2018-06-23
相关资源
最近更新 更多