国内做网站建设好的,自学小程序开发,wordpress博客没图片,服务好的武进网站建设https://cwiki.apache.org/confluence/display/Hive/LanguageManualSortBy一、order by对全局数据的排序#xff0c;仅仅只有一个reduce#xff1b;Hive中的order by跟传统的sql语言中的order by作用是一样的#xff0c;会对查询的结果做一次全局排序#xff0c;
所以说SortBy一、order by对全局数据的排序仅仅只有一个reduceHive中的order by跟传统的sql语言中的order by作用是一样的会对查询的结果做一次全局排序
所以说只有hive的sql中制定了order by所有的数据都会到同一个reducer进行处理不管有多少map
也不管文件有多少的block只会启动一个reducer。但是对于大量数据这将会消耗很长的时间去执行。这里跟传统的sql还有一点区别如果指定了hive.mapred.modestrict默认值是nonstrict,这时就必须
指定limit来限制输出条数原因是所有的数据都会在同一个reducer端进行数据量大的情况下可能
不能出结果那么在这样的严格模式下必须指定输出的条数。hive (db_hive) select * from emp order by empno desc;二、sort byHive中指定了sort by那么在每个reducer端都会做排序也就是说保证了局部有序每个reducer出来的数据是有序的
但是不能保证所有的数据是有序的除非只有一个reducer好处是执行了局部排序之后可以为接下去的全局排序提高不少的效率
其实就是做一次归并排序就可以做到全局排序了。#我们可以设置一下reduce的个数
hive (db_hive) set mapreduce.job.reduces 3;
hive (db_hive) set mapreduce.job.reduces;
mapreduce.job.reduces3#再执行的时候就会有3个reduce结果在命令行上输出结果时默认合并了
hive (db_hive) select * from emp sort by empno asc;#如果用下面语句将结果插入到本地目录就会看到三个结果集
insert overwrite local directory/opt/datas/sortby-resselect * from emp sort by empno asc;[roothadoop-senior ~]# ls /opt/datas/sortby-res/
000000_0 000001_0 000002_0[roothadoop-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[roothadoop-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[roothadoop-senior ~]# cat /opt/datas/sortby-res/000002_0
7369SMITHCLERK79021980-12-17800.0\N20
7902FORDANALYST75661981-12-33000.0\N20三、distribute by类似于MapReduce中分区partition对数据进行分区结合sort by进行使用distribute by必须要写在sort by之前因为distribute by的功能是要先分区sort by是对分区进行排序的#我这里是对deptno进行分区然后对empno排序
hive (db_hive) insert overwrite local directory /opt/datas/distby-res select * from emp distribute by deptno sort by empno asc;#emp表的最后一个字段是deptno从下面可以看出是按最后一个字段分区的
[roothadoop-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[roothadoop-senior ~]# cat /opt/datas/distby-res/000001_0
7782CLARKMANAGER78391981-6-92450.0\N10
7839KINGPRESIDENT\N1981-11-175000.0\N10
7934MILLERCLERK77821982-1-231300.0\N10[roothadoop-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当distribute by和sort by字段相同时可以使用cluster bycluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能。 所以最终的结果是每个Reduce处理的数据范围不重叠而且每个Reduce内的数据是排序的而且可以打到全局有序的结果。##
hive (db_hive) insert overwrite local directory /opt/datas/cluster-res select * from emp cluster by empno; ##
[roothadoop-senior ~]# ls /opt/datas/cluster-res/
000000_0 000001_0 000002_0[roothadoop-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[roothadoop-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[roothadoop-senior ~]# cat /opt/datas/cluster-res/000002_0
7499ALLENSALESMAN76981981-2-201600.0300.030
7844TURNERSALESMAN76981981-9-81500.00.030
7934MILLERCLERK77821982-1-231300.0\N10五、总结OrderBy
全局排序一个ReduceSort By
每个reduce内部进行排序全局不是排序Distribute By
类似MR中partition进行分区结合sort by使用Cluster By
当distribute和sort字段相同时使用方式转载于:https://www.cnblogs.com/weiyiming007/p/10761404.html