【问题标题】:Hive TEZ is taking very long time to run the queryHive TEZ 需要很长时间来运行查询
【发布时间】:2019-04-21 05:37:31
【问题描述】:

我对 Hive 和 Hadoop 有点陌生。我有一个查询需要 10 分钟才能完成查询。

数据大小为 10GB 统计:行数:4457541 数据大小:1854337449 基本统计:COMPLETE 列统计:COMPLETE

分区和分桶在表中完成。

如何改进以下查询。

select * fromtbl1 where clmn='Abdul' and loc='IND' and TO_UNIX_TIMESTAMP(ts) > (UNIX_TIMESTAMP() - 5*60*60);
set hive.vectorized.execution.reduce.enabled=true;
set hive.tez.container.size=8192;
set hive.fetch.task.conversion = none;
set mapred.compress.map.output=true;
set mapred.output.compress=true;
set hive.fetch.task.conversion=none;


-----------+--+
|                                                                                                           Explain                                                                                                           |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--+
| Plan not optimized by CBO.                                                                                                                                                                                                  |
|                                                                                                                                                                                                                             |
| Stage-0                                                                                                                                                                                                                     |
|    Fetch Operator                                                                                                                                                                                                           |
|       limit:-1                                                                                                                                                                                                              |
|       Stage-1                                                                                                                                                                                                               |
|          Map 1                                                                                                                                                                                                              |
|          File Output Operator [FS_2973]                                                                                                                                                                                     |
|             compressed:false                                                                                                                                                                                                |
|             Statistics:Num rows: 49528 Data size: 24516360 Basic stats: COMPLETE Column stats: COMPLETE                                                                                                                     |
|             table:{"input format:":"org.apache.hadoop.mapred.TextInputFormat","output format:":"org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat","serde:":"org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe"}  |
|             Select Operator [SEL_2972]                                                                                                                                                                                      |
|                outputColumnNames:["_col0","_col1","_col2","_col3","_col4","_col5","_col6","_col7"]                                                                                                                          |
|                Statistics:Num rows: 49528 Data size: 24516360 Basic stats: COMPLETE Column stats: COMPLETE                                                                                                                  |
|                Filter Operator [FIL_2971]                                                                                                                                                                                   |
|                   predicate:((section = 'xysaa') and (to_unix_timestamp(ts) > (unix_timestamp() - 18000))) (type: boolean)                                                                                               |
|                   Statistics:Num rows: 49528 Data size: 24516360 Basic stats: COMPLETE Column stats: COMPLETE                                                                                                               |
|                   TableScan [TS_2970]                                                                                                                                                                                       |
|                      ACID table:true                                                                                                                                                                                        |
|                      alias:pp                                                                                                                                                                              |
|                      Statistics:Num rows: 4457541 Data size: 1854337449 Basic stats: COMPLETE Column stats: COMPLETE                                                                                                        |
|                                                                                                                                                                                                                             |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--+

没有一个参数可以帮助我们在更短的时间内解决查询。

【问题讨论】:

    标签: hive mapreduce apache-tez


    【解决方案1】:

    根据计划,查询在mapper上运行,向量化未启用。试试这个:

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

    调整映射器并行度:

    set tez.grouping.max-size=67108864;
    set tez.grouping.min-size=32000000;
    

    使用这些设置来增加正在运行的映射器的数量。理想情况下,它应该在没有此设置的情况下运行:

    set hive.tez.container.size=8192;
    

    另一个建议是将unix_timestamp() 替换为UNIX_TIMESTAMP(current_timestamp)。这个函数不是确定性的,它的值对于查询执行的范围也不是固定的,因此会阻止对查询的适当优化 - 从 2.0 开始,它已被弃用,取而代之的是 CURRENT_TIMESTAMP 常量。

    (UNIX_TIMESTAMP(current_timestamp) - 5*60*60)
    

    您的文件也非常小。分区大小为200-500,每个分区12个文件,20-50Mb是文件大小。幸运的是它是 ORC,您可以使用 ALTER TABLE CONCATENATE COMMAND 连接文件。 12个文件不是什么大问题,查询单个分区时您可能不会注意到改进。

    另请参阅此答案:https://stackoverflow.com/a/48487306/2700344

    【讨论】:

    • 没有改进的伙伴。还是一样 。我想知道为什么在 TB 中的数据很大时完成查询需要 10 分钟,而且返回结果也需要同样的时间。如何更快地调整此查询。
    • @Varshini 请回答以下问题:单个分区有多少个文件,文件格式和压缩是什么,什么是分区列?
    • 分区列是 loc,压缩是 ZLIB 和 ORC 文件格式。有40-50个分区。
    • @Varshini 检查每个分区有多少文件及其大小
    • 几乎所有分区都有12个文件。每个分区的大小为 200-500 MB,表的总大小为 10GB。
    猜你喜欢
    • 1970-01-01
    • 2013-08-21
    • 2021-06-15
    • 2011-01-17
    • 2022-08-20
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    相关资源
    最近更新 更多