博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive分析hadoop进程日志
阅读量:5095 次
发布时间:2019-06-13

本文共 3671 字,大约阅读时间需要 12 分钟。

想把hadoop的进程日志导入hive表进行分析,遂做了以下的尝试。

关于hadoop进程日志的解析

使用正则表达式获取四个字段,一个是日期时间,一个是日志级别,一个是类,最后一个是详细信息,
然后在hive中建一个表,可以用来方便查询。

2015-12-18 22:23:23,357 INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: Memory usage of ProcessTree 32652 for container-id container_1448915696877_26289_01_000158: 110.6 MB of 2 GB physical memory used; 2.1 GB of 4.2 GB virtual memory used

2015-12-18 22:23:23,426 INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: Memory usage of ProcessTree 32615 for container-id container_1448915696877_26289_01_000102: 104.6 MB of 2 GB physical memory used; 2.1 GB of 4.2 GB virtual memory used
2015-12-18 22:23:23,467 WARN org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: Uncaught exception in ContainerMemoryManager while managing memory of container_1448915696877_26289_01_000270
java.lang.IllegalArgumentException: disparate values
        at sun.misc.FDBigInt.quoRemIteration(FloatingDecimal.java:2931)
        at sun.misc.FormattedFloatingDecimal.dtoa(FormattedFloatingDecimal.java:922)
        at sun.misc.FormattedFloatingDecimal.<init>(FormattedFloatingDecimal.java:542)
        at java.util.Formatter$FormatSpecifier.print(Formatter.java:3264)
        at java.util.Formatter$FormatSpecifier.print(Formatter.java:3202)
        at java.util.Formatter$FormatSpecifier.printFloat(Formatter.java:2769)
        at java.util.Formatter$FormatSpecifier.print(Formatter.java:2720)
        at java.util.Formatter.format(Formatter.java:2500)
        at java.util.Formatter.format(Formatter.java:2435)
        at java.lang.String.format(String.java:2148)
        at org.apache.hadoop.util.StringUtils.format(StringUtils.java:123)
        at org.apache.hadoop.util.StringUtils$TraditionalBinaryPrefix.long2String(StringUtils.java:758)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl$MonitoringThread.formatUsageString(ContainersMonitorImpl.java:487)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl$MonitoringThread.run(ContainersMonitorImpl.java:399)
2015-12-18 22:23:23,498 WARN org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: Uncaught exception in ContainerMemoryManager while managing memory of container_1448915696877_26289_01_000214

DROP TABLE IF EXISTS hadoop_log; CREATE TABLE hadoop_log (date1 STRING,  time1 STRING,  msgtype STRING,  classname STRING,  msgtext STRING  ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES (  "input.regex" = "^(\\d{4}-\\d{2}-\\d{2})\\s+(\\d{2}.\\d{2}.\\d{2}.\\d{3})\\s+(\\S+)\\s+(\\S+)\\s+(.*)$", "output.format.string" = "%1$s %2$s %3$s %4$s %5$s")STORED AS TEXTFILE; LOAD DATA LOCAL INPATH "/home/student/hadooplog" INTO TABLE hadoop_log; SELECT date1, time1, msgtext FROM hadoop_log WHERE msgtype='ERROR' OR msgtype='WARN' LIMIT 5; LOAD DATA LOCAL INPATH "/home/student/hadooplog3" OVERWRITE INTO TABLE hadoop_log;

需要注意的一点是,hive以\n做为行分隔符,所以需要对原有的日志文件进行处理,因为原有的日志文件中可能有异常或错误发生,这个时候是多行的。否则hive中会有很

多空的记录。

可以写一段bash shell或python来完成需要的功能。下面是我刚学python写的,很简陋。

import rep=re.compile(r"^\d{4}-\d{2}-\d{2}\s+\d{2}.\d{2}.\d{2}.\d{3} INFO|WARN|ERROR|DEBUG")str=""f2=open('/home/student/hadooplog4','w')with open('/app/cdh23502/logs/hadoop-student-datanode-nn1.log','r') as f:    for l in f:        if(str==""):            str=l.rstrip()            continue        if(str!="" and len(p.findall(l))>0):            print "\n"+str        f2.write(str+"\n")            str=l.rstrip()        else:            str=str+l.rstrip()    print "\n" + str    f2.write(str+"\n")f2.flush()f2.close()

转载于:https://www.cnblogs.com/huaxiaoyao/p/5066454.html

你可能感兴趣的文章
重构代码 —— 函数即变量(Replace temp with Query)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
我眼中的技术地图
查看>>
lc 145. Binary Tree Postorder Traversal
查看>>
在centos上开关tomcat
查看>>
无人值守安装linux系统
查看>>
黑马程序员——2 注释
查看>>
android dialog使用自定义布局 设置窗体大小位置
查看>>
ionic2+ 基础
查看>>
查询消除重复行
查看>>
[leetcode]Minimum Path Sum
查看>>
内存管理 浅析 内存管理/内存优化技巧
查看>>
Json格式的字符串转换为正常显示的日期格式
查看>>
[转]Android xxx is not translated in yyy, zzz 的解决方法
查看>>
Mobiscroll脚本破解,去除Trial和注册时间限制【转】
查看>>
iframe父子页面通信
查看>>
map基本用法
查看>>