网站流量日志分析--统计分析--多维统计分析--终端维度--自定义 UDF 解析 UA|学习笔记

简介: 快速学习网站流量日志分析--统计分析--多维统计分析--终端维度--自定义 UDF 解析 UA

开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第四阶段) 网站流量日志分析--统计分析--多维统计分析--终端维度--自定义 UDF 解析 UA】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/696/detail/12226


网站流量日志分析--统计分析--多维统计分析--终端维度--自定义 UDF 解析 UA


1、如何开发 hve 的自定义函数udf 实现对 ua 的解析需要使用第三方的库并且需要编写 hive java 代码

2、打开开发环境编译器 IntelliJ IDEA,在里面创建标准的工程开发hive自定义函数udf需要 hive 的执行包hadoop 包此外因为涉及到解析涉及到 ua 第三方 的java包需要导入 bitwalker 公司的 USerAgentutils 开源免费的工具类

3、创建工程选择 new project

image.png

选择 maven 模块点击 next

image.png

groupid 是公司组织域名 cn.itcast.bigdata,框架名 example-udf,版本号 version 是1.1。

工程名与框架名保持一致 example-udf。

点击 finish提示目录不存在是否需要创建点击 ok

image.png

4、引入依赖

<dependencies>

<dependency>

<qroupIdsorg. apache .hive</groupId>

<artifactId>hive-exec</artifactId>

version>1.2.1</versi on>

</dependency>

<dependency>

<gr oupId>org. apache .hadoop</groupId>

<artifactId>hadoop-common</artifactId>

<version>2.7.4</version>

</dependency>

<dependency>

<groupId>eu .bitwalker </groupId>

<artifactId>userAgentuti1s </artifactId>

<version>1.21</version>

</dependency>

</dependencies>

可以 把 jar 包联网下载过来做相关的验证工作有了依赖后把插件导入进来需要 jar 包,maven- shade- plugin 插件比较好用把 build 模块复制进来

<build>

<plugins>

<plugin>

<groupId>org . apache . maven . plugins</groupId>

<artifactId> maven- shade -plugin</artifactId>

<version>2.2</version>

<executions>

<execution>

<phase>package</phase>

<goals>

<goal>shade</goal>

</goals>

<configuration>

<filters>

<filter>

<artifact>*:*</artifact>

<excludes>

<exclude>META- INF/* .SF</exclude>

<exclude>META- INF/* .DSA</exclude>

<exclude>META- INF/* . RSA</exclude>

</excludes>

</filter>

</filters>

</ configuration>

</execution>

</executions>

</plugin>

</plugins>

</build>

可以保证通过 maven 插件打包 jar 包整个 udf 的编写就是集成一个类写里面的方法。

5、创建一个 package,cn.itcast.hive.udf

image.png

创建 class,UAParseUDF。

这个核心中当把第三方的 jar 导入之后就很简单只要传入标准的 ua 字 符串就像数据中的第三行

image.png

就可以构建 useragent 的实例使用的对象就是第三方 jar 包提供的对象基于它构建后里面就非常方便的调用各种api相关的数据信息比如调用getoperatingSystem 获得操作系统,getBrowser 获得浏览器版本,, getBrowserVersion 获得浏览器版本号返回就可以做解析非常标准的 udf 函数标准的普通函数实现一进一出

public string evaluate(final string userAgent){

//hive 自定义函数实现对 ua 的解析

StringBûilder builder = new StringBuilder() ;

//todo 利用第三方 ar 包构建一个 UserAgent 对象基于该对象实现 ua 的解析解析不需要操作直接 api 就可以完成

UserAgentua = new UserAgent (userAgent) ;

builder .append(ua. getoper atingSystem()+"t"+ua. getBrowser ()+"t"+ua. getBrowserVersion());

return

(builder . toString());

}

6、选择 Maven Projectslifecyclepackage 打包

image.png

这时就会把 jar 包打到工程目录下因为涉及到签名冲突依赖所以打包的长一些需要把依赖的 jar 包也导入进来打包完显示 build success这时也弹出新的 target 目录在目录下有两个jar包一个是 example-udf-1.1.jar 工程 jar 包另一个是 original- example -udf-1.1.jar区别很明显一个是把所有以来的 jar 包导入进去一个是只把自己写的 jar 导入进来选择第一个 example-udf-1.1.jarjar 包的名字是框架的名字加版本

image.png

把 jar 上传到 hive 服务器中做一个自定义函数的注册拖拽上传 jar 包添加自定义函数需要通过命令把 jar 包添加到 hive 环境变量中进行 agent 注册临时函数就可以使用

7、第一个叫导入 hive 的环境变量中用 add jar 命令在 root 路径下 example-udf-1.1.jar注意要删除空格否则会报错在服务器日志中显示出来添加到成功的 jar 包中

image.png

8、注册临时函数

使用:打成 jar 包,hive 中 add jar xx.jar ;

create temporary function ua_parse as ‘cn. itcast.hive.udf .TestUA' ;自定义函数的名字jar 组类的全路径

select ua_ parse(ua) from table_ name limit 3;

打开编辑器,Copy Peference。全路径拷贝下来替换到 cn. itcast. hive.udf. TestUA

image.png

复制注册create temporary function ua_ parse as 'cn. itcast.hive . udf .UAParseUDF' ;

在 hive 中执行注册成功使用自定义函数 ua_parse 对字段进行相关的解析pageviews 中有 useragent非常标准针对 ods_click

_pageviews.http_user agent 表进行相关的操作演示是否能解析成功

字段叫 ods_ click_ pageviews因为返回的字段比较多所以限制返回三条记录解析 http_user agent 字段执行 sql 语句 select ua_parse(http_user_agent) from ods_click_ pageviewslimit 3;

如果不解析返回会如何把解析函数去掉直接返回字段可以看到返回的是一长串字符串

image.png

执行解析可以看到出现了相关信息windows 平台谷歌平台ie 浏览器相关的版本如果没有显示NULL如果做这样的解析处理再统计来自于 windows 平台火狐浏览器有多少个根据分组统计即可这就是按照终端维度分析的好处

image.png

重点在如何使用第三方的 jar 包解析 ua特别注意 hive 自定义函数 udf 的编写过程在企业中用的非常多一定要梳理清楚

相关文章
|
并行计算 Java 数据处理
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
1112 0
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
1340 2
|
Web App开发 移动开发 前端开发
React音频播放器样式自定义全解析:从入门到避坑指南
在React中使用HTML5原生&lt;audio&gt;标签时,开发者常面临视觉一致性缺失、样式定制局限和交互体验割裂等问题。通过隐藏原生控件并构建自定义UI层,可以实现完全可控的播放器视觉风格,避免状态不同步等典型问题。结合事件监听、进度条拖拽、浏览器兼容性处理及性能优化技巧,可构建高性能、可维护的音频组件,满足跨平台需求。建议优先使用成熟音频库(如react-player),仅在深度定制需求时采用原生方案。
563 12
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
弹性计算 网络协议 Ubuntu
如何在阿里云国际版Linux云服务器中自定义配置DNS
如何在阿里云国际版Linux云服务器中自定义配置DNS
|
程序员 开发者 Python
深度解析Python中的元编程:从装饰器到自定义类创建工具
【10月更文挑战第5天】在现代软件开发中,元编程是一种高级技术,它允许程序员编写能够生成或修改其他程序的代码。这使得开发者可以更灵活地控制和扩展他们的应用逻辑。Python作为一种动态类型语言,提供了丰富的元编程特性,如装饰器、元类以及动态函数和类的创建等。本文将深入探讨这些特性,并通过具体的代码示例来展示如何有效地利用它们。
342 0
|
开发者 监控 开发工具
如何将JSF应用送上云端?揭秘在Google Cloud Platform上部署JSF应用的神秘步骤
【8月更文挑战第31天】本文详细介绍如何在Google Cloud Platform (GCP) 上部署JavaServer Faces (JSF) 应用。首先,确保已准备好JSF应用并通过Maven构建WAR包。接着,使用Google Cloud SDK登录并配置GCP环境。然后,创建`app.yaml`文件以配置Google App Engine,并使用`gcloud app deploy`命令完成部署。最后,通过`gcloud app browse`访问应用,并利用GCP的监控和日志服务进行管理和故障排查。整个过程简单高效,帮助开发者轻松部署和管理JSF应用。
247 0
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1257 29
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
518 4
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

推荐镜像

更多
  • DNS