0. 说明

  对日志进行降维处理,将日志分为几个小表

  通过编写 UDTF ,对日志降维,将日志聚合体相关字段抽取出来,形成新表。


1. 操作流程

  1.0 日志部分内容

  1. 1532868065.518#192.168.23.1#1532868067548#200#{\"appChannel\":\"appstore\",\"appErrorLogs\":
  2.  
  3. [{\"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

  1. create table logAgg(serverTime string,remoteIp string,clientTime string,status string, json string)
  2. partitioned by(year string, month string, day string)
  3. row format delimited
  4. fields terminated by '#' ;

  1.2 load 数据到 logAgg表

  1.   load data local inpath '/home/centos/files/2018-07-01.log' into table logagg partition(year='',month='',day='');

  1.3 降维处理

  1. 代码编写

  ParseJsonUtil.java

  ParseEvent.java

  2. 上传并同步

  先打包再放入 /soft/hive/lib 中

  1. cp /soft/hive/lib/myhive-1.0-SNAPSHOT.jar /soft/hadoop/share/hadoop/common/lib/
  2. xsync.sh /soft/hadoop/share/hadoop/common/lib/myhive-1.0-SNAPSHOT.jar

  3. 注册临时函数

  1. create temporary function parseEvent as 'com.share.udtf.ParseEvent';

  4.测试

  1. select parseEvent(json) from logAgg;

  1.4 创建 logEvent表

  1. create table logevent(deviceId string, createdAtMs string, eventId string, logType string , mark string, musicID string)
  2. stored as parquet tblproperties('parquet.compression'='GZIP');

  1.5 转储

  1. insert into logevent
  2. select parseEvent(json) from logagg
  3. where year='' and month='' and day='';

  1.6 对 logEvent表进行操作

  1. 计算每个用户对每首歌的评分

  1. select deviceid, musicid, sum(cast(mark as int)) as sum
  2. from logevent
  3. where musicId is not null
  4. group by deviceid, musicid

  2. 计算每个用户对每首歌的评分与最高评分

  1. select deviceid , musicid, sum, max(sum)over(partition by deviceid) as sum2
  2. from (
  3. select deviceid, musicid, sum(cast(mark as int)) as sum
  4. from logevent where musicId is not null group by deviceid, musicid
  5. )a

  3. 使用 sql 计算出,每个用户最喜欢(评分最高)的歌曲,及其评分

  1. select deviceid , musicid, sum from (
  2. select deviceid , musicid, sum, max(sum)over(partition by deviceid) as sum2
  3. from (
  4. select deviceid, musicid, sum(cast(mark as int)) as sum
  5. from logevent where musicId is not null group by deviceid, musicid
  6. )a
  7. )b
  8. 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 中,避免重启


[Hive_add_11] Hive 使用 UDTF 实现日志降维的更多相关文章

  1. hive自定义UDTF函数叉分函数

    hive自定义UDTF函数叉分函数 1.介绍 从聚合体日志中需要拆解出来各子日志数据,然后单独插入到各日志子表中.通过表生成函数完成这一过程. 2.定义ForkLogUDTF 2.1 HiveUtil ...

  2. Hive分析hadoop进程日志

    想把hadoop的进程日志导入hive表进行分析,遂做了以下的尝试. 关于hadoop进程日志的解析 使用正则表达式获取四个字段,一个是日期时间,一个是日志级别,一个是类,最后一个是详细信息, 然后在 ...

  3. 使用hive分析nginx访问日志方法

    以下案例是使用hive分析nginx的访问日志案例,其中字段分隔通过正则表达式匹配,具体步骤如下: 日志格式: 192.168.5.139 - - [08/Jun/2017:17:09:12 +080 ...

  4. Hive分析统计离线日志信息

    关注公众号:分享电脑学习回复"百度云盘" 可以免费获取所有学习文档的代码(不定期更新)云盘目录说明:tools目录是安装包res 目录是每一个课件对应的代码和资源等doc 目录是一 ...

  5. DeveloperGuide Hive UDTF

    Writing UDTF's Writing UDTF's GenericUDTF Interface GenericUDTF Interface A custom UDTF can be creat ...

  6. Hive日志(Hive Logging)--hive GettingStarted翻译

    Hive uses log4j for logging. By default logs are not emitted to the console by the CLI. The default ...

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

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

  8. hive 日志

    hive中日志分为两种: 1 系统日志,记录hive运行情况,错误状态 2 job日志 , 记录hive中 job执行的历史过程 系统日志存储位置: 配置在 hive/conf/hive-log4j. ...

  9. Hive 自定义函数 UDF UDAF UDTF

    1.UDF:用户定义(普通)函数,只对单行数值产生作用: 继承UDF类,添加方法 evaluate() /** * @function 自定义UDF统计最小值 * @author John * */ ...

随机推荐

  1. 定时备份 MySQL 并上传到七牛

    多数应用场景下,我们需要对重要数据进行备份.并放置到一个安全的地方,以备不时之需. 常见的 MySQL 数据备份方式有,直接打包复制对应的数据库或表文件(物理备份).mysqldump 全量逻辑备份. ...

  2. 翻译:非递归CTE(已提交到MariaDB官方手册)

    本文为mariadb官方手册:非递归CTE的译文. 原文:https://mariadb.com/kb/en/library/non-recursive-common-table-expression ...

  3. Hyperledger Fabric链码之二

    上篇文章中我们介绍了链码的概念,本文中我们将介绍Fabric下链码的编写和测试.我们会通过一个简单例子的方式来阐述链码API的使用. 链码API     每一个链码程序都必须实现一个接口Chainco ...

  4. DNS工作原理

    一.简述dns DNS(domain name system)域名系统或者(domain named system)区域名称服务,分为正向与反向域名解析,适用C/S,端口路53/udp,53/tcp, ...

  5. Spark学习(一)

    一.启动Spark 1.standalone模式 方法一: (1)启动主节点 ./sbin/start-master.sh 访问http://127.0.0.1:8080,得到如下页面 注意标记到的链 ...

  6. [转]RPA流程自动化-Blueprism认证考试介绍

    本文转自:https://www.cnblogs.com/digod/p/9190186.html RPA流程自动化-Blueprism认证考试介绍 接触RPA有一段时间了,几种RPA相关工具也都试用 ...

  7. oracle listener.ora文件配置

    # listener.ora Network Configuration File: /oracleDB/product//db_1/network/admin/listener.ora # Gene ...

  8. 1.shell学习之常用语句

    本章学习内容: 1.常见符号 2.命令分隔符-分号";" 3.双分号 ";;" 4. '单引号和"双引号 5.`反引号和$() 6.${}和$ 7.冒 ...

  9. 程序猿制造Bug的根本原因竟然是....

    传说中: 「杀一个程序猿不需要用枪,改三次需求就可以了.」 而且, 「这竟然也是程序猿制造Bug的根本原因....」 ↓↓↓↓↓↓↓ #/原始需求/#   你去饭店,坐下来. “服务员,给我来份宫保鸡 ...

  10. Netty实战七之EventLoop和线程模型

    简单地说,线程模型指定了操作系统.编程语言.框架或者应用程序的上下文中的线程管理的关键方面.Netty的线程模型强大但又易用,并且和Netty的一贯宗旨一样,旨在简化你的应用程序代码,同时最大限度地提 ...