[英]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.join
和hive.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.