order by
order by 会对输入做全局排序,因此只有一个reducer**(多个reducer无法保证全局有序)**只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。
Sql代码
- set hive.mapred.mode=nonstrict; (default value / 默认值)
- set hive.mapred.mode=strict;
order by 和数据库中的Order by 功能一致,按照某一项 & 几项 排序输出。
与数据库中 order by 的区别在于在hive.mapred.mode = strict 模式下 必须指定 limit 否则执行会报错。
Sql代码
2. hive> select * from test order by id;
Java代码
- FAILED: Error in semantic analysis: 1:28 In strict mode, if ORDER BY is specified, LIMIT must also be specified. Error encountered near token ‘id’
原因: 在order by 状态下所有数据会到一台服务器进行reduce操作也即只有一个reduce,如果在数据量大的情况下会出现无法输出结果的情况,如果进行 limit n ,那只有 n * map number 条记录而已。只有一个reduce也可以处理过来。