簡體   English   中英

Hive Map-Join 配置之謎

[英]Hive Map-Join configuration mystery

有人可以清楚地解釋兩者之間的區別是什么

hive.auto.convert.join

hive.auto.convert.join.noconditionaltask

配置參數?

還有這些對應的尺寸參數:

hive.mapjoin.smalltable.filesize

hive.auto.convert.join.noconditionaltask.size

我的觀察是在hive.auto.convert.join.noconditionaltask.size上運行時,即使hive.mapjoin.smalltable.filesize設置的小於小表的大小,當hive.auto.convert.join.noconditionaltask.size設置為足夠高的值時,Map-Join 也能工作。

為什么我們兩者都需要

hive.auto.convert.joinhive.auto.convert.join.noconditionaltask

Apache 文檔非常混亂。

這些參數用於決定何時在 hive 中對Common join使用Map Join ,這最終會影響最后的查詢性能。

當連接表之一小到足以放入內存時,使用Map join ,因此速度非常快。 這里是所有參數的解釋:

hive.auto.convert.join

當此參數設置為true ,Hive 將自動檢查較小的表文件大小是否大於hive.mapjoin.smalltable.filesize指定的值,如果大於此值,則通過 common join 執行查詢。 啟用自動轉換連接后,無需在查詢中提供地圖連接提示。

hive.auto.convert.join.noconditionaltask

當join涉及三個或更多表時,以及

hive.auto.convert.join = true - Hive 生成​​三個或更多 map-side 連接,並假設所有表的大小都較小。

hive.auto.convert.join.noconditionaltask = true ,如果 n-1 表的大小小於 10 MB,hive 會將三個或更多 map-side join 合並為一個 map-side join。 這里的大小由hive.auto.convert.join.noconditionaltask.size定義。

hive.mapjoin.smalltable.filesize

這個設置基本上是告訴優化器你系統中小表的定義的方式。 這個值定義什么是小表,然后當查詢基於這個值執行時,它確定 join 是否有資格轉換為map join

hive.auto.convert.join.noconditionaltask.size

大小配置使用戶能夠控制什么大小的表可以放入內存。 此值表示可以轉換為適合內存的哈希圖的表大小的總和。

這是非常好的解釋鏈接,其中包括對所有 4 個參數的描述以及示例:

http://www.openkb.info/2016/01/difference-between-hivemapjoinsmalltabl.html

暫無
暫無

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

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