hive的四種排序比較

2021-10-12 03:23:21 字數 1083 閱讀 3947

hive 的四種排序對比

order by 會對輸入做全域性排序

因此只有乙個reducer(多個reducer無法保證全域性有序)

只有乙個reducer,會導致當輸入規模較大時,需要較長的計算時間

在order by 狀態下所有資料會到一台伺服器進行reduce操作也即只有乙個reduce,如果在資料量大的情況下會出現無法輸出結果的情況,如果進行 limit n ,那只有 n * map number 條記錄而已。只有乙個reduce也可以處理過來

hive.mapred.mode = strict 模式下 必須指定 limit 否則執行會報錯。

set hive.mapred.mode=nonstrict; (default value / 預設值)

sort by不是全域性排序,其在資料進入reducer前完成排序.

因此,如果用sort by進行排序,並且設定mapred.reduce.tasks>1, 則sort by只保證每個reducer的輸出有序,不保證全域性有序。

sort by 不受 hive.mapred.mode 是否為strict ,nostrict 的影響

sort by 的資料只能保證在同一reduce中的資料可以按指定字段排序。

使用sort by 你可以指定執行的reduce 個數 (set mapred.reduce.tasks=),對輸出的資料再執行歸併排序,即可以得到全部結果。

按照指定的字段對資料進行劃分到不同的輸出reduce / 檔案中。

distribute by是控制在map端如何拆分資料給reduce端的。

hive會根據distribute by後面列,對應reduce的個數進行分發,預設是採用hash演算法。

sort by為每個reduce產生乙個排序檔案。在有些情況下,你需要控制某個特定行應該到哪個reducer,這通常是為了進行後續的聚集操作。distribute by剛好可以做這件事。

因此,distribute by經常和sort by配合使用。

cluster by 除了具有 distribute by 的功能外還兼具 sort by 的功能。

但是排序只能是倒序排序,不能指定排序規則為asc 或者desc。

Hive 四種排序方式

hive中4種排序的區別 共有四種排序 order by,sort by distribute by,cluster by order by 全域性排序 對輸入的資料做排序,故此只有乙個reducer 多個reducer無法保證全域性有序 只有乙個reducer,會導致當輸入規模較大時,需要較長的計...

Hive 中的四種排序

1 order by 可以指定desc 降序 asc 公升序 order by會對輸入做全域性排序,因此只有乙個reducer 多個reducer無法保證全域性有序 然而只有乙個reducer,會導致當輸入規模較大時,消耗較長的計算時間。create table temperature year i...

Hive 中的四種排序 舉例

1 order by 可以指定desc 降序 asc 公升序 order by會對輸入做全域性排序,因此只有乙個reducer 多個reducer無法保證全域性有序 然而只有乙個reducer,會導致當輸入規模較大時,消耗較長的計算時間。create table temperature year i...