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




 
 
 
 
 
 
 
 
 
相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
5月前
|
数据采集 存储 大数据
大数据之路:阿里巴巴大数据实践——日志采集与数据同步
本资料全面介绍大数据处理技术架构,涵盖数据采集、同步、计算与服务全流程。内容包括Web/App端日志采集方案、数据同步工具DataX与TimeTunnel、离线与实时数仓架构、OneData方法论及元数据管理等核心内容,适用于构建企业级数据平台体系。
|
5月前
|
存储 分布式计算 Hadoop
Hadoop框架解析:大数据处理的核心技术
组件是对数据和方法的封装,从用户角度看是实现特定功能的独立黑盒子,能够有效完成任务。组件,也常被称作封装体,是对数据和方法的简洁封装形式。从用户的角度来看,它就像是一个实现了特定功能的黑盒子,具备输入和输出接口,能够独立完成某些任务。
|
2月前
|
数据采集 缓存 大数据
【赵渝强老师】大数据日志采集引擎Flume
Apache Flume 是一个分布式、可靠的数据采集系统,支持从多种数据源收集日志信息,并传输至指定目的地。其核心架构由Source、Channel、Sink三组件构成,通过Event封装数据,保障高效与可靠传输。
227 1
|
9月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2173 1
|
5月前
|
人工智能 分布式计算 DataWorks
多模态数据处理新趋势:阿里云ODPS技术栈深度解析与未来展望
阿里云ODPS技术栈通过MaxCompute、Object Table与MaxFrame等核心组件,实现了多模态数据的高效处理与智能分析。该架构支持结构化与非结构化数据的统一管理,并深度融合AI能力,显著降低了分布式计算门槛,推动企业数字化转型。未来,其在智慧城市、数字医疗、智能制造等领域具有广泛应用前景。
498 6
多模态数据处理新趋势:阿里云ODPS技术栈深度解析与未来展望
|
7月前
|
人工智能 分布式计算 大数据
MCP、MaxFrame与大数据技术全景解析
本文介绍了 MCP 协议、MaxFrame 分布式计算框架以及大数据基础设施建设的相关内容。MCP(Model Context Protocol)是一种开源协议,旨在解决 AI 大模型与外部数据源及工具的集成问题,被比喻为大模型的“USB 接口”,通过统一交互方式降低开发复杂度。其核心架构包括 Client、Server、Tool 和 Schema 四个关键概念,并在百炼平台中得到实践应用。MaxFrame 是基于 Python 的高性能分布式计算引擎,支持多模态数据处理与 AI 集成,结合 MaxCompute 提供端到端的数据处理能力。
|
8月前
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
9月前
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
917 13
|
9月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
11月前
|
存储 搜索推荐 大数据
数据大爆炸:解析大数据的起源及其对未来的启示
数据大爆炸:解析大数据的起源及其对未来的启示
726 15
数据大爆炸:解析大数据的起源及其对未来的启示

推荐镜像

更多
  • DNS