1,所使用的关键字
Order by sort by distributed by group by cluster by
2, order by 这个跟mysql中的一致,查询结果做全局的排序,无论数据的多少只放在同一个的reduce中执行,所以要使用limit来限制结果的数量不然可能出不来结果
3,sort by 局部排序,就是把所有的数据分为三个(例)文件分别放到三个(例)reduce中进行执行,这样就大大的提高了效率,但是缺点就是只是局部有序,整体不是有序的
4,group by 这个是个分组的关键字,作用是分组查询,一般配合聚集函数进行使用,例如,count ave等.
5,distribute by 控制Map如何把数据按照指定的字段分在不同的reduce中进行执行
6,cluster by 这是在distribute by的基础上再加上sort by的效果
实验解析及操作截图
1,先查看hadoop是否已经启动
Hadoop name -format
如果没有启动需要切换到hadoop安装的路径下进行启动
Cd /opt/Hadoop/sbin
为了方便直接启动所有的进程
./start-all.sh
Jps 这个啥意思
2,然后启动mysql用于存放Hive的元数据
3,创建文件夹Hive 4用于方便后面的数据的下载和操作
Sudo mkdir -p /data/hive4
Sudo chow -r ubuntu:ubuntu /data 让这个文件的所有者属于ubuntu:ubuntu
Cd /data/hive
4,使用wget命令下载文件 注意事项:要先切换到你要下载的路径下
Wget 网址例:hettp://…………
5,切换到Hive的路径下启动hive
Cd /opt/apache-hive-1.2.2-bin/bin
./hive
6,启动完毕,数据准备完毕,开始实验
1,order by的演示
Creatr table goods_visit(goods_id string,click_num int)
Row format delimiter fields terminated by ‘\t’ stored as textfile 这句忘记啥意思了0.0
解答:这个是以tab来进行字段的分隔符,存储方式是textfile hive默认的存储方式
Show tables
将下载的数据导入到自己创建的表中
Load data loal inpath’文件所在的位置’ into able goods_visit;
Load data local inpath’/data/hive4/goods_vist’ into table goods_visit;
使用order by进行查询
Select * from goods_visit order by click_num desc limit 10;------根据点击次数进行排序
sort by的演示
先把reduce的个数设置成三个
Set mapred.reduce.tasks=3;
Set 设置系统变量
创建订单表,导入数据
Create table order_items(item_id string,order_id string,goods_id string,goods_num string,goods_number string,shop_price string,goods_price string,goods_amount string)
Row format delimiter fields terminated by ‘\t’ stored as textfile;
导入数据跟上面的一样:略
按商品的id进行排序
Group by的演示
创建表
导入数据
进行查询…….略
演示distribute by
首先把reduce 设置成三个
Set mapred.reduce.tasks=3
使用买家收藏表按照用户ID做分发(distribute by)输出到本地/data/hive4/out中
Insert overwrite local directory ‘/data/hive4/out’ select * from buyer_favorite distribute by buyer_id;
切换本地窗口查看上个路径下的文件
Clister by演示
设置reduce为三
按照buyer_id将buyer_favorite分为三个文件,按照id进行排序,并且只能倒叙
Select *from buyer_favorite cluster by buyer_id;