我通过Hive客户端,Java程序JDBC和直线执行以下查询。
getListView().setItemChecked(position, false);
通过Hive cilent执行时,它已在21秒内完成,其中Java程序JDBC和beeline分别需要110秒和200秒。
以下是我在JDBC中使用Hive Connection的方法
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
以下是每个表的行数。
我希望在JDBC中使用Hive客户端性能。有什么建议吗?
Hive版本为0.13.1(Cloudera 5.3.3)
答案 0 :(得分:1)
一些可以帮助您调试的建议:
从直线客户端运行时设置的属性&通过JDBC。
我怀疑属性hive.auto.convert.join
导致了这种行为。
基本上从直线上可以读取每个映射器内存中的所有较小的表(2到6个)并将其用于连接。但在第二种情况下,它执行Mapper来读取每个输入。
尝试将hive.auto.convert.join
设置为true。您可能还需要玩:hive.auto.convert.join.noconditionaltask
& hive.auto.convert.join.noconditionaltask.size
。
HTH。