gpt4 book ai didi

hadoop - 为什么 hive 加入需要太长时间?

转载 作者:行者123 更新时间:2023-12-02 19:20:13 24 4
gpt4 key购买 nike

我正在运行一个基本上是这样的代码:

Create table abc as 
select A.* from
table1 A
Left outer join
table2 B
on
A.col1=B.col1 and A.col2=B.col2;

table1的记录数=7009102
table2的记录数=1787493

我的脚本中有类似的 6 个查询,但我的脚本卡在第 4 个这样的查询上。我尝试通过 tez 和 mapreduce 运行,但两者都有相同的问题。

在 mapreduce 中,它卡在 map 0% 并且即使在一小时后也减少了 0%。没有 reducer
在 Tez,1 小时内只有 22%。

检查日志后,它会显示许多条目,例如“TaskAttempt attempt_12334_m_000003_0 的进度是:0.0”。

我在 tez 中运行了这项工作,现在已经将近 3 个小时了,这项工作即将完成,其中 2 次在 Map-2 Vertice 中失败。

最佳答案

改进 Hive 查询以更快运行的一般提示

1.使用ORC文件
Hive 支持 ORC 文件——一种新的表存储格式,通过谓词下推(Hive 中的下推)、压缩等技术实现了惊人的速度提升。
对每个 HIVE 表使用 ORCFile 真的很容易,并且非常有利于获得快速响应时间的 HIVE 查询。

CREATETABLEA_ORC ( 
customerIDint, namestring, age int, address string
)

2.使用矢量化
矢量化查询执行提高了扫描、聚合、过滤器和连接等操作的性能,通过一次执行 1024 行而不是每次单行来执行这些操作。
此功能在 Hive 0.13 中引入,显着提高了查询执行时间,并且可以通过两个参数设置轻松启用:
I. sethive.vectorized.execution.enabled = true;
II. sethive.vectorized.execution.reduce.enabled = true;

3. 基于分区的连接:
为了优化 Hive 中的连接,我们必须减少查询扫描时间。为此,我们可以通过在“WHERE”子句或 JOIN 中的 ON 子句中指定分区谓词来创建带有分区的 Hive 表。
例如:表“状态 View ”在“状态”列上进行分区。
以下查询仅检索给定状态的行:
优化 Hive 中的联接
SELECT state_view.* FROM state view WHERE state_view.state= ‘State-1’ AND state_view.state = ‘State-3’;

如果一个表状态 View 与另一个表 city users 连接,可以在 ON 子句中指定分区范围,如下所示:
SELECT state_view.* FROM state_view JOIN city_users ON (state_view.state = city_users.state); 

希望这篇文章对您在 Hive 中的所有联接优化需求有所帮助。

关于hadoop - 为什么 hive 加入需要太长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47550464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com