Hive分组排序

Hive分组排序



一、实验目的

1.了解Hive中Order by 、Sort by的用法以及区别

2.了解Hive中Distribute by、Group by以及Cluster by的用法于区别

二、实验原理

Hive中支持多种分组操作:Order by、Sort by、Group by、Distribute by、Cluster by等

(1)Hive中的Order by和传统Sql中的Order by一样,对查询结果做全局排序,会新启动一个Job进行排序,会把所有数据放到同一个Reduce中进行处理,不管数据多少,不管文件多少,都启用一个Reduce进行处理。如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会在同一个Reducer端进行,数据量大的情况下可能不出结果,那么在这样的严格模式下,必须指定输出的条数。

(2)Sort by是局部排序,会在每个Reduce端做排序,单个Reduce出来的数据是有序的,假设我设置了3个Reduce,那么这3个Reduce就会生成三个文件,每一个文件都会按Sort by后设置的条件排序,但是当这3个文件数据合在一起就不一定有序了,一般情况下可以先进行Sort by局部排序完成后,再进行全局排序,就会提高不少效率。

(3)Group by是分组查询,一般配合聚合函数一起使用,Group by有一个原则,就是Select后面的所有列中,没有使用聚合函数的列,必须出现在Group by后面。

(4)Hive中的Distribute by是控制在Map端如何拆分数据给Reduce端的。按照指定的字段对数据划分到不同的Reduce输出文件中,默认是采用Hash算法。对于Distribute by进行测试,一定要分配多Reduce进行处理,否则无法看到Distribute by的效果。

(5)Cluster by除了具有Distribute by的功能外还兼具Sort by的功能,相当于Distribute by+ Sort by的结合,但是排序只能是倒叙排序,不能指定排序规则为ASC或者DESC。

三、实验环境

Linux Ubuntu 16.04

jdk-7u75-linux-x64

hive-1.1.0-cdh5.4.5

hadoop-2.6.0-cdh5.4.5

mysql-5.7.24

四、实验内容

1.全局排序Order by与局部排序Sort by的用法,以及各自适用的场景。

2.分组查询Group by的应用场景与基本语法。

3.Cluster by与Distribute by和Sort by的关系及操作。

五、实验步骤

1、启动集群

1.首先检查Hadoop相关进程,是否已经启动。若未启动,切换到/apps/hadoop/sbin目录下,启动Hadoop。

jps
cd /apps/hadoop/sbin
./start-all.sh

在这里插入图片描述

2.然后开启Mysql,用于存放Hive的元数据。

sudo service mysql start

在这里插入图片描述

3.切换到/data/hive4目录下,如不存在需提前创建hive4文件夹。

mkdir /data/hive4
cd /data/hive4

在这里插入图片描述

4.上传文件到/data/hive4
在这里插入图片描述
5.在终端命令行界面,直接输入Hive命令,启动Hive命令行。

hive

在这里插入图片描述

2、Order by的演示

1.在Hive中创建一个goods_visit表,有goods_id ,click_num 2个字段,字符类型都为string,以‘\t’为分隔符。

create table goods_visit(goods_id string,click_num int)
row format delimited fields terminated by '\t'  stored as textfile;

在这里插入图片描述

创建完成,查询一下。

show tables;

在这里插入图片描述

2.将本地 /data/hive4下的表goods_visit中数据导入到Hive中的goods_visit表中。

load data local inpath'/data/hive4/goods_visit' into table goods_visit;

在这里插入图片描述

3.使用Order by对商品点击次数从大到小排序,并通过limit取出10条数据。

select * from goods_visit order by click_num desc limit 10;

在这里插入图片描述

3、Sort by 的演示

1.为演示Sort by效果 ,我将Reduce个数设置为三个,命令如下:

set mapred.reduce.tasks=3;

在这里插入图片描述

2.为某电商创建一个订单明细表,名为order_items,包含item_id 、order_id 、goods_id 、goods_number 、shop_price 、goods_price 、goods_amount 七个字段,字符类型都为string,以‘\t’为分隔符。

create table order_items(item_id string,order_id string,goods_id string,goods_number string,
shop_price string,goods_price string,goods_amount string)
row format delimited fields terminated by '\t'  stored as textfile;

在这里插入图片描述

3.将本地/data/hive4/下的表order_items中数据导入到Hive中的order_items表中。

load data local inpath '/data/hive4/order_items' into table order_items;

在这里插入图片描述

4.按商品ID(goods_id)进行排序。

select * from order_items sort by goods_id;

在这里插入图片描述

4、Group by的演示

1.为某电商创建一个买家收藏夹表,名为buy_favorite,有buyer_id 、goods_id 、dt 三个字段,字符类型都为string,以‘\t’为分隔符。

create table buyer_favorite(buyer_id string,goods_id string,dt string)
row format delimited fields terminated by '\t'  stored as textfile;

在这里插入图片描述

2.将本地/data/hive4/下的表buyer_favorite中数据导入到Hive中的buyer_favorite表中。

load data local inpath '/data/hive4/buyer_favorite' into table buyer_favorite;

在这里插入图片描述

3.按dt分组查询每天的buyer_id数量。

select dt,count(buyer_id) from buyer_favorite group by dt;

在这里插入图片描述

5、Distribute by的演示

1.为演示Distribute by效果 ,我将Reduce个数设置为三个,命令如下:

set mapred.reduce.tasks=3;

在这里插入图片描述

2.使用买家收藏夹表,按用户ID(buyer_id)做分发(distribute by),输出到本地/data/hive4/out中。

insert overwrite local directory '/data/hive4/out' select * from buyer_favorite distribute by buyer_id;

在这里插入图片描述

3.切换到linux本地窗口,查看目录/data/hive4/out下的文件。

cd /data/hive4/out
ls

数据按buyer_id分发到三个文件中。
在这里插入图片描述

6、Cluster by 的演示

Cluster by除了具有Distribute by的功能外还兼具Sort by的功能,相当于Distribute by+ Sort by的结合,但是排序只能是倒叙排序,不能指定排序规则为ASC或者DESC。

1.将Reduce个数设置为3个。

set mapred.reduce.tasks=3;

在这里插入图片描述

2.按buyer_id将buyer_favorite分发成三个文件,并按buyer_id排序。

select * from buyer_favorite cluster by buyer_id;

在这里插入图片描述


总结

Order by 与Sort by 对比
Order by的查询结果是全部数据全局排序,它的Reduce数只有一个,Reduce任务繁重,因此数据量大的情况下将会消耗很长时间去执行,而且可能不会出结果,因此必须指定输出条数。
Sort by是在每个Reduce端做排序,它的Reduce数可以有多个,它保证了每个Reduce出来的数据是有序的,但多个Reduce出来的数据合在一起未必是有序的,因此在Sort by做完局部排序后,还要再做一次全局排序,相当于先在小组内排序,然后只要将各小组排序即可,在数据量大的情况下,可以提升不少的效率。

Distribute by 与Group by 对比
Distribute by是通过设置的条件在Map端拆分数据给Reduce端的,按照指定的字段对数据划分到不同的输出Reduce文件中。
Group by它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理,例如某电商想统计一年内商品销售情况,可以使用Group by将一年的数据按月划分,然后统计出每个月热销商品的前十名。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
100节课详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 01_hadoop_hdfs1分布式文件系统01 02_hadoop_hdfs1分布式文件系统02 03_hadoop_hdfs1分布式文件系统03 04_hadoop_hdfs1分布式文件系统04 05_hadoop_hdfs1分布式文件系统05 06_hadoop_hdfs1分布式文件系统06 07_hadoop_hdfs1分布式文件系统07 08_hadoop_hdfs1分布式文件系统08_io 09_hadoop_hdfs1分布式文件系统09_io 10_hadoop_hdfs1分布式文件系统10 11_hadoop_hdfs1分布式文件系统11 12_hadoop_hdfs1分布式文件系统12 13_hadoop_hdfs1分布式文件系统13 14_mr分布式计算框架_理论1 15_mr分布式计算框架_理论2 16_mr分布式计算框架_理论3 17_mr分布式计算框架_理论4 18_mr分布式计算框架_理论5 19_mr分布式计算框架_理论6 20_mr分布式计算框架_install01 21_mr分布式计算框架_install02 22_mr分布式计算框架_wc01 23_mr分布式计算框架_wc02 24_mr分布式计算框架_wc03 25_mr分布式计算框架_wc04 26_mr_qq推荐好友01 27_mr_qq推荐好友02 28_mr_精准广告推送01 29_mr_精准广告推送02 30_mr_精准广告推送03 31_mr_精准广告推送04 32_hadoop2.x_介绍01 33_hadoop2.x_介绍02 34_hadoop2.x_ha介绍01 35_hadoop2.x_ha介绍02 36_hadoop2.x_ha介绍03 37_hadoop2.x_ha介绍04 38_hadoop_hadoop2.5.2的安装部署01 39_hadoop_hadoop2.5.2的安装部署02 40_hadoop_hadoop2.5.2的安装部署03 41_hadoop_hadoop2.5.2的安装部署04 42_hadoop_hadoop2.5.2的安装部署05 43_hadoop_hadoop2.5.2的安装部署06 44_hadoop2.x_温度排序,分区,分组,自定义封装类01 45_hadoop2.x_温度排序,分区,分组,自定义封装类02 46_hadoop2.x_温度排序,分区,分组,自定义封装类03 47_hadoop2.x_温度排序,分区,分组,自定义封装类04 48_hadoop2.x_温度排序,分区,分组,自定义封装类05 49_hadoop2.x_温度排序,分区,分组,自定义封装类06 50_hadoop2.x_广告推送用户轨迹01 51_hadoop2.x_广告推送用户轨迹02 52_hadoop2.x_广告推送用户轨迹03 53_hadoop2.x_广告推送用户轨迹04 54_hadoop2.x_广告推送用户轨迹05 55_hadoop2.x_广告推送用户轨迹06 56_hive_介绍和安装01 57_hive_介绍和安装02 58_hive_介绍和安装03 59_hive_介绍和安装04 60_hive_ddl数据定义语言01 61_hive_ddl数据定义语言02 62_hive_ddl数据定义语言03 63_hive_ddl数据定义语言04 64_hive_dml数据操作语言_select01 65_hive_dml数据操作语言_select02 66_hive_dml数据操作语言_select03 67_hive_dml数据操作语言_select04 68_hive_server2服务器01 69_hive_server2服务器02 70_hive_server2服务器03 71_hive_server2服务器04 72_hadoop_轨迹分析01 73_hadoop_轨迹分析02 74_hadoop_轨迹分析03 75_hadoop_轨迹分析04 76mr分布式计算框架_理论01 77mr分布式计算框架_理论02 78_hbase_介绍01 79_hbase_介绍02 80_hbase_介绍03 81_hbase_介绍04 82_hbase_介绍05 83_hbase_介绍06 84_hbase_介绍07 85_hbase_介绍08 86_hbase_介绍09 87_hbase_介绍10 88_hbase_完全分布式01 89_hbase_完全分布式02 90_hbase_代码01 91_hbase_代码02 92_hbase_代码03 93_hbase_代码04 等等

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i阿极

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值