美文网首页
个人总结-Hive

个人总结-Hive

作者: 蠟筆小噺没有烦恼 | 来源:发表于2017-10-09 14:18 被阅读107次

    1、HQL脚本的三种执行方式:

    Hive –e ‘hql执行一行脚本

    Hive –f ‘hql.file’执行一个脚本文件

    Hive jdbc代码执行脚本

    2、UDF函数(输入1条数据,输出1条数据)

    (1)Extends UDF,重写evaluate方法

    (2)extends GenericUDF,重写initialize getDisplayString,evaluate方法

    (3)临时添加udf

    Addjar /home/work/udf.jar;

    Createtemporary function mytest as ‘test.udf.ToLoverCase’;

    3、UDAF函数(多对一)

    Count聚合函数,Avg,min等

    4、UDTF函数(一对多)

    5、几种关键词的意义

    (1)order by

    会对输入做全局排序,因此只有一个reduce(多个的话无法保证全局有序),就会导致当前输入规模比较打的时候,需要较长的计算时间。Order by和关系型数据库的order by工呢个一致,按照某一项或几项排序输出。区别在于,如果hive中使用hive.mappred.mode=strict的模式,必须指出limit,否则会报错,因为所有数据都是在一个reduce中进行,数据量大的情况下会得不到结果,所以不许指定输出条数;

    Eg:hive>select *from test order by id limit 100;

    (2)sort by

    Sort by不是全局排序,在进入reduce之前完成排序,如果还设置了mappred.reduce.tasks>1,则sortby智能保证每个reducer的输出有序,除非只有一个reduce,好处是执行了局部排序就可以为接下来的全局排序提高不少效率(在做一次归并排序就ok了)

    (3)distribute by和sort by一起使用

    Distribute by时空值map得输出在reducer中是如何划分的。按照指定的字段对数据进行划分到不同的输出reduce文件中

    Eg:selectname,class,sex from student distribute by class sort by class asc,name asc;

    那么所有class相同的数据会呗送到同一个reduce中u处理,就可以统计处每个商户各个班级中名称的顺序了(着肯定是全局有序的)因为相同的班级会放到同一个reduce中,但是distribute by必须要卸载sort by之前。

    (4)cluster by

    其实相当于distribute by和sort by相结合,一下两个语句等价

    Eg:selectname,class,sex from student distribute by class sort by class asc

    Eg:selectname,class,sex from student cluster by class asc

    6、hive解决数据倾斜

    Hive.groupby.skewindata=true

    数据倾斜饿时候进行负载均衡,当选定为true时候,生成的查询计划会有两个mr job。第一个mr中map的输出结果集合会随机分布到Reduce中,每个Reduce都会做部分聚合操作,并输出结果,这样处理数据的结果是相同的group by key有可能被分发到不同的reduce中,从而达到负载均衡的目的;第二个mrjob再根据预处理的数据结果按照group by key分布到reduce中(这个过程可以保证相同的grou by key被分不到同一个reduce中)最后完成最终的聚合操作。

    相关文章

      网友评论

          本文标题:个人总结-Hive

          本文链接:https://www.haomeiwen.com/subject/mufpyxtx.html