hive 便签(分桶与自定义函数):

hive 分桶与便签:
1,分桶表是对列值进行 hash 的方式,将不同的数据放到不同的文件之中存储
2,对 hive中每一个表,分区都可以进行分桶
3,由列的hash值除以桶的个数来决定每条数据划分到哪个桶之中
4,适用于数据抽样,与 map-join
开启分桶机制
# 可以通过 mapred.reduce.tasks 设置 reduce 个数,不推荐
# 一次作业产生的桶(文件数量)和reduce task 个数一致
set hive.enforce.bucketing=true;
分桶表的查询:
    '''
        tablesample(bucket x out of y on id)
        x:表示从哪个桶开始查询
        y:表示桶的总数,一般为桶的总数的倍数或者因子。
        如果y不是桶的总数的倍数或者因子,则会重新分桶查找数据
    '''
常见 sql 语句:
/*创建原始表*/
create table students_1(id int,name string,age int) row format delimited fields terminated by ',';
/*创建分区表*/
create table studentbuket_1(id int,name string,age int) clustered by (age) into 4 buckets row format delimited fields terminated by ',';
/*加载数据到原始表*/
load data local inpath '/home/hadoop/data.txt' into table students_1;
/*加载数据到分区表*/
insert into table studentbuket_1 select id,name,age from students_1;
/*使用分桶查询 从第二个桶查找,以 4为增值进行相加*/
select id,name,age from studentbuket_1 tablesample(bucket 2 out of 4 on age)

hive 创建自定义函数(实现部分加密):
自定义临时函数(java):
package Day1;

import org.apache.hadoop.hive.ql.exec.UDF;


public class Hide1 extends UDF{
    //重载
    public String evaluate(final String input){
        if(input==null){
            return null;
        }
        String str =input.toString().substring(0,3)+"***";
        return new String(str);
    }

}
使用自定义函数:
1, 导入 jar包
2, 创建临时表(当前终端使用)并使用自定义函数

hive 便签以及优化:
1,为了执行效率考虑,简单的查询,就是只是select,不带count,sum,group by,都不走map/reduce,直接读取hdfs文件进行filter过滤
2, hive 启动默认是集群模式,可以配置本地模式(没有ui),集群模式不一定比 local快(资源分配)
3, hive 可以设置并行计算(没有依赖关系的子查询), 并行比串行要消耗几倍资源(与并行的个数有关)
4, hive 严格模式(可以提高查询效率):
1),order by 必须包含 limit 输出限制
2),对于分区表, 必须包含 limit 输出限制
5, hive 排序:
1),order by 对于查询结果做全排序,一个reduce处理(不适合数据量大)
2),sort by 对于单个 reduce 数据进行排序
3),distribute by 分区排序, 一般和 sort by使用
4),cluster by 相当于 sort by + distribute by
6, join 操作
1),将小表(驱动表)放在 join 左边
2),在 map 端完成 join 操作(小表放到内存之中)
3),大表join大表,reduce 负载均衡 1,根据key 进行分区, 删除失效的key,2,数据随机分配到 reduce之中
7, 设置map端聚合
8, 合并小文件
9, 设置 map(切片有关) 与 reduce(分区有关) 个数
#所有 sql 执行mapreduce 程序执行
set hive.fetch.task.conversion=none;
# 查看执行计划
explain select * from students;
# 配置hive 运行本地模式(调试,不走 yarn)
set hive.exec.mode.local.auto=true;
# 开启并行运行
set hive.exec.parallel=true;
# 设置并行线程个数
set hive.exec.parallel.thread.number=8;
# hive 开启严格模式
set hive.mapred.mode=strict;
# 开启 自动 mapjoin
set hive.auto.convert.join=true;
# 开启 map 端聚合
set hive.map.aggr=true

 

 

转载于:https://www.cnblogs.com/shi-qi/articles/11235231.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值