[英]How to "force" Hive on Spark to use Map Join?
Spark 上的 Hive 不使用 Map-Join 對視圖進行查詢,該視圖在多個表上進行聯合。
當使用 MR 引擎進行相同查詢時,使用 Map-Join。
我嘗試按照 Cloudera 的建議設置各種火花設置 - https://www.cloudera.com/documentation/enterprise/5-13-x/topics/admin_hos_oview.html#dpp_in_hos
我使用的視圖是一些表的簡單聯合,這些表都具有相同的結構並被分區。
視圖創建如下:
create view myView
as
select * from tbl1
union all
select * from tbl2
union all
select * from tbl3
union all
select * from tbl4
我正在運行的 HQL 查詢有一個“ where子句”,其中需要分區訪問。 HoS 沒有意識到這一點,而 HoMR 利用了分區和 Map-Join。
當前使用 Hive 1.1(建議升級與 atm 無關)
謝謝
正如此 Cloudera 文檔中所述,以下設置對 Hive On Spark 中的MapJoin
行為有直接影響:
...
hive.auto.convert.join.noconditionaltask.size
是基於統計將普通連接轉換為映射連接的閾值,可能會對性能產生重大影響。 盡管此配置用於 MapReduce 上的 Hive 和 Spark 上的 Hive,但每個人對它的解釋不同。數據的大小由兩個統計量來描述:
totalSize
- 磁盤上數據的大致大小rawDataSize
- 內存中數據的近似大小MapReduce 上的 Hive 使用
totalSize
。 當兩者都可用時,Hive on Spark 使用rawDataSize
。 由於壓縮和序列化,同一數據集的totalSize
和rawDataSize
之間可能會出現很大差異。 對於 Spark 上的 Hive,您可能需要為hive.auto.convert.join.noconditionaltask.size
指定更大的值以將相同的連接轉換為映射連接。
請看看這是否適用於您的情況。
由於我們沒有看到您的查詢,我不確定動態分區修剪(在您的鏈接中引用)與您的MapJoin
問題有何MapJoin
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.