1、join連接時的優化_當三個或多個以上的表進行join操作時,如果每個on使用相同的字段連接時只會產生一個mapreduce。
2、join連接時的優化_當多個表進行查詢時,從左到右表的大小順序應該是從小到大。原因_hive在對每行記錄操作時會把其他表先緩存起來,直到掃描最后的表進行計算
3、在where字句中增加分區過濾器。
4、當可以使用left semi join語法時不要使用inner join,前者效率更高。原因_對于左表中指定的一條記錄,一旦在右表中找到立即停止掃描。
5、如果所有表中有一張表足夠小,則可置于內存中,這樣在和其他表進行連接的時候就能完成匹配,省略掉reduce過程。
設置屬性即可實現,
set hive.auto.covert.join_true;
用戶可以配置希望被優化的小表的大小
set hive.mapjoin.smalltable.sia_2500000;如果需要使用這兩個配置可置入$HOME/.hiverc文件中。
6、同一種數據的多種處理_從一個數據源產生的多個數據聚合,無需每次聚合都需要重新掃描一次。
例如_
insert overwrite table student select * from employee;
insert overwrite table person select * from employee;
可以優化成_
from employee
insert overwrite table student select *
insert overwrite table person select *
7、limit調優_limit語句通常是執行整個語句后返回部分結果。
Set hive.limit.optimia.enable_true;
8、開啟并發執行。某個job任務中可能包含眾多的階段、其中某些階段沒有依賴關系可以并發執行,開啟并發執行后job任務可以更快的完成。
設置屬性_
set hive.e>ecparallel_true;
9、hive提供的嚴格模式,禁止3種情況下的查詢模式。
a_當表為分區表時,where字句后沒有分區字段和限制時,不允許執行。
b_當使用order by語句時,必須使用limit字段,因為order by只會產生一個reduce任務。
c_限制笛卡爾積的查詢。