阿里云开发者社区

电脑版
提示:原网页已由神马搜索转码, 内容由developer.aliyun.com提供.

MaxCompute中实现IPv4和IPv6地址归属地转换

2021-01-273792
版权
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和 《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介:大数据平台的成熟使得更多种类的非结构化、半结构化的数据分析成为可能。其中把IP地址转换为归属地又是极为常见的一种场景。本文将介绍在MaxCompute如何根据IPv4和IPv6地址实现归属地转换。

一、需求场景

大数据平台的成熟使得更多种类的非结构化、半结构化的数据分析成为可能,其中应用非常广泛的一种场景就是把IP地址转换为归属地又是极为常见的一种场景。那么利用MaxCompute如何实现IPv4和IPv6地址向归属地的转换呢?

本文通过MaxCompute UDF方式来实现IPv4和IPv6地址转换。首先,要实现IPv4和IPv6地址与归属地的转换必须要有IP地址库。没错,我们首先要把IPv4和IPv6地址库下载到本地,分别命名为ipv4.txt和ipv6.txt

二、实现思路

1、将ipv4.txt和ipv6.txt地址库中IPv4和IPv6分别转换为数值和数值字符串做排序。 

2、采用二分查找找到ip所属的范围,根据ipv4.txt和ipv6.txt库输出对应范围所归属的省份和城市信息。

三、UDF编写

MaxCompute如何实现UDF可以参考官方文档:MaxCompute UDF

实现UDF需要继承com.aliyun.odps.udf.UDF类,并实现evaluate方法。

1、实现setup方法加载IP地址库数据,并做初始化

代码片段如下:

publicvoidsetup(ExecutionContextctx) throwsUDFException, IOException {//IPV4if(ipV4ObjsArray==null)        {BufferedInputStreambufferedInputStream=ctx.readResourceFileAsStream("ipv4.txt");BufferedReaderbr=newBufferedReader(newInputStreamReader(bufferedInputStream));ArrayList<IpV4Obj>ipV4ObjArrayList=newArrayList<>();Stringline=null;while ((line=br.readLine()) !=null) {String[] f=line.split("\\|", -1);if(f.length>=5)                {longstartIp=IpUtils.StringToLong(f[0]);longendIp=IpUtils.StringToLong(f[1]);Stringcity=f[3];Stringprovince=f[4];IpV4ObjipV4Obj=newIpV4Obj(startIp, endIp, city, province);ipV4ObjArrayList.add(ipV4Obj);                }            }br.close();List<IpV4Obj>collect=ipV4ObjArrayList.stream().sorted(Comparator.comparing(IpV4Obj::getStartIp)).collect(Collectors.toList());ArrayList<IpV4Obj>basicIpV4DataList=(ArrayList)collect;IpV4Obj[] ipV4Objs=newIpV4Obj[basicIpV4DataList.size()];ipV4ObjsArray=basicIpV4DataList.toArray(ipV4Objs);        }//IPV6if(ipV6ObjsArray==null)        {BufferedInputStreambufferedInputStream=ctx.readResourceFileAsStream("ipv6.txt");BufferedReaderbr=newBufferedReader(newInputStreamReader(bufferedInputStream));ArrayList<IpV6Obj>ipV6ObjArrayList=newArrayList<>();Stringline=null;while ((line=br.readLine()) !=null) {String[] f=line.split("\\|", -1);if(f.length>=5)                {StringstartIp=IpUtils.StringToBigIntString(f[0]);StringendIp=IpUtils.StringToBigIntString(f[1]);Stringcity=f[3];Stringprovince=f[4];IpV6ObjipV6Obj=newIpV6Obj(startIp, endIp, city, province);ipV6ObjArrayList.add(ipV6Obj);                }            }br.close();List<IpV6Obj>collect=ipV6ObjArrayList.stream().sorted(Comparator.comparing(IpV6Obj::getStartIp)).collect(Collectors.toList());ArrayList<IpV6Obj>basicIpV6DataList=(ArrayList)collect;IpV6Obj[] ipV6Objs=newIpV6Obj[basicIpV6DataList.size()];ipV6ObjsArray=basicIpV6DataList.toArray(ipV6Objs);        }    }

2、实现evaluate方法,完成用户数据IP地址到归属地的转换逻辑

代码片段如下:

publicStringevaluate(Stringip){if(ip==null||ip.trim().isEmpty()||!(ip.contains(".")||ip.contains(":")))        {returnnull;        }intipV4OrV6=0;try {ipV4OrV6=IpUtils.isIpV4OrV6(ip);        } catch (Exceptione) {returnnull;        }//如果是IPV4if(ipV4OrV6==4)        {inti=binarySearch(ipV4ObjsArray, IpUtils.StringToLong(ip));if(i>=0)            {IpV4ObjipV4Obj=ipV4ObjsArray[i];returnipV4Obj.city+","+ipV4Obj.province;            }else{returnnull;            }        }elseif(ipV4OrV6==6)//如果是IPV6        {inti=binarySearchIPV6(ipV6ObjsArray, IpUtils.StringToBigIntString(ip));if(i>=0)            {IpV6ObjipV6Obj=ipV6ObjsArray[i];returnipV6Obj.city+","+ipV6Obj.province;            }else{returnnull;            }        }else{//如果不符合IPV4或IPV6格式returnnull;        }    }

四、UDF函数注册

MaxCompute UDF函数操作可以参考官方文档:MaxCompute函数操作

这里通过两种方式注册MaxCompute UDF函数

1、通过odpscmd

odpscmd客户端下载安装以及使用请参考:客户端

--上次资源:add file ipv4.txt-f;add file ipv6.txt-f;add jar ipv4_ipv6_aton.jar;--注册函数:--类名:com.aliyun.odps.udf.udfFunction.IpLocationcreate function function_name as'com.aliyun.odps.udf.udfFunction.IpLocation' using 'ipv4_ipv6_aton.jar, ipv4.txt, ipv6.txt';

8B196E1B-730D-4472-8088-BACF735FBD64.png

2、DataWorks

DataWorks注册MaxCompute函数请参考文档:DataWorks注册MaxCompute函数

(1)上传MaxCompute资源

这里需要上传的资源列表:ipv4_ipv6_aton.jar, ipv4.txt, ipv6.txt

参考上述文档上传资源截图如下:
    其中ipv4_ipv6_aton.jar选择 MaxCompute-->JAR

ipv4.txt, ipv6.txt选择MaxCompute-->File

5430F290-7339-42fc-90A4-94E22CD029EB.png

2.png

(2)注册函数

3.png

904DB16F-C709-484b-B98E-0241D0EC27CF.png

五、UDF函数测试

D25FF2FA-1A66-4e1d-A014-615E9912ED2D.png

六、函数源码

MaxCompute IPv4-IPv6地址转换UDF源码请点击下载:

IPv4-IPv6 UDF源码

IPv4-IPv6地址库

七、参考文档

MaxCompute IP地址转换历史参考文档:

1、【大数据技巧】MaxCompute中实现IP地址归属地转换

八、MaxCompute开发者社区交流群

欢迎加入“MaxCompute开发者社区2群”,点击链接MaxCompute开发者社区2群申请申请加入或扫描以下二维码加入。

70fc1458bc5346b7b70dae07c0c097cc.png




相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
3月前
|
分布式计算关系型数据库MySQL
MaxCompute问题之数据归属分区如何解决
MaxCompute数据包含存储在MaxCompute服务中的表、分区以及其他数据结构;本合集将提供MaxCompute数据的管理和优化指南,以及数据操作中的常见问题和解决策略。
|
10月前
|
SQL安全Java
开启 Kerberos 安全认证的大数据环境中如何正确指定 HS2 的 jdbc url 地址?
开启 Kerberos 安全认证的大数据环境中如何正确指定 HS2 的 jdbc url 地址?
|
SQL分布式计算NoSQL
大数据相关常用软件下载地址集锦
大数据相关常用软件下载地址集锦
|
关系型数据库PostgreSQL
|
分布式计算MaxCompute数据安全/隐私保护
《MaxCompute技术公开课第四季 之 MaxCompute数据安全管理解析》电子版地址
MaxCompute技术公开课第四季 之 MaxCompute数据安全管理解析
《MaxCompute技术公开课第四季 之 MaxCompute数据安全管理解析》电子版地址
|
大数据
《Greenplum 5: 内核增强、广泛适用的大数据平台》电子版地址
Greenplum 5: 内核增强、广泛适用的大数据平台
6900
《Greenplum 5: 内核增强、广泛适用的大数据平台》电子版地址

热门文章

最新文章

  • 1
    MaxCompute 产品新能力发布-2024年Q1
    24
  • 2
    当当网商品列表数据采集丨当当网商品列表数据接口
    31
  • 3
    SQL 能力问题之MaxCompute(ODPS)SQL有哪些特点
    25
  • 4
    MaxCompute操作报错合集之编写UDF(用户自定义函数)时,报错:找不到主类,是什么原因
    43
  • 5
    MaxCompute操作报错合集之执行SQL Union All操作时,数据类型产生报错,该怎么解决
    40
  • 6
    MaxCompute操作报错合集之出现“查询运行日志失败”的报错,一般是什么导致的
    40
  • 7
    MaxCompute操作报错合集之遇到报错:"Catalog Service Failed",该如何处理
    31
  • 8
    MaxCompute操作报错合集之在读取OSS遇到格式报错,该怎么办
    33
  • 9
    MaxCompute操作报错合集之 Spark Local模式启动报错,是什么原因
    31
  • 10
    MaxCompute操作报错合集之在创建SQL函数时,遇到报错,该如何解决
    32
  • 相关产品

  • 云原生大数据计算服务 MaxCompute
  • 下一篇
    云函数