开发者学堂课程【2020版大数据实战项目之 DMP 广告系统(第五阶段):课时名称】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/680/detail/11809
IP 转换_框架设计
内容介绍:
一、IP 转换思路梳理
二、挑战和结构
一、IP 转换思路梳理
1、前面课程了解了 IP 该如何转换,还了解了不仅要把 IP 转为省市信息,还要把 IP转为经纬度信息,所以本课程学习具体的转化和操作。ETL 功能比较复杂,先介绍一下整个流程是怎样的,先把结构写出来。通过一个小节,大家就知道一般情况下该怎样去抽取一整个功能形成一个小的框架,在框架内写代码。在进行具体的 IP 查询代码编写之前,先梳理整体流程,有助于理解后续的代码。整体上的步骤讲解两大知识点,第一大知识点流程是什么。通过流程的了解,可以更好地写后面的代码。第二大知识点是流程了解以后,其中有什么样的挑战,有哪些重复的东西,有哪些可变的东西可以抽出来需要讲解。编写结构性的代码,这样会对结构有更深的认识。
2、先了解一下整体上思路的梳理,在不同的角度上,思路会有区别。在工具的视角上看,整体分为三大部。
第一步数据集叫 pmt.json,用 Spark 读取 pmt.json,读取进行操作转化 ip,然后把数据落地到 Kudo 当中,这是工具视角下的步骤。下面看数据视角下,
pmt.json 当中少了一些纬度的数据,相对比较杂乱,Spark 环节就是让数据变得更整齐,更清晰,更方便使用,增加一些维度信息,最后把数据放在 Kudo 表当中,这是整体上的三大步骤。要做的事,第一步要读取数据集 pmt.json,第二步读到 pmt.json 后要把 IP 相关的数据取出来转成省市,转成经纬度。第三步设计落地的 Kudo 表,最后创建 Kudo 表,就是这样一个思路,然后把数据存在 Kudo 表当中。这个流程当中现在只对 IP 进行处理,但是这里写的是处理和转换,以后在工作当中进行数据清理的时候直转换 IP 吗?这过于简单,所以还会有其他很多的事情要做,在做其他的事情的时候,可能会往里面一直添加代码。
3、
要做的事
·读取数据集 pmt. json
·将 IP 转换为省市
·设计 Kudu 表结构,创建 Kudu 表
·存入 Kudu 表
二、挑战和结构
1、任务本质上是把一个数据集 A 转化为数据集 B,把一个相对不好的数据集转化为一个相对较好的数据集。其中在转化的时候可能会有很多事情要做,比如说少了一些纬度的数据,要把它转成完整的纬度数据。
这就需要进行 IP 的转换,提取 IP 所代表的经纬度信息,然后还要进行一些金额的转换,可以从金额上看出它是属于哪个国家,其次商品需要多少钱也可以看得到,最后要进行量纲上的统一,这几步做完以后才会变成一个完整的数据集。这样就需要有很多事情要做,现在不只是一个 IP 转换,如果需要做很多事情,该怎么办?所以不能把架构写死,也不能一直在一个类里添加代码,所以可以设计一套机制,机制是有一定扩展性的,可以加入一些新的东西让工程变得更好,让功能变得更多,而不是修改现有的东西。因此可以把结构写成这样,
在数据集 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。
在 processor 当中需要指定一个方法, 让它有一个 abstract 方法,这个方法就命名为 process。这个时候在 etl runner 中,对于不同的数据处理操作来说,需要把操作在这个位置调用,也就是说在这个地方要调用 processor.process,
这就是整体上的流程。后面还会进行相对详细的框架的设计。