数仓建设之IP库的匹配

  • 一、业务前提
  • 二、解决过程
    • 01)增加运行资源
    • 02)通过增加切分块大小,减少实例数
    • 03)明细表和ip库通过join方式
    • 04)mapjoin内存方式
    • 05)将IP库展开,进行等式join
      • ①将IP库信息的每一条数据进行展开如下
      • ②展开后,每个IP地址都对应一条国家省份城市信息,这样就可以避免范围匹配
      • ③使用join等式连接
    • 06)IP库作为资源
  • 三、集思广益

一、业务前提

介绍:在数据仓库建设中,用到IP库匹配的场景不在少数,比如电商行业用户地址、通信行业用户定位、媒体行业用户分布等等。

【历史】:在此之前的实现思路如下:
1)通过自定义UDF读取使用tunnel来读取odps中的ip信息表
2)然后将读取的信息封装或者直接写入一个list中
3)对数据按照ip的{start_ip,end_ip}进行全局排序。【此处start_ip和end_ip都是转化为long类型之后的值】
4)设置udf的传入参数为ip地址,返回具体的国省市信息

【现在】:由于某些原因,之前的IP库信息不全,所以采取了新型的IP库,旧IP库信息大概50万条数据,新IP库扩到了1400万条数据。发生了如下几个问题:
1)IP库信息扩大,使用tunnel读取数据时间增加,导致tunnel连接数居高不下,影响其他同步任务以及调度任务、前端查询任务
2)数据量太大,经常发生内存不足的报错,或者是运行时间太长,占用资源不释放导致其他任务无法一直处于等待期

二、解决过程

01)增加运行资源

set odps.sql.planner.mode = lot;
set odps.sql.mapper.memory=10240;
set odps.sql.udf.jvm.memory=8192;
set odps.isolation.session.enable = true;

结果:任务运行后,可以正常执行,但是因为拉数据时启动tunnel实例数据量太多【tunnel实例数上限2500】引起了其他部门查询报错以及本部门其他任务调度等待时间超时报错。

02)通过增加切分块大小,减少实例数

set odps.sql.planner.mode = lot;
set odps.stage.mapper.split.size=256;
set odps.sql.mapper.memory=10240;
set odps.sql.udf.jvm.memory=8192;
set odps.isolation.session.enable = true;

结果:任务运行完成,本部门和其他部门也没有异常报出,但是任务执行时间较长,担心如果按这个逻辑上限会影响任务调度和下游数据产出。

03)明细表和ip库通过join方式

left join (select * from project.ip_basic_info order by ip_start asc) ips on UDF_IP_TO_INT(IP) BETWEEN IPS.IP_START AND UDF_IP_TO_INT(IP)

结果:任务执行超时,无法返回结果。因为不等式join会导致数据都分发到一个节点上执行,对于数十亿的数据这显然是不可取的。

04)mapjoin内存方式

结果:IP库数据量多达1400万,大小已达到1个G,无法作为hash table来存储到内存中,因为hash table的表大小为10M,切分表也不太现实,步骤繁琐,且后期不好维护。

05)将IP库展开,进行等式join

①将IP库信息的每一条数据进行展开如下

public String evaluate(LongWritable ip_start, LongWritable ip_end) {for(long i = ip_start.get();i<=ip_end.get();i++){builder.append(i+",");}return builder.substring(0,builder.length()-1);}测试:
public static void main(String[] args) {Ip_to_Expand test = new Ip_to_Expand();LongWritable start = new LongWritable(3410411776l);LongWritable end = new LongWritable(3410412031l);test.evaluate(start,end);}
输出:3410411776,3410411777,3410411778,3410411779,3410411780,3410411781。。。。

②展开后,每个IP地址都对应一条国家省份城市信息,这样就可以避免范围匹配

③使用join等式连接

结果:在展开过程中,由于本身IP范围数据量庞大,一方面展开后数据量更为庞大,预估计可能超过明细表的数据,维度表的数据大于明细表的数据,方法也不可取。另外一方面在运行过程中,展开函数最终报错无法运行。

06)IP库作为资源

tunnel拉去数据较慢,所以将IP库信息切分为3个文件,上传到Odps中作为资源,下发给每个实例,省去tunnel资源

结论:目前正在测试中。。。

三、集思广益

如果各位大大有什么好的思路和见解,欢迎在评论区讨论哈~~~不胜感激Thanks♪(・ω・)ノ

数仓建设之IP库的匹配相关推荐

  1. 制造业数字原生的OT数仓建设

    关键词:OT数仓 工业物联网 智能工厂 时序库 数据采集 数字化转型 IT/OT融合     从技术演化的视角来看,工业互联网发展的核心在于OT技术(控制技术)与IT技术(信息技术)的融合.如果把时间 ...

  2. 大数据架构详解_【数据如何驱动增长】(3)大数据背景下的数仓建设 amp; 数据分层架构设计...

    背景 了解数据仓库.数据流架构的搭建原理对于合格的数据分析师或者数据科学家来说是一项必不可少的能力.它不仅能够帮助分析人员更高效的开展分析任务,帮助公司或者业务线搭建一套高效的数据处理架构,更是能够从 ...

  3. 数仓建设保姆级教程,离线和实时理论+实战)

    文档大纲: 一.数仓基本概念 1. 数据仓库架构 我们在谈数仓之前,为了让大家有直观的认识,先来谈数仓架构,"架构"是什么?这个问题从来就没有一个准确的答案.这里我们引用一段话:在 ...

  4. 数仓建设(离线和实时)

    文档大纲: 一.数仓基本概念 1. 数据仓库架构 我们在谈数仓之前,为了让大家有直观的认识,先来谈数仓架构,"架构"是什么?这个问题从来就没有一个准确的答案.这里我们引用一段话:在 ...

  5. 数仓建设保姆级教程,离线和实时一网打尽(理论+实战)

    本文大纲: 因内容较多,带目录的PDF查看是比较方便的,点击下方链接获取完整PDF版: 数仓建设保姆级教程PDF文档 一.数仓基本概念 1. 数据仓库架构 我们在谈数仓之前,为了让大家有直观的认识,先 ...

  6. 50000字,数仓建设保姆级教程,离线和实时一网打尽(理论+实战) 下

    文档大纲: 本文上半部分之前已经发过了,传送门:50000字,数仓建设保姆级教程,离线和实时一网打尽(理论+实战) 上 此篇文章是整个文档的下半部分,将接着上半部分从第五章开始. 五.实时数仓建设核心 ...

  7. 50000字,数仓建设保姆级教程,离线和实时一网打尽(理论+实战) 上

    文档大纲: 一.数仓基本概念 1. 数据仓库架构 我们在谈数仓之前,为了让大家有直观的认识,先来谈数仓架构,"架构"是什么?这个问题从来就没有一个准确的答案.这里我们引用一段话:在 ...

  8. 新东方基于Hologres实时离线一体化数仓建设实践

    业务介绍 新东方教育科技集团定位于以学生全面成长为核心,以科技为驱动力的综合性教育集团.集团由1993年成立的北京新东方学校发展壮大而来,拥有短期培训系统.基础教育系统.文化传播系统等业务. ​ 在互 ...

  9. OneData建设探索之路:SaaS收银运营数仓建设

    以下文章来源于美团技术团队 ,作者禄平 周成 黄浪 在现有大数据平台的基础上,借鉴业界成熟OneData方法论,构建合理的数据体系架构.数据规范.模型标准和开发模式,以保障数据快速支撑不断变化的业务并 ...

最新文章

  1. aws lambda使用_如何使用AWS Lambda和S3构建无服务器URL缩短器
  2. 基于FPGA的gardner同步环设计
  3. 基于数据挖掘的旅游推荐APP(四):“我的”模块
  4. 如何关闭linux系统中的覆盖输出重定向()功能
  5. 场景联创 施耐德电气“绿色智能制造创赢计划”第二季收官
  6. MTK 驱动(47)---使用PWM配置背光如何配置,及频率计算
  7. HelloMybatis
  8. 1月10日云栖精选夜读:专访金榕:四年蜕变,阿里iDST是如何登上浪潮之巅的?...
  9. linux scp命令 将数据从一台linux服务器复制到另一台linux服务器
  10. linux下的锐捷客户端
  11. 修改文件类型图标得方式
  12. 流控大师 panabit
  13. linux用户无法接收邮件,linux 下 搭建邮件邮件服务器(Postfix+Dovecot)(一)-系统账户登陆收发邮件...
  14. 【Netty报错:】XXXDecoder.decode() did not read anything but decoded a message.
  15. 从《战狼2》看吴京:选对方向、做对事
  16. ACM之路的高一下学期
  17. 文件操作,函数练习及答案
  18. HTML(Basic) Chapter4(Pink) 综合案例小米商城产品模块
  19. 联想服务器系统改成win7,联想Win8系统换成Win7的步骤
  20. (手机拍照)4、修图软件

热门文章

  1. 论文研读-多目标自适应memetic算法
  2. 读《沟通的方法》推荐序有感
  3. Win10以太网属性空白怎么回事
  4. c#延时函数,不止Sleep函数
  5. 第五章(3)行逻辑链接的顺序表
  6. php计算笛卡尔积批量生成电商sku列表
  7. iphone 屏幕大小及计算
  8. 陪我到可可西里看一看海,不要未来,只要你来。——大冰 《陪我到可可西里去看海》
  9. 同一局域网下,一台电脑连接另一台电脑的虚拟机(从属机(window)连接主机(window)虚拟机(Linux)的连接流程)
  10. 基于opencv的倾斜文本行的校正