MaxCompute UDTF 实现日志解析

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 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,运行时,两个语句全部选中,再执行。




 
 
 
 
 
 
 
 
 
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
2月前
|
存储 监控 安全
深入解析Sysmon日志:增强网络安全与威胁应对的关键一环
在不断演进的网络安全领域中,保持对威胁的及时了解至关重要。Sysmon日志在这方面发挥了至关重要的作用,通过提供有价值的见解,使组织能够加强其安全姿态。Windows在企业环境中是主导的操作系统,因此深入了解Windows事件日志、它们的独特特性和局限性,并通过Sysmon进行增强,变得至关重要。
|
2月前
|
存储 消息中间件 大数据
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
50 4
|
2月前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
34 3
|
2月前
|
存储 消息中间件 大数据
大数据-70 Kafka 高级特性 物理存储 日志存储 日志清理: 日志删除与日志压缩
大数据-70 Kafka 高级特性 物理存储 日志存储 日志清理: 日志删除与日志压缩
52 1
|
2月前
|
存储 消息中间件 大数据
大数据-68 Kafka 高级特性 物理存储 日志存储概述
大数据-68 Kafka 高级特性 物理存储 日志存储概述
33 1
|
2月前
|
存储 关系型数据库 MySQL
MySQL中的Redo Log、Undo Log和Binlog:深入解析
【10月更文挑战第21天】在数据库管理系统中,日志是保障数据一致性和完整性的关键机制。MySQL作为一种广泛使用的关系型数据库管理系统,提供了多种日志类型来满足不同的需求。本文将详细介绍MySQL中的Redo Log、Undo Log和Binlog,从背景、业务场景、功能、底层实现原理、使用措施等方面进行详细分析,并通过Java代码示例展示如何与这些日志进行交互。
247 0
|
3月前
|
存储 缓存 关系型数据库
redo log 原理解析
redo log 原理解析
57 0
redo log 原理解析
|
2月前
|
存储 分布式计算 NoSQL
大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge
大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge
65 0
|
2月前
|
存储 缓存 网络协议
搭建dns服务常见报错--查看/etc/named.conf没有错误日志信息却显示出错(/etc/named.conf:49: missing ‘;‘ before ‘include‘)及dns介绍
搭建dns服务常见报错--查看/etc/named.conf没有错误日志信息却显示出错(/etc/named.conf:49: missing ‘;‘ before ‘include‘)及dns介绍
199 0
|
4月前
|
存储 分布式计算 大数据
【Flume的大数据之旅】探索Flume如何成为大数据分析的得力助手,从日志收集到实时处理一网打尽!
【8月更文挑战第24天】Apache Flume是一款高效可靠的数据收集系统,专为Hadoop环境设计。它能在数据产生端与分析/存储端间搭建桥梁,适用于日志收集、数据集成、实时处理及数据备份等多种场景。通过监控不同来源的日志文件并将数据标准化后传输至Hadoop等平台,Flume支持了性能监控、数据分析等多种需求。此外,它还能与Apache Storm或Flink等实时处理框架集成,实现数据的即时分析。下面展示了一个简单的Flume配置示例,说明如何将日志数据导入HDFS进行存储。总之,Flume凭借其灵活性和强大的集成能力,在大数据处理流程中占据了重要地位。
113 3

热门文章

最新文章

推荐镜像

更多