一:order by

order by会对输入做全局排序,因此只有一个Reducer(多个Reducer无法保证全局有序),然而只有一个Reducer,会导致当输入规模较大时,消耗较长的计算时间。关于order by的详细介绍请参考这篇文章:Hive Order by操作

二: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来指定),对输出的数据再执行归并排序,即可得到全部结果。

三:distribute by

distribute by是控制在map端如何拆分数据给reduce端的。hive会根据distribute by后面列,对应reduce的个数进行分发,默认是采用hash算法。sort by为每个reduce产生一个排序文件。在有些情况下,你需要控制某个特定行应该到哪个reducer,这通常是为了进行后续的聚集操作。distribute by刚好可以做这件事。因此,distribute by经常和sort by配合使用。

注:Distribute by和sort by的使用场景

1.Map输出的文件大小不均。

2.Reduce输出文件大小不均。

3.小文件过多。

4.文件超大。

四:cluster by

cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是倒叙排序,不能指定排序规则为ASC或者DESC。

示例:

#sort by

  1. hive (hive)> select * from user;
  2. OK
  3. id  name
  4. 1   lavimer
  5. 2   liaozhongmin
  6. 3   liaozemin

使用sort by按id降序排列:

  1. hive (hive)> select * from user sort by id desc;
  2. //MapReduce...
  3. Execution completed successfully
  4. Mapred Local Task Succeeded . Convert the Join into MapJoin
  5. OK
  6. id  name
  7. 3   liaozemin
  8. 2   liaozhongmin
  9. 1   lavimer
  10. Time taken: 3.828 seconds

#distribute by

  1. hive (hive)> select * from user;
  2. OK
  3. id  name
  4. 1   lavimer
  5. 2   liaozhongmin
  6. 3   liaozemin
  7. 100 hello
  8. 200 hadoop

#设置reduce的个数

  1. hive (hive)> set mapred.reduce.tasks=2;
  2. hive (hive)> set mapred.reduce.tasks;
  3. mapred.reduce.tasks=2

#使用带distribute by的数据从user表中导出数据

  1. hive (hive)> insert overwrite local directory '/usr/local/src/user.txt' select * from user distribute by id;
  2. //MapReduce...
  3. Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 2

注:从上述语句执行过程可以看到启动了两个Reducer。

#导出到本地的数据

  1. [root@liaozhongmin5 src]# cd user.txt/
  2. [root@liaozhongmin5 user.txt]# ll
  3. 总用量 8
  4. -rwxrwxrwx. 1 root root 36 1月  30 14:35 000000_0
  5. -rwxrwxrwx. 1 root root 22 1月  30 14:35 000001_0
  6. [root@liaozhongmin5 user.txt]# more 000000_0
  7. 2<span style="white-space:pre">  </span>liaozhongmin
  8. 100<span style="white-space:pre"> </span>hello
  9. 200<span style="white-space:pre"> </span>hadoop
  10. [root@liaozhongmin5 user.txt]# more 000001_0
  11. 1<span style="white-space:pre">  </span>lavimer
  12. 3<span style="white-space:pre">  </span>liaozemin
  13. [root@liaozhongmin5 user.txt]#

注:从上述结果中,我们可以看到数据被分发到了两个Reducer中处理。

#distribute by和sort by结合使用

  1. hive (hive)> select * from temperature;
  2. OK
  3. year    tempra
  4. 2008    30`C
  5. 2008    35`C
  6. 2008    32.5`C
  7. 2008    31.5`C
  8. 2008    31`C
  9. 2015    41`C
  10. 2015    39`C
  11. 2015    36`C
  12. 2015    33`C
  13. 2015    35`C
  14. 2015    37`C

#根据年份和气温对气象数据进行排序,以确保所具有相同年份的行最终都在一个reduce分区中。

    1. hive (hive)> select * from temperature distribute by year sort by year asc,tempra desc;
    2. //MapReduce...
    3. Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 2
    4. //MapReduce...
    5. OK
    6. year    tempra
    7. 2008    35`C
    8. 2008    32.5`C
    9. 2008    31`C
    10. 2008    31.5`C
    11. 2008    30`C
    12. 2015    41`C
    13. 2015    39`C
    14. 2015    37`C
    15. 2015    36`C
    16. 2015    35`C
    17. 2015    33`C
    18. Time taken: 17.358 seconds

Hive中order by,sort by,distribute by,cluster by的区别的更多相关文章

  1. hive中order by ,sort by ,distribute by, cluster by 的区别(**很详细**)

    hive 查询语法 select [all | distinct] select_ condition, select_ condition from table_name a [join table ...

  2. hive中order by,sort by, distribute by, cluster by作用以及用法

    1. order by     Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的 ...

  3. [转载]hive中order by,sort by, distribute by, cluster by作用以及用法

    1. order by     Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的 ...

  4. hive中order by,sort by, distribute by, cluster by的用法

    1.order by hive中的order by 和传统sql中的order by 一样,对数据做全局排序,加上排序,会新启动一个job进行排序,会把所有数据放到同一个reduce中进行处理,不管数 ...

  5. hive 中 Order by, Sort by ,Dristribute by,Cluster By 的作用和用法

    order by order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序) 只有一个reducer,会导致当输入规模较大时,需要较长的计算时间. set ...

  6. hive 排序 order by sort by distribute by cluster by

    order by:     order by是全局排序,受hive.mapred.mode的影响.       使用orderby有一些限制:     1.在严格模式下(hive.mapred.mod ...

  7. hive中order by、distribute by、sort by和cluster by的区别和联系

    hive中order by.distribute by.sort by和cluster by的区别和联系 order by order by 会对数据进行全局排序,和oracle和mysql等数据库中 ...

  8. Hadoop Hive 中的排序 Order by ,Sort by ,Distribute by以及 Cluster By

    order by order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规模较大时,需要较长的计算时间. set h ...

  9. [大数据相关] Hive中的全排序:order by,sort by, distribute by

    写mapreduce程序时,如果reduce个数>1,想要实现全排序需要控制好map的输出,详见Hadoop简单实现全排序. 现在学了hive,写sql大家都很熟悉,如果一个order by解决 ...

随机推荐

  1. oracle11g本地可以访问但局域网无法访问

    问题描述,现在有两台电脑 A 和 B : 1)电脑 A 上有 Oracle11G服务端: ip地址 192.168.1.198; 端口1521: 2)电脑 A 本机连接数据库正常,可以登录及操作等: ...

  2. Python学习笔记010——形参与实参

    在使用中忽略了一个问题,形参有些和实参类似,也不能是“关键字后面含有位置参数”,即“默认形参”后面必须不能含有“位置”形参! def test(a=100,b): print("test&q ...

  3. Linux时间子系统(六) POSIX timer

    一.前言 在用户空间接口函数文档中,我们描述了和POSIX timer相关的操作,主要包括创建一个timer.设定timer.获取timer的状态.获取timer overrun的信息.删除timer ...

  4. MySQL中 如何查询表名中包含某字段的表 ,查询MySql数据库架构信息:数据库,表,表字段

    --查询tablename 数据库中 以"_copy" 结尾的表 select table_name from information_schema.tables where ta ...

  5. mysql 怎么给一个表一次增加多个字段, mysql 添加 多个 字段

    sql 语句: ALTER TABLE oversea_liveauctioneers_detail_info_2018 ADD `result` LONGTEXT, ADD `buyer_premi ...

  6. 解决电脑需要切换IP带来的MySQL连接问题

    直接上代码: import socket #获取本机电脑名 myname = socket.getfqdn(socket.gethostname( )) #获取本机ip myip = socket.g ...

  7. 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)

    排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列. 稳定度(稳定性)一个排序算法是稳定的,就是当有两个相等记录的关 ...

  8. Amoeba软件实现mysql读写分离

    一般不用,大公司都是自己程序实现的. 安装amoeba

  9. 强者联盟——Python语言结合Spark框架

    引言:Spark由AMPLab实验室开发,其本质是基于内存的高速迭代框架,"迭代"是机器学习最大的特点,因此很适合做机器学习. 得益于在数据科学中强大的表现,Python语言的粉丝 ...

  10. gitbook安装与使用

    废话不说,直接主题: gitbook安装 =========== 1. 安装npm  从站点 https://nodejs.org/#download 下载node.js源码(点击绿色的INSTALL ...