Fork me on GitHub

标签(三)标签上线中出现的问题及优化

标签上线问题及优化

JD

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

-------------本文结束感谢您的阅读-------------
大 吉 大 利!