簡體   English   中英

Hive查詢在Hive客戶端和JDBC中的執行方式不同

[英]Hive query executing differently in Hive client and JDBC

我通過Hive客戶端,Java程序JDBC和beeline執行以下查詢。

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和beeline執行了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條記錄。

我想要Hive客戶端在JDBC中的性能。 有什么建議嗎?

Hive版本為0.13.1(Cloudera 5.3.3)

一些建議可以幫助您調試:

從beeline客戶端和通過JDBC運行時設置的屬性。

我懷疑屬性hive.auto.convert.join導致了此行為。

基本上,從beeline可以讀取每個映射器內存中的所有較小表(2到6)並將其用於聯接。 但是在第二種情況下,它執行Mapper讀取每個輸入。

嘗試將hive.auto.convert.join設置為true。 您可能還需要嘗試: hive.auto.convert.join.noconditionaltaskhive.auto.convert.join.noconditionaltask.size

HTH。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM