Hive 中的四種排序

2021-08-04 23:55:49 字數 2759 閱讀 3369

1、order   by   //可以指定desc 降序 asc 公升序

order by會對輸入做全域性排序,因此只有乙個reducer(多個reducer無法保證全域性有序),然而只有乙個reducer,會導致當輸入規模較大時,消耗較長的計算時間。

create table  temperature(       

year int,

temper float

)row format delimited fields terminated by '\t';

temperature.yeartemperature.temper

200832.0

200821.0

200831.5

200817.0

201334.0

201532.0

201533.0

201515.9

201531.0

201519.9

201527.0

201623.0

201639.9

201632.0

2.sort by 

sort by不是全域性排序,其在資料進入reducer前完成排序,因此,如果用sort by進行排序,並且設定mapred.reduce.tasks>1,則sort by只會保證每個reducer的輸出有序,並不保證全域性有序。sort by不同於order by,它不受hive.mapred.mode屬性的影響,sort by的資料只能保證在同乙個reduce中的資料可以按指定字段排序。使用sort by你可以指定執行的reduce個數(通過set mapred.reduce.tasks=n來指定),對輸出的資料再執行歸併排序,即可得到全部結果。

/設定reduce個數為3;

set mapred.reduce.tasks=3;

//查詢此次任務中reduce的個數;

set mapred.reduce.tasks;

insert overwrite local directory '/home/user01/sort' row format delimited fields terminated by '\t' select * from temperature sort by year;

[user01@hadoop sort]$ ls

000000_0  000001_0  000002_0

[user01@hadoop sort]$ cat 000000_0 

200831.5

200821.0

201531.0

201532.0

201533.0

201623.0

[user01@hadoop sort]$ cat 000001_0 

200817.0

201334.0

201519.9

201515.9

201639.9

201632.0

[user01@hadoop sort]$ cat 000002_0 

200832.0

201527.0

3.distribute  by (重要)

distribute by是控制在map端如何拆分資料給reduce端的。hive會根據distribute by後面列,對應reduce的個數進行分發,預設是採用hash演算法。sort by為每個reduce產生乙個排序檔案。在有些情況下,你需要控制某個特定行應該到哪個reducer,這通常是為了進行後續的聚集操作。distribute by剛好可以做這件事。因此,distribute by經常和sort by配合使用。

//根據年份和氣溫對氣象資料進行排序,以確保所有具有相同年份的行最終都在乙個reducer分割槽中

注:distribute by和sort by的使用場景

1.map輸出的檔案大小不均。

2.reduce輸出檔案大小不均。

3.小檔案過多。

4.檔案超大。

$ cat distribute/000000_0 

2016,23.0

2016,39.9

2016,32.0

2013,34.0

$ cat distribute/000001_0 

2008,32.0

2008,21.0

2008,31.5

2008,17.0

$ cat distribute/000002_0 

2015,31.0

2015,19.9

2015,27.0

2015,32.0

2015,33.0

2015,15.9

☆二者結合使用

select * from temperature distribute by year sort by year  asc, temper desc;

201334.0

201639.9

201632.0

201623.0

200832.0

200831.5

200821.0

200817.0

201533.0

201532.0

201531.0

201527.0

201519.9

201515.9

4.cluster by  

cluster by除了具有distribute by的功能外還兼具sort by的功能。但是排序只能是倒敘排序,不能指定排序規則為asc或

者desc。

select * from  cluster by year;

Hive 中的四種排序 舉例

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

hive中四種排序的區別

hive中有四種排序,分別是 order by,sort by,distribute by 重點 cluster by order by 全域性排序,但是只能有乙個reduce來處理,在嚴格模式下必須指定limit,否則會報錯,在資料量很大的時候,處理時間會很長甚至跑不出資料,慎用!sort by ...

Hive 四種排序方式

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