IP 转换_框架设计 | 学习笔记

简介: 快速学习IP 转换_框架设计

开发者学堂课程【2020版大数据实战项目之 DMP 广告系统(第五阶段):课时名称】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/680/detail/11809


IP 转换_框架设计

 

内容介绍:

一、IP 转换思路梳理

二、挑战和结构

 

一、IP 转换思路梳理

1、前面课程了解了 IP 该如何转换,还了解了不仅要把 IP 转为省市信息,还要把 IP转为经纬度信息,所以本课程学习具体的转化和操作。ETL 功能比较复杂,先介绍一下整个流程是怎样的,先把结构写出来。通过一个小节,大家就知道一般情况下该怎样去抽取一整个功能形成一个小的框架,在框架内写代码。在进行具体的 IP 查询代码编写之前,先梳理整体流程,有助于理解后续的代码。整体上的步骤讲解两大知识点,第一大知识点流程是什么。通过流程的了解,可以更好地写后面的代码。第二大知识点是流程了解以后,其中有什么样的挑战,有哪些重复的东西,有哪些可变的东西可以抽出来需要讲解。编写结构性的代码,这样会对结构有更深的认识。

image.png

2、先了解一下整体上思路的梳理,在不同的角度上,思路会有区别。在工具的视角上看,整体分为三大部。

image.png

第一步数据集叫 pmt.json,用 Spark 读取 pmt.json,读取进行操作转化 ip,然后把数据落地到 Kudo 当中,这是工具视角下的步骤。下面看数据视角下,

image.png

pmt.json 当中少了一些纬度的数据,相对比较杂乱,Spark 环节就是让数据变得更整齐,更清晰,更方便使用,增加一些维度信息,最后把数据放在 Kudo 表当中,这是整体上的三大步骤。要做的事,第一步要读取数据集 pmt.json,第二步读到 pmt.json 后要把 IP 相关的数据取出来转成省市,转成经纬度。第三步设计落地的 Kudo 表,最后创建 Kudo 表,就是这样一个思路,然后把数据存在 Kudo 表当中。这个流程当中现在只对 IP 进行处理,但是这里写的是处理和转换,以后在工作当中进行数据清理的时候直转换 IP 吗?这过于简单,所以还会有其他很多的事情要做,在做其他的事情的时候,可能会往里面一直添加代码。

3、

image.png

要做的事

·读取数据集 pmt. json

·将 IP 转换为省市

·设计 Kudu 表结构,创建 Kudu 表

·存入 Kudu 表

 

二、挑战和结构

1、任务本质上是把一个数据集 A 转化为数据集 B,把一个相对不好的数据集转化为一个相对较好的数据集。其中在转化的时候可能会有很多事情要做,比如说少了一些纬度的数据,要把它转成完整的纬度数据。

image.png

这就需要进行 IP 的转换,提取 IP 所代表的经纬度信息,然后还要进行一些金额的转换,可以从金额上看出它是属于哪个国家,其次商品需要多少钱也可以看得到,最后要进行量纲上的统一,这几步做完以后才会变成一个完整的数据集。这样就需要有很多事情要做,现在不只是一个 IP 转换,如果需要做很多事情,该怎么办?所以不能把架构写死,也不能一直在一个类里添加代码,所以可以设计一套机制,机制是有一定扩展性的,可以加入一些新的东西让工程变得更好,让功能变得更多,而不是修改现有的东西。因此可以把结构写成这样,

image.png

在数据集 A 转换成数据集 B 的过程中,使用 Processor,或者使用 spark 一个程序。Processor 内部要做的事情,比如说 IP 处理、量刚处理、其他的一些处理。可以把IP处理、量刚处理和其他处理独立成一个单独的类,把类集成到 Processor 中,这也是混入的核心思想。

2、设计一套框架来执行刚才的步骤。在 etl 当中创建一个叫 runner 的工具,名称叫做 ETLrunner。Class 代表的是 ET L 的 runner,ETL 会跟其他的任务调度周期,逻辑上会有一些不同,可能是一天执行一次或半天执行一次,其他可能是一周一个月或者是一天执行一次。

class ETLRunner{

}

所以要为 ETL 的操作设置一个单独的入口,然后写出对应的方法,把 class 改为object,在 main 方法当中进行具体的操作,进行具体操作的时候,步骤是怎样的呢?第一步创建 sparksession,第二步读取数据集,这个数据集不一定在 Kudo 上,这个数据集在 dataset 下,到时候把 pmt.json 拷贝过来。第三步进行数据操作,第四步要进行数据落地和模式设计。

object ETLRunner {

def main(args:Array[string]):Unit={

//1.创建 SparkSession

//2.读取数据集

//3.数据操作

//4.数据落地

}

}

在这四个步骤当中,创建 sparksession 是公用的功能,无论是IP 转化还是量纲转换,都要创建 sparksession 。读取数据集的时候都是拿一个数据集来操作,在这个数据集之上进行一些处理,所以第二步也是一个通用的步骤。第四部数据落地,不管数据处理成什么样子,最终要落地到某一个地方,所以第四步也是一个公用的功能。假如想做的事情很多,就要在数据操作这做一些小文章,就是要想清楚数据操作到底有哪些操作,哪些操作建成一个单独的类,这个类暂且命名为 processor,这个 processor 就是具体处理数据的对象,Kind 改为 Trait。

image.png

在 processor 当中需要指定一个方法, 让它有一个 abstract 方法,这个方法就命名为 process。这个时候在 etl runner 中,对于不同的数据处理操作来说,需要把操作在这个位置调用,也就是说在这个地方要调用 processor.process,

image.png

这就是整体上的流程。后面还会进行相对详细的框架的设计。

相关文章
|
缓存 关系型数据库 PostgreSQL
PostgreSQL relcache在长连接应用中的内存霸占"坑"
除了常见的执行计划缓存、数据缓存,PostgreSQL为了提高生成执行计划的效率,还提供了catalog, relation等缓存机制。PostgreSQL 9.5支持的缓存如下 ll src/backend/utils/cache/ attoptcache.c catcache.c
7828 0
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
651 4
|
Java
Java文件操作
本文介绍了Java中`File`类的使用方法,包括构造方法、常见成员方法及其实现功能。`File`对象可以表示文件或文件夹,支持绝对路径和相对路径。构造方法有三种:基于完整路径、父级路径与子路径组合、`File`对象与字符串组合。成员方法涵盖判断类型、获取大小、获取路径、创建与删除文件/文件夹、获取文件列表、重命名等操作。文章通过示例代码详细展示了各个方法的应用场景及注意事项。
159 1
Java文件操作
【编程基础知识】正数负数的二进制位运算(左移 右移 无符号右移)
正数和负数需转换成二进制后进行移位运算。左移低位补0,不影响符号位;右移符号位跟随移动,最高位还原为原符号位;无符号右移高位补0,适用于负数处理。
905 0
|
数据库
掌握数据模型的精细控制:深入探索Entity Framework Core中的自定义类型转换器与值转换器
【8月更文挑战第31天】在软件开发中,数据模型常需在数据库类型与 .NET 类型之间进行映射。尽管 Entity Framework Core 提供了默认的类型映射,但在某些情况下,我们可能需要自定义映射规则。这时,类型转换器和值转换器就派上了用场。本文将介绍如何在 EF Core 中使用自定义类型转换器和值转换器,以实现更灵活的数据映射。
215 0
|
SQL 机器学习/深度学习
SQL语句like子句中的转义符
SQL语句like子句中的转义符
524 0
|
监控 安全 网络协议
Windows运行命令大全
运行命令即DOS命令,主要是面向[DOS](https://baike.baidu.com/item/DOS)操作系统的,以命令行的形式,靠输入命令来进行人机对话,并通过命令的形式把指令传给计算机,以实现对计算机的操作。DOS命令主要包括内部命令、外部命令和批处理命令。所有受支持的 Windows 版本(服务器和客户端)都具有内置的一组 Win32 控制台命令
|
存储 网络协议 关系型数据库
西门子LOGO!与S7-200的以太网通信如何设置
一台LOGO!OBA7设备支持最多8+1个网络连接,即可实现与最多八个基于TCP/IP协议的S7通信连接,以及与安装有LOGO!Soft Comfort V7.0的PC之间的以太网连接。我们既可以使用一台LOGO!OBA7与一台扩展了以太网模块的S7-200直接进行以太网线连接通信,也可以使用交换机实现多台LOGO!0BA7与S7-200的以太网通信,以及与个人电脑的以太网通信。如图所示,LOGO!0BA7与S7-200进行以太网连接时,我们可以设置S7-200做服务器,LOGO!0BA7做客户端,也可以设置LOGO!0BA7做服务器,S7-200做客户端。
西门子LOGO!与S7-200的以太网通信如何设置
|
大数据 Shell 开发者
Shell 客户端:quota 限制&其他命令|学习笔记
快速学习 Shell 客户端:quota 限制&其他命令
245 0
Shell 客户端:quota 限制&其他命令|学习笔记
|
机器学习/深度学习 分布式计算 网络协议
Alluxio深度学习实战-1:体验在HDFS上运行PyTorch框架
在HDFS上运行PyTorch程序本来需要用户修改PyTorch的适配器代码进行完成的工作,通过Alluxio,我们简化了适配工作,能够快速开展模型的开发和训练。而通过Kubernetes平台,这件事情变得非常简单,欢迎尝试。
5251 0
Alluxio深度学习实战-1:体验在HDFS上运行PyTorch框架