MaxCompute UDTF 实现日志解析
开发环境:
1. InteliJ IDEA COMMUNITY
2. 阿里云 MaxCompute Studio
3. 阿里云 DataWorks
4. apache-maven-3.5.4
MaxCompute Studio 是阿里云 MaxCompute 平台提供的安装在开发者客户端的大数据集成开发环境工具,是一套基于流行的集成开发平台 IntelliJ IDEA 的开发插件,可以帮助您方便地进行数据开发。
【Create New Project】->【MaxCompute Java】->输入项目名,例如:“udtf_test”
2. 创建日志 model(Log.java)
a. (可选)创建 Package
b. 在该 Package 中创建 Log.java
3. 创建 UDTF
a. 【New】->【Maxcompute Java】
b. Name: 输入类名,例如:“LogParser”c. Kind: 选择【UDTF】
d. 最终的项目结构如图所示:
5. 导出 Jar 文件pom.xml上文中提到的两个依赖,添加到 pom 文件中<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
Log.java
日志 JSON 文件的字段定义,可以根据具体的日志字段来定义,引入 lombok.Data,省去了 getter, setter 方法的定义。package model; import lombok.Data; /** * @author: garygao * @version: 1.0 2019/1/5 * @since 1.0 */ @Data public class Log { private String type; private Integer platform; private String logTime; }
LogParser.java(UDTF)import com.aliyun.odps.udf.ExecutionContext; import com.aliyun.odps.udf.UDFException; import com.aliyun.odps.udf.UDTF; import com.aliyun.odps.udf.annotation.Resolve; import model.Log; import com.alibaba.fastjson.JSONObject; /** * @author: garygao * @version: 1.0 2019/1/5 * @since 1.0 */ // TODO define input and output types, e.g. "string,string->string,bigint". @Resolve({"string -> string,int,string"}) public class LogParser extends UDTF { @Override public void process(Object[] args) throws UDFException { String s = args[0].toString(); String log = s.substring(s.indexOf("{")); Log accessLog = JSONObject.parseObject(log, Log.class); forward(accessLog.getType(),accessLog.getPlatform(),accessLog.getLogTime()); } }
特别注意:@Resolve 注解中,输入输出的数据类型定义,Java 数据类型与 MaxCompute 类型的映射,请参考: Java数据类型与MaxCompute数据类型的对应关系
进入到该项目的根目录,使用 maven 打包,导出 Jar 文件。
mvn clean package
6. 第三方依赖单独下载
7. 进入 DataWorks 工作空间使用该 UDTF 函数本例中使用到 fastjson,下载地址:fastjson
a. 创建业务流程,本例命名:“test_udtf”
b. 新建资源,UDTF 与第三方依赖都要上传!!
c. 提交资源,UDTF 与第三方依赖都要提交!!
d. 注册函数
资源列表:两个 Jar 文件都要手工输入,记得保存、提交!!
最终的业务流程如下:2个资源 + 1个函数
e. 创建 SQL 节点,测试 UDTF
测试成功!JSON 数据解析为三个字段。
set odps.sql.type.system.odps2=true; SELECT log_parser(' {"type": "i am a type" ,"platform": 105 ,"logTime": "2019-01-05 11:06:32"} ') AS (type, platform, logTime) ;
注意:Int 为 MaxCompute 2.0 支持的新数据类型,需要设置 odps.sql.type.system.odps2=true,运行时,两个语句全部选中,再执行。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Hbase-Observer
HBase的协处理器涵盖了两种类似关系型数据库中的应用场景:存储过程和触发器,所以协处理器也分为两种:用来实现存储过程功能的终端 程序EndPoint和用来实现触发器功能的观察者Observers Observer 在hbase2.x的时候,按照之前的继承BaseRegionObserver 是不起作用的,经过我的测试,这个类好像是被移除了,我使用的版本是2.1.1 新的实现可以查看接口Coprocessor来查看,我们来看一下 /** * Base interface for the 4 coprocessors - MasterCoprocessor, RegionCoprocessor, * RegionServerCoprocessor, and WALCoprocessor. * Do NOT implement this interface directly. Unless an implementation implements one (or more) of * the above mentioned 4 coprocessors, it'll fail to be ...
- 下一篇
阿里巴巴,果然开始拥有“预测未来”的能力了
文 | 史中 顶灯闪烁,笛声响彻。 救护车载着病人,冲向茫茫车海,在时间的赛道上狂奔。 高德地图、GPS 卫星导航、路面磁感线圈、1300 个路口摄像头同时开动,为这辆救护车勘探最快路线; GPS 传回实时数据,后台根据辅助数据纠偏,锚定救护车每一刻的精确位置; 救护车将要经过的沿途,车辆情况被实时计算。确保路口绿灯提前亮起,在救护车通过之前,刚好所有社会车辆已经行驶一空。 这不是演习,这是杭州城市大脑每天都在执行的任务。依靠计算,一辆救护车到达医院的速度,平均缩短了 50%。在这座城市,靠鸣笛和闯红灯开道的悲壮彻底成为历史。 说人同蝼蚁,其实并不为过。两百多万辆车奔跑在城市里,他们的行踪像风里的落叶一样叵测。但通过对 1300个路口的摄像头的实时计算,城市大脑就可以精确地预测出未来十五分钟、未来半小时那哪个路段将会拥堵,从而第一时间指挥路口信
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7设置SWAP分区,小内存服务器的救世主
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7,CentOS8安装Elasticsearch6.8.6