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 实现日志降维相关推荐

  1. Hive深入浅出UDTF

    前面两篇文章我们分析了UDF和UDAF的原理以及实现思路,这一节我们介绍另外一种UDF: UDTF((User-Defined Table-Generating Functions),是用来解决输入一 ...

  2. hive基于新浪微博的日志数据分析——项目及源码

    有需要本项目的全套资源资源以及部署服务可以私信博主!!! 该系统的目的是利用大数据技术,分析新浪微博的日志数据,从而探索用户行为.内容传播和移动设备等各个层面的特性和动向.这项研究为公司和个人在制定营 ...

  3. 基于Hive的搜狗搜索日志与结果Python可视化设计

    目录 一.实验描述 2 二.实验目的 2 三.实验环境 2 四.实验步骤 2 4.1 元数据库 Mysql 安装 2 2) 安装 mysql 所需依赖: 3 3) 解压 mysql 安装包: 3 4) ...

  4. mysql 统计 uv pv_结合Hive、Sqoop统计日志pv和uv

    分析 数据源格式 121508281810000000 http://www.yhd.com/?union_ref=7&cp=0 3 PR4E9HWE38DMN4Z6HUG667SCJNZXM ...

  5. SuperSet连接Hive失败(客户端报日志拒绝连接)

    先上报错,百度无数SuperSet的解决办法整了三四天无果后,打了两天游戏突然想到了个找问题的办法 INFO:thrift.transport.TSocket:Could not connect to ...

  6. 解决使用hive打印无效INFO日志问题

    一劳永逸的方法 配置hive-site.xml,添加下面配置信息 <property><name>hive.server2.logging.operation.enabled& ...

  7. hive metastore mysql_Hive初步使用、安装MySQL 、Hive配置MetaStore、配置Hive日志《二》...

    一.Hive的简单使用 基本的命令和MySQL的命令差不多 首先在 /opt/datas 下创建数据  students.txt 1001 zhangsan 1002 lisi 1003 wangwu ...

  8. 大数据学习之路-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 查询语言 ...

  9. HIVE最全面入门指南

    一.Hive简介 Facebook为了解决海量日志数据的分析而开发了Hive,后来开源给了Apache软件基金会. 官网定义: The Apache Hive ™ data warehouse sof ...

最新文章

  1. 【算法】设计算法求所有强连通分量的完整代码(kosaraju算法)
  2. OpenCV PCA与指定的保留差异量的实例(附完整代码)
  3. 20220211-CTF-MISC-006-pure_color(stegsolve工具的使用)-007-Aesop_secret(AES解密)
  4. 在java web工程中jsp页面中使用kindeditor
  5. 如何使用阿里云ARMS诊断Java服务端报错问题
  6. html抓取成xml,使用XML包将html表抓取到R数据帧中
  7. 编码表概述和常见编码表
  8. Apache虚拟主机的三种方式
  9. POI操作Microsoft Office 之 操作PPT简单示例(附源码)
  10. linux引导程序下载,SysLinux 4.05 下载 功能强大的引导加载程序
  11. Javascript的事件驱动
  12. verilog之分频大全
  13. 第三方登陆实践之基于OAuth的FACEBOOK Web Login(最新版)
  14. App地推统计:最全面的业绩统计方案
  15. ECS的简单入门(一):概念
  16. html+css简单立体导航栏
  17. Windows mobile PPC 下利用 tmail.exe 发送短信、彩信、邮件
  18. C语言编程练习 2.编写人得票统计程序。设有3个候选人,每次输入一个得票候选人的名字,不考虑弃权情况,要求最后输出各个候选人的得票结果(参加投票人数由程序运行时输入)。
  19. Android视频播放器架构接口的设计
  20. 我的镜头观,尼康如何搭配镜头(!!强烈推荐!!) 转贴

热门文章

  1. Android中设置RecyclerView的每一个item的单项点击事件
  2. MyBatis中提示:You have an error in your SQL syntax; check the manual that corresponds to your MySQL ser
  3. SpringBoot中整合Quartz
  4. server.xml中也能获取Tomcat相对路径
  5. Nodejs简介以及Windows上安装Nodejs
  6. SpringBoot中使用Thymeleaf常用功能(三):测试Thymeleaf循环取数据
  7. 数据共享如何改变世界_做个手活就改变世界了?论“手工木匠”如何改变了西方文明(3)...
  8. mysql存储过程 php_PHP调用MYSQL存储过程实例
  9. java 找不到mysql驱动_java lib目录添加了mysql驱动包,仍然找不到class??
  10. 直播回顾 | 数据驱动「产品迭代」的三大场景详解