[Hive_add_11] Hive 使用 UDTF 实现日志降维
0. 说明
对日志进行降维处理,将日志分为几个小表
通过编写 UDTF ,对日志降维,将日志聚合体相关字段抽取出来,形成新表。
1. 操作流程
1.0 日志部分内容
1532868065.518#192.168.23.1#1532868067548#200#{\"appChannel\":\"appstore\",\"appErrorLogs\": [{\"createdAtMs\":1530455040000,\"errorBrief\":\"at cn.lift.appIn.control.CommandUtil.getInfo(CommandUtil.java:67)\",\"errorDetail\":\"at cn.lift.dfdfdf.control.CommandUtil.getInfo(CommandUtil.java:67) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606)\"},{\"createdAtMs\":1530393180000,\"errorBrief\":\"at cn.lift.appIn.control.CommandUtil.getInfo(CommandUtil.java:67)\",\"errorDetail\":\"at cn.lift.dfdfdf.control.CommandUtil.getInfo(CommandUtil.java:67) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606)\"}],\"appEventLogs\":[{\"createdAtMs\":1530412800000,\"eventId\":\"share\",\"logType\":\"event\",\"mark\":\"4\",\"musicID\":\"傲红尘\"}],\"appPageLogs\":[{\"createdAtMs\":1530449520000,\"logType\":\"page\",\"nextPage\":\"list.html\",\"pageId\":\"list.html\",\"pageViewCntInSession\":0,\"visitIndex\":\"2\"}],\"appPlatform\":\"ios\",\"appStartupLogs\":[{\"brand\":\"联想\",\"carrier\":\"中国联通\",\"country\":\"china\",\"createdAtMs\":1530385560000,\"logType\":\"startup\",\"network\":\"cell\",\"province\":\"hebei\",\"screenSize\":\"960 * 640\"},{\"brand\":\"魅族\",\"carrier\":\"中国铁通\",\"country\":\"america\",\"createdAtMs\":1530412860000,\"logType\":\"startup\",\"network\":\"3g\",\"province\":\"guangxi\",\"screenSize\":\"480 * 320\"}],\"appUsageLogs\":[{\"createdAtMs\":1530379200000,\"logType\":\"usage\",\"singleDownloadTraffic\":\"12800\",\"singleUploadTraffic\":\"128\",\"singleUseDurationSecs\":\"123\"}],\"appVersion\":\"1.0.0\",\"deviceId\":\"Device000099\",\"deviceStyle\":\"oppo 1\",\"osType\":\"1.4.0\"}
1.1 创建 logAgg表
创建 logAgg表,分区表 => year, month, day
create table logAgg(serverTime string,remoteIp string,clientTime string,status string, json string)partitioned by(year string, month string, day string)row format delimitedfields terminated by '#' ;
1.2 load 数据到 logAgg表
load data local inpath '/home/centos/files/2018-07-01.log' into table logagg partition(year='2018',month='07',day='01');
1.3 降维处理
1. 代码编写
ParseJsonUtil.java
ParseEvent.java
2. 上传并同步
先打包再放入 /soft/hive/lib 中
cp /soft/hive/lib/myhive-1.0-SNAPSHOT.jar /soft/hadoop/share/hadoop/common/lib/xsync.sh /soft/hadoop/share/hadoop/common/lib/myhive-1.0-SNAPSHOT.jar
3. 注册临时函数
create temporary function parseEvent as 'com.share.udtf.ParseEvent';
4.测试
select parseEvent(json) from logAgg;
1.4 创建 logEvent表
create table logevent(deviceId string, createdAtMs string, eventId string, logType string , mark string, musicID string)stored as parquet tblproperties('parquet.compression'='GZIP');
1.5 转储
insert into logevent select parseEvent(json) from logaggwhere year='2018' and month='07' and day='01';
1.6 对 logEvent表进行操作
1. 计算每个用户对每首歌的评分
select deviceid, musicid, sum(cast(mark as int)) as sum from logevent where musicId is not null group by deviceid, musicid;
2. 计算每个用户对每首歌的评分与最高评分
select deviceid , musicid, sum, max(sum)over(partition by deviceid) as sum2 from ( select deviceid, musicid, sum(cast(mark as int)) as sum from logevent where musicId is not null group by deviceid, musicid )a;
3. 使用 sql 计算出,每个用户最喜欢(评分最高)的歌曲,及其评分
select deviceid , musicid, sum from ( select deviceid , musicid, sum, max(sum)over(partition by deviceid) as sum2 from ( select deviceid, musicid, sum(cast(mark as int)) as sum from logevent where musicId is not null group by deviceid, musicid )a )b where sum=sum2 ;
2. 附加内容
2.1 Hive 加载 jar 方式
1. 将 jar 放在 Hive 的 lib 下,并重启 Hive
/soft/hive/lib
2. 通过配置文件指定 jar,并重启 Hive
hive.aux.jars.path=/x/x/x.jar
3. 临时加载 jar
hive> add jar /x/x/x.jar
2.2 注册函数方法
1. create function as ''; // 永久
2. create temporary function as ''; // 临时
3. create function xxx as '' using jar 'hdfs://mycluster/xxx.jar'; // 将 jar 包放入 HDFS 中,避免重启
转载于:https://www.cnblogs.com/share23/p/10361382.html
[Hive_add_11] Hive 使用 UDTF 实现日志降维相关推荐
- Hive深入浅出UDTF
前面两篇文章我们分析了UDF和UDAF的原理以及实现思路,这一节我们介绍另外一种UDF: UDTF((User-Defined Table-Generating Functions),是用来解决输入一 ...
- hive基于新浪微博的日志数据分析——项目及源码
有需要本项目的全套资源资源以及部署服务可以私信博主!!! 该系统的目的是利用大数据技术,分析新浪微博的日志数据,从而探索用户行为.内容传播和移动设备等各个层面的特性和动向.这项研究为公司和个人在制定营 ...
- 基于Hive的搜狗搜索日志与结果Python可视化设计
目录 一.实验描述 2 二.实验目的 2 三.实验环境 2 四.实验步骤 2 4.1 元数据库 Mysql 安装 2 2) 安装 mysql 所需依赖: 3 3) 解压 mysql 安装包: 3 4) ...
- mysql 统计 uv pv_结合Hive、Sqoop统计日志pv和uv
分析 数据源格式 121508281810000000 http://www.yhd.com/?union_ref=7&cp=0 3 PR4E9HWE38DMN4Z6HUG667SCJNZXM ...
- SuperSet连接Hive失败(客户端报日志拒绝连接)
先上报错,百度无数SuperSet的解决办法整了三四天无果后,打了两天游戏突然想到了个找问题的办法 INFO:thrift.transport.TSocket:Could not connect to ...
- 解决使用hive打印无效INFO日志问题
一劳永逸的方法 配置hive-site.xml,添加下面配置信息 <property><name>hive.server2.logging.operation.enabled& ...
- hive metastore mysql_Hive初步使用、安装MySQL 、Hive配置MetaStore、配置Hive日志《二》...
一.Hive的简单使用 基本的命令和MySQL的命令差不多 首先在 /opt/datas 下创建数据 students.txt 1001 zhangsan 1002 lisi 1003 wangwu ...
- 大数据学习之路-Hive
Hive 1. Hive基本概念 1.1 什么是Hive 1.2 Hive的优缺点 1.2.1 优点 1.2.2 缺点 1.3 Hive架构原理 1.4 Hive和 数据库比较 1.4.1 查询语言 ...
- HIVE最全面入门指南
一.Hive简介 Facebook为了解决海量日志数据的分析而开发了Hive,后来开源给了Apache软件基金会. 官网定义: The Apache Hive ™ data warehouse sof ...
最新文章
- 【算法】设计算法求所有强连通分量的完整代码(kosaraju算法)
- OpenCV PCA与指定的保留差异量的实例(附完整代码)
- 20220211-CTF-MISC-006-pure_color(stegsolve工具的使用)-007-Aesop_secret(AES解密)
- 在java web工程中jsp页面中使用kindeditor
- 如何使用阿里云ARMS诊断Java服务端报错问题
- html抓取成xml,使用XML包将html表抓取到R数据帧中
- 编码表概述和常见编码表
- Apache虚拟主机的三种方式
- POI操作Microsoft Office 之 操作PPT简单示例(附源码)
- linux引导程序下载,SysLinux 4.05 下载 功能强大的引导加载程序
- Javascript的事件驱动
- verilog之分频大全
- 第三方登陆实践之基于OAuth的FACEBOOK Web Login(最新版)
- App地推统计:最全面的业绩统计方案
- ECS的简单入门(一):概念
- html+css简单立体导航栏
- Windows mobile PPC 下利用 tmail.exe 发送短信、彩信、邮件
- C语言编程练习 2.编写人得票统计程序。设有3个候选人,每次输入一个得票候选人的名字,不考虑弃权情况,要求最后输出各个候选人的得票结果(参加投票人数由程序运行时输入)。
- Android视频播放器架构接口的设计
- 我的镜头观,尼康如何搭配镜头(!!强烈推荐!!) 转贴
热门文章
- Android中设置RecyclerView的每一个item的单项点击事件
- MyBatis中提示:You have an error in your SQL syntax; check the manual that corresponds to your MySQL ser
- SpringBoot中整合Quartz
- server.xml中也能获取Tomcat相对路径
- Nodejs简介以及Windows上安装Nodejs
- SpringBoot中使用Thymeleaf常用功能(三):测试Thymeleaf循环取数据
- 数据共享如何改变世界_做个手活就改变世界了?论“手工木匠”如何改变了西方文明(3)...
- mysql存储过程 php_PHP调用MYSQL存储过程实例
- java 找不到mysql驱动_java lib目录添加了mysql驱动包,仍然找不到class??
- 直播回顾 | 数据驱动「产品迭代」的三大场景详解