日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

2.12 Hivet中order by,sort by、distribute by和cluster by

發(fā)布時(shí)間:2023/12/1 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2.12 Hivet中order by,sort by、distribute by和cluster by 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy

一、order by

對(duì)全局?jǐn)?shù)據(jù)的排序,僅僅只有一個(gè)reduce;Hive中的order by跟傳統(tǒng)的sql語(yǔ)言中的order by作用是一樣的,會(huì)對(duì)查詢的結(jié)果做一次全局排序, 所以說(shuō),只有hive的sql中制定了order by所有的數(shù)據(jù)都會(huì)到同一個(gè)reducer進(jìn)行處理(不管有多少map, 也不管文件有多少的block只會(huì)啟動(dòng)一個(gè)reducer)。但是對(duì)于大量數(shù)據(jù)這將會(huì)消耗很長(zhǎng)的時(shí)間去執(zhí)行。這里跟傳統(tǒng)的sql還有一點(diǎn)區(qū)別:如果指定了hive.mapred.mode=strict(默認(rèn)值是nonstrict),這時(shí)就必須 指定limit來(lái)限制輸出條數(shù),原因是:所有的數(shù)據(jù)都會(huì)在同一個(gè)reducer端進(jìn)行,數(shù)據(jù)量大的情況下可能 不能出結(jié)果,那么在這樣的嚴(yán)格模式下,必須指定輸出的條數(shù)。hive (db_hive)> select * from emp order by empno desc;


二、sort by

Hive中指定了sort by,那么在每個(gè)reducer端都會(huì)做排序,也就是說(shuō)保證了局部有序(每個(gè)reducer出來(lái)的數(shù)據(jù)是有序的, 但是不能保證所有的數(shù)據(jù)是有序的,除非只有一個(gè)reducer),好處是:執(zhí)行了局部排序之后可以為接下去的全局排序提高不少的效率 (其實(shí)就是做一次歸并排序就可以做到全局排序了)。#我們可以設(shè)置一下reduce的個(gè)數(shù) hive (db_hive)> set mapreduce.job.reduces= 3; hive (db_hive)> set mapreduce.job.reduces; mapreduce.job.reduces=3#再執(zhí)行的時(shí)候就會(huì)有3個(gè)reduce結(jié)果,在命令行上輸出結(jié)果時(shí)默認(rèn)合并了, hive (db_hive)> select * from emp sort by empno asc;#如果用下面語(yǔ)句將結(jié)果插入到本地目錄,就會(huì)看到三個(gè)結(jié)果集 insert overwrite local directory'/opt/datas/sortby-res'select * from emp sort by empno asc;[root@hadoop-senior ~]# ls /opt/datas/sortby-res/ 000000_0 000001_0 000002_0[root@hadoop-senior ~]# cat /opt/datas/sortby-res/000000_0 7654MARTINSALESMAN76981981-9-281250.01400.030 7698BLAKEMANAGER78391981-5-12850.0\N30 7782CLARKMANAGER78391981-6-92450.0\N10 7788SCOTTANALYST75661987-4-193000.0\N20 7839KINGPRESIDENT\N1981-11-175000.0\N10 7844TURNERSALESMAN76981981-9-81500.00.030[root@hadoop-senior ~]# cat /opt/datas/sortby-res/000001_0 7499ALLENSALESMAN76981981-2-201600.0300.030 7521WARDSALESMAN76981981-2-221250.0500.030 7566JONESMANAGER78391981-4-22975.0\N20 7876ADAMSCLERK77881987-5-231100.0\N20 7900JAMESCLERK76981981-12-3950.0\N30 7934MILLERCLERK77821982-1-231300.0\N10[root@hadoop-senior ~]# cat /opt/datas/sortby-res/000002_0 7369SMITHCLERK79021980-12-17800.0\N20 7902FORDANALYST75661981-12-33000.0\N20


三、distribute by

類似于MapReduce中分區(qū)partition,對(duì)數(shù)據(jù)進(jìn)行分區(qū),結(jié)合sort by進(jìn)行使用;

distribute by必須要寫在sort by之前,因?yàn)閐istribute by的功能是要先分區(qū),sort by是對(duì)分區(qū)進(jìn)行排序的;

#我這里是對(duì)deptno進(jìn)行分區(qū),然后對(duì)empno排序 hive (db_hive)> insert overwrite local directory '/opt/datas/distby-res' select * from emp distribute by deptno sort by empno asc;#emp表的最后一個(gè)字段是deptno,從下面可以看出是按最后一個(gè)字段分區(qū)的 [root@hadoop-senior ~]# cat /opt/datas/distby-res/000000_0 7499ALLENSALESMAN76981981-2-201600.0300.030 7521WARDSALESMAN76981981-2-221250.0500.030 7654MARTINSALESMAN76981981-9-281250.01400.030 7698BLAKEMANAGER78391981-5-12850.0\N30 7844TURNERSALESMAN76981981-9-81500.00.030 7900JAMESCLERK76981981-12-3950.0\N30[root@hadoop-senior ~]# cat /opt/datas/distby-res/000001_0 7782CLARKMANAGER78391981-6-92450.0\N10 7839KINGPRESIDENT\N1981-11-175000.0\N10 7934MILLERCLERK77821982-1-231300.0\N10[root@hadoop-senior ~]# cat /opt/datas/distby-res/000002_0 7369SMITHCLERK79021980-12-17800.0\N20 7566JONESMANAGER78391981-4-22975.0\N20 7788SCOTTANALYST75661987-4-193000.0\N20 7876ADAMSCLERK77881987-5-231100.0\N20 7902FORDANALYST75661981-12-33000.0\N20


四、cluster by

當(dāng)distribute by和sort by字段相同時(shí),可以使用cluster by;

cluster by 除了具有 distribute by 的功能外還兼具 sort by 的功能。 所以最終的結(jié)果是每個(gè)Reduce處理的數(shù)據(jù)范圍不重疊,

而且每個(gè)Reduce內(nèi)的數(shù)據(jù)是排序的,而且可以打到全局有序的結(jié)果。

## hive (db_hive)> insert overwrite local directory '/opt/datas/cluster-res' select * from emp cluster by empno; ## [root@hadoop-senior ~]# ls /opt/datas/cluster-res/ 000000_0 000001_0 000002_0[root@hadoop-senior ~]# cat /opt/datas/cluster-res/000000_0 7521WARDSALESMAN76981981-2-221250.0500.030 7566JONESMANAGER78391981-4-22975.0\N20 7698BLAKEMANAGER78391981-5-12850.0\N30 7782CLARKMANAGER78391981-6-92450.0\N10 7788SCOTTANALYST75661987-4-193000.0\N20 7839KINGPRESIDENT\N1981-11-175000.0\N10 7902FORDANALYST75661981-12-33000.0\N20[root@hadoop-senior ~]# cat /opt/datas/cluster-res/000001_0 7369SMITHCLERK79021980-12-17800.0\N20 7654MARTINSALESMAN76981981-9-281250.01400.030 7876ADAMSCLERK77881987-5-231100.0\N20 7900JAMESCLERK76981981-12-3950.0\N30[root@hadoop-senior ~]# cat /opt/datas/cluster-res/000002_0 7499ALLENSALESMAN76981981-2-201600.0300.030 7844TURNERSALESMAN76981981-9-81500.00.030 7934MILLERCLERK77821982-1-231300.0\N10


五、總結(jié)

OrderBy 全局排序,一個(gè)ReduceSort By 每個(gè)reduce內(nèi)部進(jìn)行排序,全局不是排序Distribute By 類似MR中partition,進(jìn)行分區(qū),結(jié)合sort by使用Cluster By 當(dāng)distribute和sort字段相同時(shí),使用方式

轉(zhuǎn)載于:https://www.cnblogs.com/weiyiming007/p/10761404.html

總結(jié)

以上是生活随笔為你收集整理的2.12 Hivet中order by,sort by、distribute by和cluster by的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。