hive 使用心得

1、遇到内存不够怎么办

一般情况下是reduce端内存溢出,设置以下参数:

        

         set mapreduce.reduce.java.opts=-Xmx10000M;
         set mapreduce.reduce.memory.mb=10000;
         set mapreduce.reduce.tasks=64;

2、遇到异常数据,比如说null,导致npe,程序退出

      使用 coalesce 函数可以设置当值为null或者None等异常的时候的默认值

     

coalesce(col,"invalid")

3、mapjoin,在遇到两个表jion其中一个表的数据量很少,可以使用mapjoin优化

set hive.auto.convert.join = true;
select /*+MAPJOIN(mobile_location)*/  a.*,b.province as mob_province,b.city as mob_city from userinfo a
 left outer join  mobile_location b  on (b.mob_prefix=substr(a.reg_mobile,0,7)) ;

4、udf 使用

编程比较简单,添加jar和file有点麻烦

add file /export/tmp/qingwu.fu/userinfo/NIandLocal.txt;
add jar /export/tmp/qingwu.fu/userinfo/hive-udf-1.0-SNAPSHOT.jar;
create temporary function jg as 'JiGuanUDF';

如果报file not find , 再创建一下临时function就可以


4、输出压缩,合并小文件

set hive.exec.compress.output=true;

set hive.hadoop.supports.splittable.combineinputformat=true

set mapred.max.split.size=256000000;  #每个Map最大输入大小
set mapred.min.split.size.per.node=256000000; #一个节点上split的至少的大小
set mapred.min.split.size.per.rack=256000000; #一个交换机下split的至少的大小
set hive.input.format=org.apache.Hadoop.hive.ql.io.CombineHiveInputFormat;  #执行Map前进行小文件合并


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值