文档章节

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

_夜枫
 _夜枫
发布于 2017/04/05 22:54
字数 727
阅读 28
收藏 0

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

俗话说:巧妇难为无米之炊,要实现IP地址与归属地的转换必须要有IP地址库,不过好在互联网上已经有一些资源,而且还提供免费版本的IP数据库下载详见:www.ipip.net(请叫我雷锋^_^)。没错,我们首先要把它下载到本地,命名为ip.dat。

966c42de1df56c9659ce1e097a46cfb77b7bec51

米已经有了,接下来就考虑怎么下厨了。想要在MaxCompute中实现用户自定义逻辑的代码处理,最常用的就是MR和SQL UDF。考虑到大部分用户使用偏好以及工作成果的可重用性,此处我们给大家介绍通过UDF的实现方式。如果客官还对MaxCompute如何实现UDF不熟悉,请自行脑补:https://help.aliyun.com/document_detail/27866.html,文档中都有代码示例。UDF分为三种,分别是UDF、UDAF、UDTF,此处不过多介绍,毫无疑问这种需求场景需要采用第一种实现。

实现用户自定义函数要继承com.aliyun.odps.udf.UDF,具体实现分两个步骤:

一、实现setup方法加载IP地址库数据,并做初始化,代码片段如下图:

注意:ip.dat 的大小,修改ByteBuffer.allocate(),不要溢出,可以大一些;

725caa8d938a365855a4b3c5ab8f90469f638576

二、实现evaluate方法,完成用户数据IP地址到归属地的转换逻辑,代码片段如下图:

99d15f7a6bf4e85ee947d4d55562c33dd311a44c

此处需要注意的是,MaxCompute中是采用UTF-8编码的,为了避免出现中文乱码,我们在输出是可以指定编码方式为UTF-8。

Coding完成后编译打包,命名为getaddr.jar。而后我们需要把ip.dat以及getaddr.jar作为资源上传到MaxCompute项目空间。上传资源可以通过数加DataIDE中向导的方式,也可以通过Console中执行命令的方式。两种方式截图如下:

方式一:

29ce6f3fecfd4a5594eb8f27fb8a99fc5a9dc029

方式二:

9014b54fbf86c287b4b5e6078c6157a7ce5b79bd

资源上传完毕后需要创建Function,在控制台或者数加DataIDE窗口中执行命令,如图:

b3a66e5f21d72def8e73d41a2f12824776868c05

至此,UDF已经实现完成,我们需要做个验证,比如我们可以通过UDF查询116.11.34.15这个IP地址的所属地,如下图:

88ec6dee2f0c956a78bfbad71b5514c001b3358f

准确性验证,如下图:

e4d0df88b623fe7496d10255040f901078829b57

当然准确性一方面是我们解析匹配的逻辑,更重要的也取决于IP地址库本身是否准确。

 

代码下载:https://yq.aliyun.com/attachment/download/?spm=0.0.0.0.TQ3hRZ&filename=GetAddr....[%E9%9A%90%E6%9E%97].1489571623.rar

本文转载自:https://yq.aliyun.com/articles/68432

_夜枫
粉丝 10
博文 506
码字总数 0
作品 0
朝阳
后端工程师
私信 提问
阿里巴巴大数据计算平台MaxCompute(原名ODPS)全套攻略(持续更新20171127)

概况介绍 大数据计算服务(MaxCompute,原名ODPS,产品地址:https://www.aliyun.com/product/odps)是一种快速、完全托管的TB/PB级数据仓库解决方案。MaxCompute向用户提供了完善的数据导入方...

隐林
2017/05/05
0
0
Python获取IP地址对应的地理位置信息!

开发工具 Python版本:3.6.4相关模块:IPy模块;argparse模块;requests模块;以及一些Python自带的模块。 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可。 先睹为快 py...

糖宝lsh
01/27
137
0
IPv6绝不仅仅是对IPv4地址长度的增加

众所周知,IPv6 IP地址长度是IPv4 IP地址长度的四倍,是解决IPv4公共网址资源枯竭的最佳技术。的确,IETF在制定IPv6标准时也是基于这一因素考虑的。当时正是90年代初,Web开始出现,导致IP网...

问题终结者
03/31
26
0
go环境+ip本地库统计ip归属地

一、服务器环境介绍: dell服务器PowerEdge R420 系统是最小化安装 由于我的系统是CentOS6.9 x89_64位的,所以下载安装64位的go tar包 二、安装go环境: 参考文档: https://www.cnblogs.co...

wjw555
2018/07/09
0
0
网关中集成ip2region的方法

之前公司遇到的网络攻击中,虽然在虽然有记录ip的功能,但是ip地址的归属地在哪里是不知道的。只能在百度中查询一下,但是这个工作量会很大。所以最好是在网关中就能知道访问接口的ip地址归属...

miaojiangmin
05/05
34
0

没有更多内容

加载失败,请刷新页面

加载更多

Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
今天
17
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
今天
9
0
太全了|万字详解Docker架构原理、功能及使用

一、简介 1、了解Docker的前生LXC LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpa...

Java技术剑
今天
21
0
Wifiphisher —— 非常非常非常流氓的 WIFI 网络钓鱼框架

编者注:这是一个非常流氓的 WIFI 网络钓鱼工具,甚至可能是非法的工具(取决于你的使用场景)。在没有事先获得许可的情况下使用 Wifiphisher 攻击基础网络设施将被视为非法活动。使用时请遵...

红薯
今天
90
1
MongoDB 4 on CentOS 7安装指南

本教程为CentOS x86_64 7.x操作系统下,MongoDB Community x86_64 4.2(GA)安装指南。 安装方式一:yum repo在线安装 [此方式较为简单,官方推荐] Step1:新建MongDB社区版Yum镜像源。 # vim ...

王焱君
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部