开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第四阶段): 网站流量日志分析--统计分析--多维统计分析--终端维度--自定义 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。
选择 maven 模块,点击 next。
groupid 是公司组织域名 cn.itcast.bigdata,框架名 example-udf,版本号 version 是1.1。
工程名与框架名保持一致 example-udf。
点击 finish,提示目录不存在,是否需要创建,点击 ok。
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。
创建 class,UAParseUDF。
这个核心中当把第三方的 jar 导入之后就很简单,只要传入标准的 ua 字 符串,就像数据中的第三行。
就可以构建 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 Projects,lifecycle,package 打包。
这时就会把 jar 包打到工程目录下,因为涉及到签名,冲突,依赖,所以打包的长一些,需要把依赖的 jar 包也导入进来,打包完显示 build success,这时也弹出新的 target 目录,在目录下有两个jar包,一个是 example-udf-1.1.jar 工程 jar 包,另一个是 original- example -udf-1.1.jar,区别很明显,一个是把所有以来的 jar 包导入进去,一个是只把自己写的 jar 导入进来,选择第一个 example-udf-1.1.jar,jar 包的名字是框架的名字加版本。
把 jar 上传到 hive 服务器中,做一个自定义函数的注册,拖拽上传 jar 包,添加自定义函数需要通过命令把 jar 包添加到 hive 环境变量中进行 agent 注册临时函数就可以使用。
7、第一个叫导入 hive 的环境变量中,用 add jar 命令在 root 路径下 example-udf-1.1.jar,注意要删除空格,否则会报错,在服务器日志中显示出来,添加到成功的 jar 包中。
8、注册临时函数
使用:打成 jar 包,hive 中 add jar xx.jar ;
create temporary function
u
a_parse as ‘cn. itcast.hive.udf .TestUA' ;
自定义函数的名字,jar 组类的全路径
select ua_ parse(ua) from table_ name limit 3;
打开编辑器,Copy Peference。全路径拷贝下来,替换到 cn. itcast. hive.udf. TestUA。
复制注册,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_ pageviews
limit 3;
如果不解析返回会如何,把解析函数去掉,直接返回字段,可以看到返回的是一长串字符串,
执行解析,可以看到出现了相关信息,windows 平台,谷歌平台,ie 浏览器相关的版本,如果没有显示NULL,如果做这样的解析处理,再统计来自于 windows 平台,火狐浏览器有多少个,根据分组统计即可,这就是按照终端维度分析的好处,
重点在如何使用第三方的 jar 包解析 ua,特别注意 hive 自定义函数 udf 的编写过程,在企业中用的非常多,一定要梳理清楚。