gpt4 book ai didi

hadoop - Hive 查询在 Hive 客户端和 JDBC 中的执行方式不同

转载 作者:可可西里 更新时间:2023-11-01 16:55:34 28 4
gpt4 key购买 nike

我通过 Hive 客户端、Java 程序 JDBC 和直线执行的以下查询。

SELECT
*
FROM
TABLE_ONE AS t1
JOIN TABLE_TWO t2 ON t2.p_id = t1.p_id
AND t2.p_n_id = t1.p_n_id
AND t2.d_id = t1.d_id
JOIN TABLE_THREE t3 ON t3.d_m_id = t1.d_m_id
AND t3.d_p_id = t1.d_p_id
JOIN TABLE_FOUR t4 ON t4.c_id = t1.c_id
JOIN TABLE_FIVE t5 ON t5.a_n_id = t1.a_n_id
JOIN TABLE_SIX t6 ON t6.d_p_p_s_id = t1.d_p_p_s_id
AND t6.a_v_id = t1.a_v_id
AND t6.p_f_id = t1.p_f_id

通过 Hive cilent 执行时,它在 21 秒内完成,而 Java 程序 JDBC 和 beeline 分别花费了大约 110 秒和 200 秒。

这是我在 JDBC 中获取 Hive Connection 的方式

DriverManager.getConnection("jdbc:hive2://<ip address of hive gateway server>:10000/default?zeroDateTimeBehavior=round").
  • Hive 客户端仅用一个映射器就完成了它。
  • Java JDBC 和直线执行了 5 个 MR 作业。每个 MR 作业需要 2 个映射器和 1 个缩减器。

这是每个表的行数。

  • TABLE_ONE 有 44981 条记录。
  • TABLE_TWO 有 2173 条记录。
  • TABLE_THREE 有 1415 条记录。
  • TABLE_FOUR 有 249 条记录。
  • TABLE_FIVE 有 168 条记录。
  • TABLE_SIX 有 255 条记录。
  • OUTPUT 有 33362 条记录。

我想要 JDBC 中的 Hive 客户端性能。有什么建议吗?

Hive 版本为 0.13.1 (Cloudera 5.3.3)

最佳答案

一些可以帮助您调试的建议:

从直线客户端和通过 JDBC 运行时设置的属性。

我怀疑 hive.auto.convert.join 属性导致了此行为。

基本上从 beeline 开始,它能够读取每个映射器内存中的所有较小表(2 到 6 个),并将其用于连接。但在第二种情况下,它会执行一个 Mapper 来读取每个输入。

尝试将 hive.auto.convert.join 设置为 true。您可能还需要尝试:hive.auto.convert.join.noconditionaltask & hive.auto.convert.join.noconditionaltask.size

HTH.

关于hadoop - Hive 查询在 Hive 客户端和 JDBC 中的执行方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30376536/

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