1

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

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%。Tez 中没有减速器,1 小时内只有 22%。

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

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

4

2 回答 2

0

Hive 使用 MapReduce,这是它运行缓慢的主要原因,但如果您想了解更多信息,请参阅下面的链接 https://community.hortonworks.com/content/supportkb/48808/a-hive-join-query-is -慢,因为它是卡住-for.html

于 2017-11-29T10:50:25.977 回答
0

改进 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 表。
例如:表“状态视图”在“状态”列上进行分区。以下查询仅检索给定状态的行:优化 Hive 中的连接

SELECT state_view.* FROM state view WHERE state_view.state= ‘State-1’ AND state_view.state = ‘State-3’;

如果一个表状态视图与另一个表 city users 连接,可以在 ON 子句中指定分区范围,如下所示:

SELECT state_view.* FROM state_view JOIN city_users ON (state_view.state = city_users.state); 

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

于 2017-11-29T10:56:55.237 回答