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,會導致當輸入規模較大時,需要較長的計...