MaxCompute UDTF 实现日志解析

简介: MaxCompute UDTF 实现日志解析

开发环境: 

1. InteliJ IDEA COMMUNITY
2. 阿里云 MaxCompute Studio
3. 阿里云 DataWorks

4. apache-maven-3.5.4


MaxCompute Studio 是阿里云 MaxCompute 平台提供的安装在开发者客户端的大数据集成开发环境工具,是一套基于流行的集成开发平台  IntelliJ IDEA 的开发插件,可以帮助您方便地进行数据开发。

依赖包:
lombok.Data: 自动填充 getter, setter 方法
com.alibaba.fastjson.JSONObject: JSON 对象解析

实验:
1. IDEA 创建 MaxCompute Java 项目
【Create New Project】->【MaxCompute Java】->输入项目名,例如:“udtf_test”
5442afaa887ab4a916d3c984fd45921609db9c9c
b27c3807f5ed5fed248ce6a2d5f7a1b74059526b
6aa90434d573515ab2c7e53f19318b81246e0543

2. 创建日志 model(Log.java)
a. (可选)创建 Package
b. 在该 Package 中创建 Log.java
513913337adaae07655a9cebb6f1ecedc64e8ecb
5c5371d73d7a0d8df0748a7ab064fcd396b5cfb3

3. 创建 UDTF
a. 【New】->【Maxcompute Java】
b. Name: 输入类名,例如:“LogParser”
c. Kind: 选择【UDTF】
482e6cdd3dd4a88507610ad410b443f30d228670
1c0580e93a6ef9c1774bca8e180272077c78fa80
d. 最终的项目结构如图所示:
454ebe0631418c9e46563f1407f98aa46d3abd21

4. 代码开发
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数据类型的对应关系
3ebaebf5e5e0bec542dc5a89a5119028fab3db60
6078d46347c0bf9bc944f1230c872cc05ee49771

5. 导出 Jar 文件
进入到该项目的根目录,使用 maven 打包,导出 Jar 文件。
mvn clean package
c002ac22742c505a103ef0b0820776e167fb9ac6

6. 第三方依赖单独下载

本例中使用到 fastjson,下载地址:fastjson


7. 进入 DataWorks 工作空间使用该 UDTF 函数


a. 创建业务流程,本例命名:“test_udtf”

6d5b09f8c24c6253a68b7eebe1c53a71a1422d31


b. 新建资源,UDTF 与第三方依赖都要上传!!

4568ef98c9a24f435a2384e9666ed2cd95a40f4e


2415c7a997e2b33006c776fc987fd242fa971e94 4dc94a798d5b49e7a8b05ad2fa4d4cbeecb3d48d


c. 提交资源,UDTF 与第三方依赖都要提交!!

bdd5bf5cebfd9fc2ae453414979056c1c6f02f24


d. 注册函数

资源列表:两个 Jar 文件都要手工输入,记得保存、提交!!

ffc911911bb02463e464b0898adea1781efd7e7e


e92f0a008d9017a4f313a8338d1ca715dc80a5ca


最终的业务流程如下:2个资源 + 1个函数
9ca16e51ac0dc2f5eb42c56a32def1fb8c8d81d3

e. 创建 SQL 节点,测试 UDTF
8df83785dce64457ce553286ac0397bed14d6749

测试成功!JSON 数据解析为三个字段。 22.gif
14bb45d390f833e4e1f69ed7cde72f061204b390

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,运行时,两个语句全部选中,再执行。




 
 
 
 
 
 
 
 
 
相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
3月前
|
分布式计算 大数据 数据库连接
maxcompute开发环境问题之参数解析失败如何解决
MaxCompute开发环境是指设置和配置用于开发MaxCompute项目的本地或云端环境;本合集将指导用户如何搭建和管理MaxCompute开发环境,包括工具安装、配置和调试技巧。
|
8天前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在DataWorks中,使用JSON解析函数将MySQL表中的字段解析成多个字段将这些字段写入到ODPS(MaxCompute)中如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
22 3
|
8天前
|
分布式计算 Java 大数据
MaxCompute产品使用合集之大数据计算MaxCompute外部表映射了oss中的csv文件,看到"\N"被解析为"N",是什么原因
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
8天前
|
分布式计算 大数据 数据处理
MaxCompute操作报错合集之在开发环境中配置MaxCompute参数进行调度,但参数解析不出来,如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
15天前
|
SQL 分布式计算 资源调度
一文解析 ODPS SQL 任务优化方法原理
本文重点尝试从ODPS SQL的逻辑执行计划和Logview中的执行计划出发,分析日常数据研发过程中各种优化方法背后的原理,覆盖了部分调优方法的分析,从知道怎么优化,到为什么这样优化,以及还能怎样优化。
103478 1
|
2月前
|
域名解析 缓存 网络协议
阿里云DNS常见问题之阿里云DNS的操作日志查不到如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
2月前
|
消息中间件 测试技术 Python
Python使用多线程解析超大日志文件
Python使用多线程解析超大日志文件
28 0
|
2月前
|
分布式计算 NoSQL 大数据
探索数据宇宙:深入解析大数据分析与管理技术
探索数据宇宙:深入解析大数据分析与管理技术
56 1
|
3月前
|
SQL 监控 关系型数据库
数据库日志解析:深入了解MySQL中的各类日志
数据库日志解析:深入了解MySQL中的各类日志
271 0
|
4月前
|
canal 消息中间件 关系型数据库
大数据数据库增量日志采集之Canal
大数据数据库增量日志采集之Canal

热门文章

最新文章

推荐镜像

更多