标签上线问题及优化
HiveSQL优化
- 多建分表(注意权衡,空间换取速度)
- 将不同需求用到的多种相同字段提炼到一张临时表中
- 分位值函数:percentile_approx(double col, p) p介于0~1之间
- 通过join on true的操作,可以将某一单值添加到表中单独一列下,即对于表而言,新建一列
- 注意计算复杂度,在Mammoth平台下,reduce最后一步无法合成
- 分区函数over(partition by)的效率低于group by 如:取某一字段最大值,max & row_number = 1
- 通过round对double类型的数据提前缩减小数点后位数,减小后续数据操作量
- 提前进行group by操作,同时其具有去重的作用
- 提前进行标签去重的工作, row_number = 1可以在取最大值时起到去重的作用
- 对于种类偏好、颜色等商品属性时,计数精确到sum(pay_ptty:销量);对于订单、购买频次、购买途径等订单属性时,计数精确到count(1)。(以上均以group by user_pin, item_third_id)
作业脚本
perl脚本中,buf按顺序依次执行,串行
perl脚本中,一个buf单独分配一定的计算资源,同时一个buf内,如buf[1],可以创建多个临时表
my $Runner = “HIVE” #MAPREDUCE计算引擎
my $Retry_Runner = “STINGER” #TEZ计算引擎
无法识别TAB分隔符,空格代替
一个作业对应一个表结构,上线作业时,必须新建配置好加工标签对应的表结构(小宽表)
offset | pin | pin004002004503 | pin004002004510 | pin004002002025 | ………标签编号,如 pin004002004503,按所在业务线顺序编排
作业上线中遇到的问题
*A、ApplicationMaster 2 times out *
问题:提交作业时无法准确申请到 ApplicationMaster AM container
解决:更换计算引擎 Tez换成MapReduce
B、无法识别作业代码
问题:perl脚本提交解析时,无法识别tab分隔符
解决:tab分隔符换成四个空格
*C、NoViableAltException(-1@[]) *
问题:FAILED: ParseException line: xxxxx cannot recognize input near ‘ ‘ ‘ ‘ ‘ ‘
解决:每段语句结尾的空格字符以及括号,标点等引起,删除即可。 删除注释
D、raise Exception(‘\n’.join(results))
问题:INFO Exception in thread “main” Java.lang.NullPointerException
解决:执行脚本循环语句 for (my i = 0; i < = #sql_buff; i++) {} (注意$字符)
E、运行时间超时
解决:对于浏览日志表等大数据量的表结构,一定要对时间分区加以限制条件,减少数据量。
同时切记 数据存储策略,i_d | s_d