簡體   English   中英

如何在 Spark 上“強制”Hive 使用 Map Join?

[英]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 由於壓縮和序列化,同一數據集的totalSizerawDataSize之間可能會出現很大差異。 對於 Spark 上的 Hive,您可能需要為hive.auto.convert.join.noconditionaltask.size指定更大的值以將相同的連接轉換為映射連接。

請看看這是否適用於您的情況。

由於我們沒有看到您的查詢,我不確定動態分區修剪(在您的鏈接中引用)與您的MapJoin問題有何MapJoin

暫無
暫無

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

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